在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输出?
ps。 wav文件是简单的16位单声道通道文件,采样率为44100Hz。
最佳答案
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');