我正在尝试使用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**
答案 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'编码值。希望这对您有用!