转换浮点值列表到缓冲区在Python?
-
22-07-2019 - |
题
我玩弄PortAudio和Python。
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
所以我的问题是:我怎么能转换到一个缓冲区对象我的浮点值列表
解决方案
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)
其他提示
实际上,最简单的方法是使用结构模块 。它的目的是从Python对象转换为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
,则返回真
不隶属于 StackOverflow