سؤال

وأنا ألعب مع حولها بورت اوديو وبيثون.

data = getData()
stream.write( data )

وأريد بلدي تيار للعب البيانات الصوتية، التي تتمثل في القيم Float32. لذلك يمكنني استخدام الدالة التالية:

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

ولذا سؤالي هو: كيف يمكنني تحويل قائمتي العوامات في لكائن عازلة

هل كانت مفيدة؟

المحلول

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)

نصائح أخرى

والواقع، وأسهل طريقة هي استخدام البنية حدة . وهي مصممة لتحويل الأشياء من الثعبان إلى كائنات "الأم" C مثل.

والنظر ربما بدلا من ذلك:

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

وإرجاع صحيح

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top