使用wavefile.read()载入一个wav,它提供了samplerate和audiodata
这个音讯资料如果是立体声则储存为多维阵列,比如
audiodata[[left right]
[left right]
...
[left right]]
错误方法
用这个方法建立一个新的单声道音讯资料阵列,方法是(右+左)/2
def stereoToMono(audiodata)
newaudiodata = []
for i in range(len(audiodata)):
d = (audiodata[i][0] + audiodata[i][1])/2
newaudiodata.append(d)
return np.array(newaudiodata, dtype='int16')
然后用
wavfile.write(newfilename, sr, newaudiodata)
这产生了一个单声道的wav档案,但是声音很脏,而且一直在点选等。做错什么了?
解决办法
首先,什么是audiodata的资料型别?假设它是某种固定宽度的整数格式,因此会溢位。
如果在处理前将其转换为浮点格式,则可以正常工作:
audiodata = audiodata.astype(float)
第二,不要一个元素一个元素地编写您的python程式码;向量化它:
d = (audiodata[:,0] + audiodata[:,1]) / 2
或者更好
d = audiodata.sum(axis=1) / 2
这将大大快于您编写的元素回圈。