Scipy io读取wav文件错误。

5
每当我尝试读取一个.wav文件时,就会出现以下错误。 我已经到处搜索了,但没有取得任何进展。
代码:
import scipy as sp
import matplotlib.pyplot as plt
sr, y = sp.io.wavfile.read(MY_FILENAME)
print sr


错误:

  File "/usr/local/lib/python2.7/dist-packages/scipy/io/wavfile.py", line 252, in read
    fmt_chunk = _read_fmt_chunk(fid, is_big_endian)
  File "/usr/local/lib/python2.7/dist-packages/scipy/io/wavfile.py", line 94, in _read_fmt_chunk
    raise ValueError("Unknown wave file format")
  ValueError: Unknown wave file format

更新:

在@velikodniy的建议下,我尝试使用sox转换我的文件后:

sox MY_FILENAME.wav MY_FILENAME.wav

但它又抛出了另一个警告:

sox WARN wav: Premature EOF on .wav input file

现在,如果我尝试播放原始的 .wav 文件,媒体播放器会显示“不支持的格式”(之前可以播放)。

3个回答

4

WAV可能包含不同格式的音频数据,例如MP3。目前scipy.io.wavfile.read只能读取PCM和浮点格式(WAVE_FORMAT_PCM和WAVE_FORMAT_IEEE_FLOAT)。

因此,你必须使用音频编辑器(例如Audacity或sox)将音频文件转换为这些格式之一。


它仍然会抛出警告,现在文件甚至无法在媒体播放器中播放。 - user5722540
你能否使用维基百科上的WAV文件测试你的程序? - velikodniy
我刚刚测试了一下。sp.io.wavfile.read 可以很好地处理 11k16bitpcm.wav 文件。 - velikodniy
我找到了解决方案,通过将我的文件转换为.ogg格式,然后再转回.wav格式,它起作用了!!! - user5722540
我已经使用哈佛提供的音频文件进行测试,测试目标是 sp.io.wavfile.read 函数。但是它无法处理我的任何 .wav 文件。 - user5722540
显示剩余2条评论

2

我尝试了很多解决方案,但只有以下步骤成功了:

  1. 进入网站:https://audio.online-convert.com/convert-to-wav
  2. 上传你的文件;
  3. 可选设置中将位分辨率更改16位
  4. 点击开始转换并下载转换后的文件;
  5. 再次使用scipy.io.wavfile.read(...)进行打开。
"Original Answer"翻译成"最初的回答"

0

我使用代码将WAV文件转换为特定格式,问题得到了解决。

import soundfile as sf
y, s = librosa.load(pwd+'\\ans.wav', sr=48000)
sf.write('audio_test_1.wav', y, s, "PCM_24")

rate, data = read(pwd+'\\audio_test_1.wav')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接