我的问题
我试图建立一个机器学习(机器学习)模型,它接受音频(.wav),并从它(多标签分类)中预测情感。
我试图读取文件中的采样率和信号,但是当从scipy.io.wavfile
调用scipy.io.wavfile
时,我得到了ValueError: Incomplete wav chunk.
我试过的
scipy.read()
切换到librosa.read()
。
它们都输出信号和采样率,但由于某种原因,librosa
花费的时间比scipy
长得多,对我的任务来说是不切实际的。sr, y = scipi.io.wavfile.read(open(filename, 'r'))
,如建议的这里,但没有结果。最小的,可复制的例子
假设filenames
是我所有音频文件的子集,其中包含好的和坏的,其中fn_good
是要处理的实际文件,fn_bad
是引发错误的实际文件。
def extract_features(filenames):
for fn in filenames:
sr, y = scipy.io.wavfile.read(fn)
print('Signal is: ', y)
print('Sample rate is: ', sr)
更多信息
使用VLC,scipy.io.wavfile
似乎支持这些编解码器,但是在任何一种情况下,这两个文件都有相同的编解码器,所以它们没有相同的效果是很奇怪的.良好文件的编解码器:
坏文件的编解码器:
发布于 2019-06-19 14:39:29
我不知道为什么scipy.io.wavfile
不能读取该文件--其中可能有一个无效的块,其他读者只是忽略它。请注意,即使我使用scipy.io.wavfile
读取“好”文件,也会生成一个警告(WavFileWarning: Chunk (non-data) not understood, skipping it.
):
In [22]: rate, data = wavfile.read('fearful_song_strong_dogs_act10_f_1.wav')
/Users/warren/mc37/lib/python3.7/site-packages/scipy/io/wavfile.py:273: WavFileWarning: Chunk (non-data) not understood, skipping it.
WavFileWarning)
我可以使用'fearful_song_strong_dogs_act06_f_0.wav'
( github:wavio
上的源代码)阅读wavio
,这是我创建的一个包,它用理解NumPy数组的函数包装了Python的标准wave
库:
In [13]: import wavio
In [14]: wav = wavio.read('fearful_song_strong_dogs_act06_f_0.wav')
In [15]: wav
Out[15]: Wav(data.shape=(198598, 1), data.dtype=int16, rate=48000, sampwidth=2)
In [16]: plot(np.arange(wav.data.shape[0])/wav.rate, wav.data[:,0])
Out[16]: [<matplotlib.lines.Line2D at 0x117cd9390>]
发布于 2020-04-11 04:32:08
在代码的以下条件下,我通过将文件"4“更改为"1"来解决这个问题:
if not chunk_id:
raise ValueError("Unexpected end of file.")
elif len(chunk_id) < 1:
raise ValueError("Incomplete wav chunk.")
但这仅仅是凭直觉和好运,现在我想知道为什么会起作用,可能的原因是什么?
https://stackoverflow.com/questions/56667042
复制相似问题