我正在用方法wave.readframes()
和librosa.load()
加载wave文件
import librosa
import wave
sample_wave = './data/mywave.wav'
#open file and stft by librosa
a, sr = librosa.load(sample_wave,sr=44100)
print(len(a))
print(a)
#open file and by wave
wav=wave.open(sample_wave)
data=wav.readframes(wav.getnframes())
b = np.frombuffer(data,dtype=np.int16)
print(len(b))
print(b)
结果是这样的
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
的调用更改为原因是
librosa
使用此buff_to_float()函数缩放数据要使
wave
帧具有与librosa
中相同的值,您可以自己缩放数据:相关问题 更多 >
编程相关推荐