用Python混合两个音频文件

35 投票
6 回答
43496 浏览
提问于 2025-04-16 06:12

我有两个wav格式的音频文件,想把它们混合成一个wav文件。它们的样本格式都是一样的……

我在网上搜索了很久。

我希望能用Python里的wave模块来实现这个功能。

这该怎么做呢?

6 个回答

10

LIBROSA 解决方案

import librosa
import IPython as ip

y1, sample_rate1 = librosa.load(audio1, mono=True)
y2, sample_rate2 = librosa.load(audio2, mono=True)

# MERGE
librosa.display.waveplot((y1+y2)/2, sr=int((sample_rate1+sample_rate2)/2))

# REPRODUCE
ip.display.Audio((y1+y2)/2, rate=int((sample_rate1+sample_rate2)/2))
10

这是一个用Python写的解决方案,需要用到numpy和audiolab这两个库,但它既简单又快速:

import numpy as np
from scikits.audiolab import wavread

data1, fs1, enc1 = wavread("file1.wav")
data2, fs2, enc2 = wavread("file2.wav")

assert fs1 == fs2
assert enc1 == enc2
result = 0.5 * data1 + 0.5 * data2

如果采样率(fs*)或者编码(enc*)不一样,你可能需要进行一些音频处理(这里的检查条件有点严格,因为wavread在某些情况下可以自动处理)。

41

你可以使用pydub这个库(这是我在Python标准库的wave模块基础上写的一个简单封装)来很简单地实现这个功能:

from pydub import AudioSegment

sound1 = AudioSegment.from_file("/path/to/my_sound.wav")
sound2 = AudioSegment.from_file("/path/to/another_sound.wav")

combined = sound1.overlay(sound2)

combined.export("/path/to/combined.wav", format='wav')

撰写回答