scipy.io.wavfile 给出“WavFileWarning: chunk not understanded”错误

新手上路,请多包涵

我正在尝试使用 scipy 读取 .wav 文件。我这样做:

 from scipy.io import wavfile

filename = "myWavFile.wav"
print "Processing " + filename

samples = wavfile.read(filename)

我得到了这个丑陋的错误:

 /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/io/wavfile.py:121: WavFileWarning: chunk not understood
  warnings.warn("chunk not understood", WavFileWarning)
Traceback (most recent call last):
  File "fingerFooler.py", line 15, in <module>
    samples = wavfile.read(filename)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/io/wavfile.py", line 127, in read
    size = struct.unpack(fmt, data)[0]
struct.error: unpack requires a string argument of length 4

我正在使用 Python 2.6.6、numpy 1.6.2 和 scipy 0.11.0

是导致问题的 wav 文件。

有什么想法吗?这里出了什么问题?

原文由 Eric 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2k
2 个回答

我对 WAV 文件格式一无所知,但深入研究 scipy 代码看起来像 scipy 不熟悉文件末尾出现的块(块 ID 是 bext ,2753632 字节,如果有帮助的话)。该块被声明为 603 字节长,因此它读取了它并期待 603 字节后的另一个块 ID——它没有找到它(文件用完)并失败了。

你在其他 WAV 文件上试过成功了吗?这个是怎么产生的?

原文由 necaris 发布,翻译遵循 CC BY-SA 3.0 许可协议

这些文件不再可用(9 个月后不足为奇!),但为了将来参考,最可能的原因是它具有 scipy 无法解析的额外元数据。

在我的例子中,它是由 Audacity 添加的默认元数据(版权、曲目名称等)——您可以在 Audacity 中打开文件并使用文件…打开元数据编辑器来查看它。然后使用“清除”按钮将其删除,然后重试。

当前版本的 scipy 支持以下 RIFF 块 - ‘fmt’、’fact’、’data’ 和 ‘LIST’。 RIFF 上的维基百科页面 更详细地介绍了 WAV 文件的结构,例如您的文件可能包含不受支持但很受欢迎的 INFO 块

原文由 rolinger 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题