Python 中未读取大型波形文件

Large Wave File not being read in Python

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

wave.Error: unknown format: 65534

我通过将 .ts 文件转换为 .wav 文件得到了这个文件。我在标准清晰度节目中使用了相同的方法,效果很好。我可以使用

进行一些分析
data = np.memmap(audioclip,dtype='h',mode='r')

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

免责声明:我真的不太了解 python。

我用谷歌搜索 wave.py 并找到以下内容 link:http://www.opensource.apple.com/source/python/python-3/python/Lib/wave.py

如果您查找名为 _read_fmt_chunk 的函数,您将看到错误消息的来源。总之wave模块只支持WAVE_FORMAT_PCM。格式 65534 是由 Microsoft 定义的称为 WAVE_FORMAT_EXTENSIBLE 的格式,用于 multi-channel wave 文件。这很不常见。

我想你有几个选择:

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

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