我正在使用scipy
方法wavefile.read()加载一个wav,它为我提供了samplerate和au
diodata
我知道这个音频数据如果立体声存储为多维数组,如
- 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)
这产生了一个Mono wav文件,但声音很脏并且整个点击等
我究竟做错了什么?
首先,au
diodata的数据类型是什么?我假设它是一些固定宽度的整数格式,因此你会溢出.如果在处理之前将其转换为浮点格式,它将正常工作:
- audiodata = audiodata.astype(float)
其次,不要按元素编写Python代码元素;矢量化它:
- d = (audiodata[:,0] + audiodata[:,1]) / 2
甚至更好
- d = audiodata.sum(axis=1) / 2
这将比您编写的逐个元素循环快得多.