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



我有一个关于librosa的load函数和scipy.io.wavfileread函数之间的区别的问题。

from scipy.io import wavfile
import librosa
fs, data = wavfile.read(name)
data, fs = librosa.load(name)

导入的语音文件是同一文件。如果运行上面的代码,则两个函数的数据值会有所不同。我想知道为什么数据的价值不同。

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

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

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

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

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

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

数据不同,因为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

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

最新更新