我正在使用scipy方法wavefile.read()加载wav,它给出了采样率和音频数据。
我知道该音频数据if stereo被存储为多维数组,例如
audiodata[[left right]
[left right]
...
[left right]]然后,我将使用此方法通过(right+left)/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文件,但声音是脏的,并有点击等贯穿始终
我做错了什么?
发布于 2015-05-23 01:49:21
首先,audiodata的数据类型是什么?我假设它是某种固定宽度的整数格式,因此会出现溢出。如果在处理前将其转换为浮点格式,它将工作得很好:
audiodata = audiodata.astype(float)其次,不要一个元素一个元素地编写Python代码;将其矢量化:
d = (audiodata[:,0] + audiodata[:,1]) / 2甚至更好
d = audiodata.sum(axis=1) / 2这将比您编写的逐元素循环快得多。
发布于 2015-05-23 01:02:51
原来,我所要改变的就是
(right+left)/2
至
(右/2)+(左/2)
发布于 2020-01-04 20:54:13
这应该是可行的。从立体声数据中获取第一个通道:
audiodata = [s[0] for s in audiodata]https://stackoverflow.com/questions/30401042
复制相似问题