2009-08-04 37 views
5

Tôi đang chơi xung quanh với PortAudio và Python.Chuyển danh sách các phao vào bộ đệm trong Python?

data = getData() 
stream.write(data) 

Tôi muốn luồng của mình phát dữ liệu âm thanh, được thể hiện bằng giá trị Float32. Vì vậy, tôi sử dụng các chức năng sau:

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

Thật không may điều đó không làm việc vì stream.write muốn một đối tượng đệm để được thông qua tại:

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

Vì vậy, câu hỏi của tôi là: Làm thế nào tôi có thể chuyển đổi danh sách các nổi vào một đối tượng đệm?

Trả lời

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

xem xét có lẽ thay vì:

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

Có lẽ bạn phải sử dụng một gói phần mềm như dưa để serialize dữ liệu đầu tiên.

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

Sau đó tải nó lại:

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


d2 == d 

trả về true

2

Trên thực tế, cách dễ nhất là sử dụng struct module. Nó được thiết kế để chuyển đổi từ các đối tượng python sang các đối tượng "bản địa" giống C.

Các vấn đề liên quan