【问题标题】:How do I send data to wave.writeframesraw(data)如何将数据发送到 wave.writeframesraw(data)
【发布时间】:2015-02-26 19:52:54
【问题描述】:

我正在尝试使用 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**

【问题讨论】:

  • BinStr = "" #create a binary string 这很令人担忧,这是来自使用 python2 的教程吗?鉴于这是 python 3,我想这应该是 bytes 或类似的。

标签: python audio buffer typeerror wave


【解决方案1】:

我认为问题与未设置所有文件参数有关。当我使用 wave.setparams((2, 2, 44100, 0, 'NONE', 'not compressed')) 时,它可以工作。

【讨论】:

    【解决方案2】:

    我相信您需要将 str 变量编码为 un​​icode 格式,它属于 '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”编码值。希望这对你有用!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-15
      • 2014-05-19
      • 1970-01-01
      相关资源
      最近更新 更多