wav音频文件要求:
单通道、S16_LE、采样率一致。
import scipy.io.wavfile as wav
import numpy as np
MAX = 2**15 - 1
MIN = -2**15
def mix(sr, ns, sigma=1.0):
tmp = 0
f = 1.0
mix_audio = np.zeros((len(sr)), dtype=np.int16)
for i, (s, n) in enumerate(zip(sr, ns)):
tmp = s + n * sigma
tmp *= f
if tmp > MAX:
f = MAX / tmp
tmp = MAX
elif tmp < MIN:
f = MIN / tmp
tmp = MIN
if f < 1:
f += (1 - f) / 32.0
mix_audio[i] = tmp
return mix_audio
ns_fs, ns_audio = wav.read("pink_noise.wav")
sr_fs, sr_audio = wav.read("A11_100.wav")
print("ns_fs:", ns_fs)
print("sr_fs:", sr_fs)
ns_len = len(ns_audio)
sr_len = len(sr_audio)
print("ns_len:", ns_len)
print("sr_len:", sr_len)
ns_pad_audio = np.zeros((sr_len), dtype=np.int16)
ns_pad_audio[:sr_len] = ns_audio[:sr_len]
print("ns_audio:", ns_audio.shape)
print("sr_audio:", sr_audio.shape)
print("ns_pad_audio:", ns_pad_audio.shape)
mix_audio = mix(sr_audio, ns_audio, 0.1)
print("mix_audio", mix_audio)
wav.write("mix.wav", sr_fs, mix_audio)