如何将数据发送到wave.writeframesraw(数据)

时间:2015-02-26 19:52:54

标签: python audio buffer typeerror wave

我正在尝试使用Python中的本机wave模块编写wave文件,但似乎没有任何关于wave.writeframesraw(数据)的'data'字段意味着什么的文档,或者什么是框架甚至是。由于计算机上的安装问题,我无法使用任何外部模块或库。当我尝试使用youtube上的以下示例时,我收到错误。

data = [math.sin(x*2*math.pi*440/44100) for x in range(44100)]
#from tutorial:
BinStr = "" #create a binary string
for i in data:
    BinStr = BinStr + str(struct.pack('h', round(i*20000)))
file.writeframesraw(BinStr)


**file.writeframesraw(BinStr)
  File "C:\Python34\lib\wave.py", line 414, in writeframesraw
    data = memoryview(data).cast('B')
TypeError: memoryview: str object does not have the buffer interface**

2 个答案:

答案 0 :(得分:0)

我认为该问题与未设置所有文件参数有关。当我使用wave.setparams((2,2,441,1,' NONE','未压缩'))时,它可以工作。

答案 1 :(得分:0)

我认为您需要将str变量编码为unicode格式,属于'bytes'类。在Python 2.xx中,writeframesraw函数接受str类型的数据,但是在python 3.xx中,此功能不再起作用,并且writeframesraw现在需要一个“类似字节的对象”。

您可以通过简单地将'str'变量转换为unicode来实现,而writeframesraw会接受该变量。

尝试一下。

unicodeBinStr = BinStr.encode('utf-8')

file.writeframesraw(unicodeBinStr)

这将创建一个名为unicodeBinStr的新变量,该变量具有BinStr字符串中数据的'utf-8'编码值。希望这对您有用!

相关问题