在Matlab中:
[s, fs] = wavread(file);
由于s中每个元素的值介于-1和1之间,因此我们使用其wavread函数导入scikits.audiolab。
from scikits.audiolab import wavread
s, fs, enc = wavread(filename)
但是当我重写相同的输入wav文件时,Matlab和Python中s的值完全不同。我怎么能得到与MATLAB相同的s输出?
P.S。 wav文件是以44100Hz采样的简单16位单声道文件。
答案 0 :(得分:4)
Matlab wavread()
函数将标准化数据作为默认值返回,即它将所有数据缩放到范围-1到+1。如果您的音频文件是16位格式,则原始数据值将在-32768到+32767范围内,该范围应与scikits.audiolab.wavread()
返回的范围相匹配。
要将此数据标准化到-1到+1范围内,您需要做的就是将数据数组除以具有最大幅度的值(在这种情况下使用numpy
模块):
from scikits.audiolab import wavread
import numpy
s, fs, enc = wavread(filename) # s in range -32768 to +32767
s = numpy.array(s)
s = s / max(abs(s)) # s in range -1 to +1
请注意,您也可以使用带有Matlab函数的'native'
选项返回非规范化数据值,如horchler在其评论中所建议的那样。
[s, fs] = wavread(file, 'native');