Konvertieren Liste von Schwimmern in den Puffer in Python?
-
22-07-2019 - |
Frage
Ich spiele um mit Portaudio und Python.
data = getData()
stream.write( data )
Ich möchte meinen Strom Tondaten spielen, das heißt in Float32 Werte dargestellt. Deshalb verwende ich die folgende Funktion:
def getData():
data = []
for i in range( 0, 1024 ):
data.append( 0.25 * math.sin( math.radians( i ) ) )
return data
Leider funktioniert das nicht, weil stream.write
ein Puffer-Objekt will übergeben werden:
TypeError: argument 2 must be string or read-only buffer, not list
Also meine Frage ist: Wie kann ich meine Liste der Schwimmer in einen Puffer-Objekt konvertieren
Lösung
import struct
def getData():
data = []
for i in range( 0, 1024 ):
data.append( 0.25 * math.sin( math.radians( i ) ) )
return struct.pack('f'*len(data), *data)
Andere Tipps
Eigentlich ist der einfachste Weg, um das struct Modul zu verwenden . Es wurde entwickelt, aus Python-Objekte zu C-like "native" Objekte zu konvertieren.
Betrachten wir vielleicht statt:
d = [0.25 * math.sin(math.radians(i)) for i in range(0, 1024)]
Vielleicht haben Sie ein Paket wie Gurke verwenden, um zuerst die Daten serialisiert werden.
import pickle
f1 = open("test.dat", "wb")
pickle.dump(d, f1)
f1.close()
es dann lädt wieder in:
f2 = open("test.dat", "rb")
d2 = pickle.Unpickler(f2).load()
f2.close()
d2 == d
Gibt True zurück,
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow