2009-08-04 15 views
5

मैं पोर्टऑडियो और पायथन के साथ खेल रहा हूं।पायथन में बफर में फ्लोट की सूची कनवर्ट करें?

data = getData() 
stream.write(data) 

मैं चाहता हूं कि मेरी स्ट्रीम ध्वनि डेटा चलाएं, जो फ़्लोट 32 मानों में प्रदर्शित होती है। इसलिए मैं निम्नलिखित समारोह का उपयोग करें:

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

दुर्भाग्य से वह काम नहीं करता क्योंकि stream.write चाहता है एक बफर वस्तु में पारित होने के लिए:

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

तो मेरे सवाल है: मैं कैसे की सूची को परिवर्तित कर सकते हैं एक बफर ऑब्जेक्ट में तैरता है?

उत्तर

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

शायद बजाय विचार करें:

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

शायद आप अचार की तरह एक पैकेज का उपयोग करने के लिए पहली डेटा क्रमानुसार करने की है।

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

तो यह में वापस लोड:

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


d2 == d 

रिटर्न यह सच है

2

वास्तव में, सबसे आसान तरीका है struct module उपयोग करने के लिए है। यह पाइथन ऑब्जेक्ट्स से सी-जैसे "देशी" ऑब्जेक्ट्स में कनवर्ट करने के लिए डिज़ाइन किया गया है।

संबंधित मुद्दे