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

cli*_*ton 2 python audio wav

我试图用Python上的文件进行声音分析,我有一个高清晰度的声音文件,它非常大(2.39 GB).但是,每当我尝试使用wave模块打开它时,我都会收到以下错误:

wave.Error: unknown format: 65534
Run Code Online (Sandbox Code Playgroud)

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

data = np.memmap(audioclip,dtype='h',mode='r')
Run Code Online (Sandbox Code Playgroud)

然而,这并没有得到准确的结果,因为它认为当只有一个小时的长度时,音障单是3小时.任何帮助将不胜感激,我有不同的错误代码的类似问题,但是这些对这个问题没有多大帮助.非常感谢!

jak*_*ket 8

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

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

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

我想你有几个选择:

  1. 找到一种转换不生成的文件的新方法 WAVE_FORMAT_EXTENSIBLE
  2. 修改源代码wave.py以支持WAVE_FORMAT_EXTENSIBLE- 假设该SubFormat字段是PCM或IEEE_FLOAT,这不是什么大问题.从这个角度来看,它只会增加标题的大小.如果它是另一个,SubFormat那么你甚至需要运行一个合适的解码器才能进入PCM.
  3. 使用其他工具将WAVE_FORMAT_EXTENSIBLE.wav文件转换为非.sox也许能够解决这个问题.

关于你问题的第二部分.从您的问题中不清楚如何确定文件的持续时间.但是如果你对可能会让你失望的频道数做出错误的假设.