Python中立体声到单声道wav

2024-04-28 07:09:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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文件,但是声音是脏的,一直在点击等

我做错什么了?


Tags: 数据方法rightreaddefscipy数组音频
3条回答

首先,audiodata的数据类型是什么?我假设它是某种固定宽度的整数格式,因此会溢出。如果在处理之前将其转换为浮点格式,它将工作正常:

audiodata = audiodata.astype(float)

其次,不要逐项编写Python代码;将其矢量化:

d = (audiodata[:,0] + audiodata[:,1]) / 2

或者更好

d = audiodata.sum(axis=1) / 2

这将比您编写的逐元素循环快得多。

这应该管用。从立体声数据中获取第一个频道:

audiodata = [s[0] for s in audiodata]

结果,我只需要改变一下

(右+左)/2

(右/2)+(左/2)

相关问题 更多 >