【问题标题】:What is returned by wave.readframes?wave.readframes 返回什么?
【发布时间】:2011-01-05 00:49:49
【问题描述】:

我通过以下方式为变量x赋值:

import wave
w = wave.open('/usr/share/sounds/ekiga/voicemail.wav', 'r')
x = w.readframes(1)

当我输入 x 时,我得到:

'\x1e\x00'

所以x 得到了一个值。但那是什么?是十六进制的吗? type(x)type(x[0]) 告诉我 xx[0] 是一个字符串。谁能告诉我应该如何解释这个字符串?我可以将它们转换为整数吗?

【问题讨论】:

    标签: python wave


    【解决方案1】:

    这个字符串代表字节。我猜你可以用struct 包把它们变成一个整数,它允许解释字节字符串。

    【讨论】:

      【解决方案2】:

      交互式解释器会回显这样的不可打印字符。该字符串包含两个字节,0x1E 和 0x00。您可以使用struct.unpack("<h", x)(小端序,2 字节,有符号)将其转换为整数。

      【讨论】:

      • 在此之后如何将整数数组转换回相同格式的字符串?
      • @quano:数组具有.tostring() 方法。对于简单的序列,您可以使用struct.pack("<4H", 1, 2, 3, 4)。 numpy 也应该有类似的方法。
      • 应该是"
      【解决方案3】:

      这是一个两字节的字符串:

      >>> x='\x1e\x00'
      >>> map(ord, list(x))
      [30, 0]
      >>> [ord(i) for i in x]
      [30, 0]
      

      【讨论】:

        【解决方案4】:

        是的,它是十六进制的,但它的含义取决于 wav 文件的其他输出,例如样本宽度和通道数。您的数据可以通过两种方式读取,2 通道和 1 字节样本宽度(立体声)或 1 通道和 2 字节样本宽度(单声道)。使用x.getparams():第一个数字是通道数,第二个是样本宽度。

        This Link 解释的很好。

        【讨论】:

          猜你喜欢
          • 2017-07-23
          • 1970-01-01
          • 2012-01-15
          • 2020-06-02
          • 2019-09-28
          • 2015-09-06
          • 2011-07-30
          • 2015-12-27
          相关资源
          最近更新 更多