librosa parameterror:音频缓冲区不是处处有限的(剪切wav文件)

2024-06-16 15:03:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在培训一个名为DeWave(https://github.com/chaodengusc/DeWave)的Python音频源分离模型包。它是在单通道.wav文件上训练的。在训练了模型之后,我对一个.wav示例(在单通道音频测试文件中分离两个扬声器源)进行了推断。这很好,除了如果我剪切.wav文件,在这种情况下,librosa会出错,指出音频缓冲区不是处处有限的。在

我尝试过对不同的音频文件进行推断,只有当我使用外部软件剪切.wav文件时才会出现错误(我尝试过用sox和Zamzar进行剪切)。我成功地推断过的音频文件的长度都是不同的,并且不是给定长度的倍数,所以我不认为这是长度问题。我想知道文件剪切是否会擦除缓冲区,但我一般不熟悉缓冲区,因此,如果有任何关于如何补救的见解,我将不胜感激。在

使用librosa编写的主要代码是来自https://github.com/chaodengusc/DeWave/blob/master/DeWave/infer.py的行

## restore the original audio
len1 = len(out_audio1) // 3
len2 = len(out_audio2) // 3
source1 = out_audio1[len1:2*len1]
source2 = out_audio2[len2:2*len2]
librosa.output.write_wav(input_file[0:-4]+"_source1.wav", source1, SAMPLING_RATE)
librosa.output.write_wav(input_file[0:-4]+"_source2.wav", source2, SAMPLING_RATE)
return [(source1, SAMPLING_RATE), (source2, SAMPLING_RATE)]

预期的输出将是两个长度相同的独立的.wav文件,每个文件中有一个扬声器,而另一个扬声器正在讲话时则静音。但是,我得到一个错误:

^{pr2}$

Tags: 文件httpsgithubrateout音频缓冲区wav
1条回答
网友
1楼 · 发布于 2024-06-16 15:03:24

我知道我迟到了三个月,但我的回答可能对其他人有帮助。在我的例子中,原因是音频数据中有一些nan值。这就是为什么librosa抛出Audio buffer is not finite everywhere。在

我创建了这个简单的代码来解释我的意思:

>>> import librosa
>>> import numpy as np

>>> f = 500 # frequence in Hz
>>> sr = 16000 # sample rate in bit/sec
>>> t = 2  #time in seconds

>>> samples = np.linspace(0, t, int(sr*t), endpoint=False)
>>> wav = np.sin(2 * np.pi * f * samples)
>>> librosa.output.write_wav('beeb.wav', wav, sr)
# works fine

前面的代码片段将创建两秒钟的beeb声音。这是用一个频率为500hz,采样率为16k的正弦波来完成的。前面的代码应该可以正常工作,没有错误。在

现在,我将在wav中追加一个nan值,以重新生成相同的错误:

^{pr2}$

如我们所见,librosa抛出了与之前相同的错误。在数据中产生nan值的最常见原因是将音频数据类型从np.float更改为np.int。所以,也许这就是原因!!在

相关问题 更多 >