librosa 加载与 scipy.io.wavfile 读取之间的差异
Difference between load of librosa and read of scipy.io.wavfile
我有一个关于librosa的load
函数和scipy.io.wavfile
的read
函数的区别的问题。
from scipy.io import wavfile
import librosa
fs, data = wavfile.read(name)
data, fs = librosa.load(name)
导入的语音文件是同一个文件。如果你 运行 上面的代码,数据的值从两个函数中出来是不同的。我想知道为什么数据的值不同。
来自 librosa.core.load
的文档字符串:
Load an audio file as a floating point time series.
Audio will be automatically resampled to the given rate (default sr=22050).
To preserve the native sampling rate of the file, use sr=None.
scipy.io.wavfile.read
不会自动对数据重新采样,如果样本在文件中是整数,则不会转换为浮点数。
librosa.core.load
支持 24 位音频文件和 96kHz 采样率。因此,在许多情况下,转换为浮点数和默认重采样可能比 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的load
函数和scipy.io.wavfile
的read
函数的区别的问题。
from scipy.io import wavfile
import librosa
fs, data = wavfile.read(name)
data, fs = librosa.load(name)
导入的语音文件是同一个文件。如果你 运行 上面的代码,数据的值从两个函数中出来是不同的。我想知道为什么数据的值不同。
来自 librosa.core.load
的文档字符串:
Load an audio file as a floating point time series.
Audio will be automatically resampled to the given rate (default sr=22050).
To preserve the native sampling rate of the file, use sr=None.
scipy.io.wavfile.read
不会自动对数据重新采样,如果样本在文件中是整数,则不会转换为浮点数。
librosa.core.load
支持 24 位音频文件和 96kHz 采样率。因此,在许多情况下,转换为浮点数和默认重采样可能比 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