2009-08-04 6 views
5

Ich spiele mit PortAudio und Python herum.Liste der Fließkommazahlen in Python in Puffer konvertieren?

Ich möchte mein Stream Sounddaten wiedergeben, die in Float32-Werten dargestellt wird. 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, dass nicht funktioniert, weil stream.write ein Puffer-Objekt will weitergegeben werden:

TypeError: argument 2 must be string or read-only buffer, not list 

Also meine Frage ist: Wie kann ich konvertiere meine Liste schwebt in ein Pufferobjekt?

Antwort

8
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) 
0

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 zuerst die Daten serialisiert werden.

import pickle 
f1 = open("test.dat", "wb") 
pickle.dump(d, f1) 
f1.close() 

Dann ist es laden hinten:

f2 = open("test.dat", "rb") 
d2 = pickle.Unpickler(f2).load() 
f2.close() 


d2 == d 

Gibt True zurück

2

Eigentlich ist der einfachste Weg, um die struct module zu verwenden ist. Es wurde entwickelt, um Python-Objekte in C-ähnliche "native" Objekte umzuwandeln.