簡體   English   中英

在Python中將浮點數列表轉換為緩沖區?

[英]Convert list of floats into buffer in Python?

我正在玩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

所以我的問題是:如何將我的浮動列表轉換為緩沖區對象?

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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM