没有在Python中读取大波形文件

时间:2015-03-12 02:14:10

标签: python audio wav

我正在尝试使用Python对文件进行声音分析,并且我有一个来自高清晰度的节目的声音文件,它非常大(2.39 GB)。但是,每当我尝试使用wave模块打开它时,我都会收到以下错误:

wave.Error: unknown format: 65534

我通过将.ts文件转换为.wav文件来获取此文件。我在标准清晰度节目中使用了相同的方法,它工作得很好。我可以使用

进行一些分析
data = np.memmap(audioclip,dtype='h',mode='r')
然而,这并没有得到准确的结果,因为它认为当只有一个小时的时候,音障单是3小时。任何帮助将不胜感激,我有不同的错误代码的类似问题,但是这些对这个问题没有多大帮助。非常感谢你!

1 个答案:

答案 0 :(得分:7)

免责声明:我对python的了解并不多。

我用Google搜索wave.py并找到以下链接:http://www.opensource.apple.com/source/python/python-3/python/Lib/wave.py

如果您查找名为_read_fmt_chunk的函数,您将看到错误消息的来源。简而言之,波形模块仅支持WAVE_FORMAT_PCM。格式65534是Microsoft定义的名为WAVE_FORMAT_EXTENSIBLE的格式,用于多通道波文件。这很不常见。

我认为你有几个选择:

  1. 查找转换不生成WAVE_FORMAT_EXTENSIBLE
  2. 的文件的新方法
  3. 修改wave.py的来源以支持WAVE_FORMAT_EXTENSIBLE - 假设SubFormat字段是PCM或IEEE_FLOAT,这不是什么大问题。从这个角度来看,它只会增加标题的大小。如果它是另一个SubFormat,那么在你甚至可以进入PCM之前,你需要运行一个合适的解码器。
  4. 使用其他工具将WAVE_FORMAT_EXTENSIBLE .wav文件转换为非{。 sox可以处理此问题。
  5. 关于问题的第二部分。从您的问题中不清楚如何确定文件的持续时间。但是如果你对可能会让你失望的频道数做出错误的假设。