Python wave.readframes()和librosa.load()的差异
我正在用方法Python wave.readframes()和librosa.load()的差异,python,scipy,wave,librosa,Python,Scipy,Wave,Librosa,我正在用方法wave.readframes()和librosa.load() 结果是这样的 490255 #(length of by the librosa data) [-3.0517578e-05 3.9672852e-04 -3.0517578e-05 ... 3.0517578e-05 3.0517578e-05 0.0000000e+00] #(the data by librosa) 490255 #(length of by the wave data) [-1 13
wave.readframes()
和librosa.load()
结果是这样的
490255 #(length of by the librosa data)
[-3.0517578e-05 3.9672852e-04 -3.0517578e-05 ... 3.0517578e-05
3.0517578e-05 0.0000000e+00] #(the data by librosa)
490255 #(length of by the wave data)
[-1 13 -1 ... 1 1 0] #(the data by wave)
两者的OK长度与490255相同
然而,数据是完全不同的(我猜wave的数据几乎是librosa的三分之一)
为什么会出现这种差异?默认情况下,将样本转换为浮点wave.readframes
将数据保留为文件中的原始格式,您的代码将值解释为16位整数,这显然是该文件的正确格式
尝试将librosa.load的调用更改为
a, sr = librosa.load(sample_wave,sr=44100, dtype=np.int16)
默认情况下,将采样转换为浮点wave.readframes
将数据保留为文件中的原始格式,您的代码将值解释为16位整数,这显然是该文件的正确格式
尝试将librosa.load的调用更改为
a, sr = librosa.load(sample_wave,sr=44100, dtype=np.int16)
原因是librosa
使用此函数缩放数据
要使您的wave
帧具有与librosa
中相同的值,您可以自己缩放数据:
import wave
# Load audio
wav = wave.open(sample_wave, 'rb')
frames = wav.readframes(wav.getnframes())
data = np.frombuffer(frames, dtype=np.int16).astype(np.float32)
# Scale the audio
scale = 1./float(1 << ((8 * wav.getsampwidth()) - 1)) # from librosa
data *= scale
导入波
#加载音频
wav=波形打开(采样波形'rb')
frames=wav.readframes(wav.getnframes())
data=np.frombuffer(frames,dtype=np.int16).astype(np.float32)
#缩放音频
scale=1./float(1原因是librosa
使用此函数缩放数据
要使您的wave
帧具有与librosa
中相同的值,您可以自己缩放数据:
import wave
# Load audio
wav = wave.open(sample_wave, 'rb')
frames = wav.readframes(wav.getnframes())
data = np.frombuffer(frames, dtype=np.int16).astype(np.float32)
# Scale the audio
scale = 1./float(1 << ((8 * wav.getsampwidth()) - 1)) # from librosa
data *= scale
导入波
#加载音频
wav=波形打开(采样波形'rb')
frames=wav.readframes(wav.getnframes())
data=np.frombuffer(frames,dtype=np.int16).astype(np.float32)
#缩放音频
比例=1/浮动(1