用Python混合两个音频文件
我有两个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')