使用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
这将大大快于您编写的元素回圈。
本文讨论了在将立体声音频转换为单声道时遇到的问题。错误的方法是通过平均左右声道的样本值来创建新的单声道数组,导致声音质量下降。解决方法在于将原始数据转换为浮点格式,并使用向量化操作(如numpy的切片或sum函数)来平均声道,从而提高效率并避免声音失真。
294

被折叠的 条评论
为什么被折叠?



