質問

PortAudioとPythonで遊んでいます。

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

だから私の質問は:floatのリストをどのようにバッファオブジェクトに変換できますか?

役に立ちましたか?

解決

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)

他のヒント

実際、最も簡単な方法は、 structモジュールを使用することです。 PythonオブジェクトからCライクな「ネイティブ」に変換するように設計されています。オブジェクト。

おそらく代わりに考慮してください:

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

おそらく、最初にpickleなどのパッケージを使用してデータをシリアル化する必要があります。

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

Trueを返します

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top