繁体   English   中英

立体声到 Mono wav in Python

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM