我正在用scipy方法waveile.read()加载一个wav,它给我取样器和音频数据
我知道这个音频数据如果立体声存储为多维数组,比如
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
的数据类型是什么?我假设它是某种固定宽度的整数格式,因此会溢出。如果在处理之前将其转换为浮点格式,它将工作正常:其次,不要逐项编写Python代码;将其矢量化:
或者更好
这将比您编写的逐元素循环快得多。
这应该管用。从立体声数据中获取第一个频道:
结果,我只需要改变一下
(右+左)/2
到
(右/2)+(左/2)
相关问题 更多 >
编程相关推荐