[英]Stereo to Mono wav in Python
我正在使用 scipy 方法 wavefile.read() 加载一个 wav,它给我采样率和音频数据
我知道这个音频数据如果立体声存储为多维数组,例如
audiodata[[left right]
[left right]
...
[left right]]
然后我使用这种方法通过采用 (right+left)/2 创建一个新的 mono 音频数据数组
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 文件,但是声音很脏并且一直在点击等
我究竟做错了什么?
首先, audiodata
的数据类型是audiodata
? 我假设它是某种固定宽度的整数格式,因此您会溢出。 如果在处理之前将其转换为浮点格式,它将正常工作:
audiodata = audiodata.astype(float)
其次,不要逐个元素编写 Python 代码; 矢量化它:
d = (audiodata[:,0] + audiodata[:,1]) / 2
甚至更好
d = audiodata.sum(axis=1) / 2
这将比您编写的逐个元素循环快得多。
事实证明,我必须改变的是
(右+左)/2
到
(右/2) + (左/2)
应用平均值后,您必须将数据保存为 int16
wavfile.write(newfilename, sr, np.int16(newaudiodata))
这应该有效。 您从立体声数据中获取第一个通道:
audiodata = [s[0] for s in audiodata]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.