为什么scipy和librosa在读取wav文件方面有所不同?

时间:2018-07-24 02:51:19

标签: python scipy wav wave librosa

所以我试图从wave文件中获取样本,我注意到根据我使用scipy还是librosa,它的值是不同的。

sampleFloats, fs = librosa.load('hi.wav', sr=48000)
print('{0:.15f}'.format(sampleFloats[len(sampleFloats)-1]))

from scipy.io.wavfile import read as wavread
# from python_speech_features import mfcc

[samplerate, x] = wavread('hi.wav') # x is a numpy array of integer, representing the samples 

# scale to -1.0 -- 1.0
if x.dtype == 'int16':
    nb_bits = 16 # -> 16-bit wav files
elif x.dtype == 'int32':
    nb_bits = 32 # -> 32-bit wav files
max_nb_bit = float(2 ** (nb_bits - 1))
samples = x / (max_nb_bit + 1.0) # samples is a numpy array of float representing the samples 

print(samples[len(samples)-1])

打印语句为:

0.001251220703125
0.001274064182641886

文件的采样率为48000。

为什么它们会有所不同? librosa使用不同的归一化吗?

1 个答案:

答案 0 :(得分:0)

这是类型不匹配。 通常不仅打印值,而且打印其类型通常很有用。在这种情况下,由于完成标准化的方式,samples值的类型为float64,而librosa返回float32

This answer可以帮助弄清楚如何规范化(同样,如上所述,它的确是max_nb_bit - 1,而不是+