我对librosa的load
函数与read
的{{1}}函数之间的区别有疑问。
scipy.io.wavfile
导入的语音文件是同一个文件。如果运行上面的代码,数据的值将以不同的方式来自两个函数。我想知道为什么数据的价值不同。
答案 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
慢得多。