librosa的加载和scipy.io.wavfile的读取之间的区别

时间:2018-04-27 12:26:02

标签: python scipy librosa

我对librosa的load函数与read的{​​{1}}函数之间的区别有疑问。

scipy.io.wavfile

导入的语音文件是同一个文件。如果运行上面的代码,数据的值将以不同的方式来自两个函数。我想知道为什么数据的价值不同。

4 个答案:

答案 0 :(得分:3)

来自librosa.core.load的文档字符串:

  

将音频文件加载为浮点时​​间序列。

     

音频将自动重新采样到给定的速率(默认sr = 22050)。

     

要保留文件的本机采样率,请使用sr = None。

scipy.io.wavfile.read不会自动重新采样数据,如果文件中的整数是样本,则样本不会转换为浮点数。

答案 1 :(得分:1)

还值得一提的是librosa.load()规范化了数据(因此所有数据点都在1到0之间),而wavfile.read()则没有。

答案 2 :(得分:1)

数据不同,因为 scipy 没有对输入信号进行归一化。

以下是一段显示如何更改 scipy 输出以匹配 librosa 的代码段:

nbits = 16

l_wave, rate = librosa.core.load(path, sr=None)
rate, s_wave = scipy.io.wavfile.read(path)

s_wave /= 2 ** (nbits - 1)

all(s_wave == l_wave)
# True

答案 3 :(得分:0)

librosa.core.load支持24位音频文件和96kHz采样率。因此,在转换为浮点和默认重采样的情况下,它在许多情况下可能比scipy.io.wavfile.read慢得多。