librosa的负载与scipy.io.wavfile的读取之间的差异

이응재*_*이응재 4 python scipy librosa

load对librosa的read功能和的功能之间的区别有疑问scipy.io.wavfile

from scipy.io import wavfile
import librosa

fs, data = wavfile.read(name)
data, fs = librosa.load(name)
Run Code Online (Sandbox Code Playgroud)

导入的语音文件是同一文件。如果运行上面的代码,则数据的值从两个函数中得出的结果是不同的。我想知道为什么数据值不同。

Vla*_*hin 7

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
Run Code Online (Sandbox Code Playgroud)


War*_*ser 5

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

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

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

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

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

  • 隐式重采样只是imliba的几个缺点之一。 (2认同)
  • 它们在加载文件的速度方面是否不同? (2认同)

小智 5

还值得一提的是,librosa.load()标准化数据(以便所有数据点都在 1 和 -1 之间),而wavfile.read()没有。