Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python wave.readframes()和librosa.load()的差异_Python_Scipy_Wave_Librosa - Fatal编程技术网

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