2009-08-04 8 views
5

Je joue avec PortAudio et Python.Convertir la liste des flottants en tampon en Python?

data = getData() 
stream.write(data) 

Je souhaite que mon flux joue des données audio, représentées dans les valeurs Float32. Par conséquent, j'utilise la fonction suivante:

def getData(): 
    data = [] 
    for i in range(0, 1024): 
     data.append(0.25 * math.sin(math.radians(i))) 
    return data 

Malheureusement cela ne fonctionne pas parce que stream.write veut un objet tampon à passer dans:

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

Ma question est la suivante: Comment puis-je convertir ma liste de flotte dans un objet tampon?

Répondre

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

Tenez compte peut-être à la place:

d = [0.25 * math.sin(math.radians(i)) for i in range(0, 1024)] 

Peut-être que vous devez utiliser un paquet comme cornichon pour sérialiser les données en premier.

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

charger ensuite le dans:

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


d2 == d 

Renvoie True

2

En fait, la meilleure façon est d'utiliser le struct module. Il est conçu pour convertir des objets python en objets "natifs" de type C.

Questions connexes