- 加混响----不区分信噪比,只分混响的类型,分成largeroom/medium room/small room,每个房间类型下有多个噪声源
kaldi/src/featbin/wav-reverberate --shift-output=true --impulse-response='sox
noise.wav -r 16000 -t wav - |' --start-times='0' --snrs='0.0'
source.wav gen.wav
示例:
kaldi/src/featbin/wav-reverberate --shift-output=true --impulse-response='sox
RIRS_NOISES/simulated_rirs/largeroom/Room148/Room148-00034.wav
-r 16000 -t wav - |' --start-times='0' --snrs='0.0'
ts02999.wav ts02999_5.wav
ps.各个wav的路径给对;kaldi指令路径作出适当修改
- 加噪声–按照指定信噪比和指定噪声源
kaldi/src/featbin/wav-reverberate --shift-output=true
--impulse-response='sox RIRS_NOISES/simulated_rirs/smallroom/Room044/Room044-00093.wav
-r 16000 -t wav - |' --additive-signals=' sox RIRS_NOISES/pointsource_noises/noise-free-sound-0810.wav
-r 16000 -t wav - |' --start-times='3.8' --snrs='10.0'
ps. 该方法适用于noise的长度大于语音长度,否则不会自动补长noise的长度
import sys
import os
import random
#rirs_dir = sys.argv[2]
wav_dir = sys.argv[1]
save_dir = sys.argv[2]
if not os.path.exists(save_dir):
os.makedirs(save_dir)
#rirs_noise = os.listdir(rirs_dir)
snr_list = [5.0, 7.5, 10.0, 12.5]
for fi in os.listdir(wav_dir):
source_wav = os.path.join(wav_dir, fi)
print(source_wav)
snr = random.choice(snr_list)
#for noise in os.listdir(rirs_dir):
name = fi.split('.wav')[0]
save_name = name+'_white.wav'
save_wav = os.path.join(save_dir, save_name)
#rirs_wav = random.choice(rirs_noise)
#rirs_wav = os.path.join(rirs_dir, rirs_wav)
#print("rirs_wav", rirs_wav)
#os.system("/opt/kaldi/src/featbin/wav-reverberate --shift-output=true --impulse-response='sox %s -r 16000 -t wav - |' --start-times='0' --snrs='0.0' %s %s" %(rirs_wav, source_wav, save_wav))
os.system("../kaldi-master/src/featbin/wav-reverberate --shift-output=true --additive-signals='sox ../kaldi-master/simulated_rirs/white.wav -r 16000 -t wav - |' --start-times='0' --snrs='%f' %s %s" %(snr, source_wav, save_wav))
可能会遇到warning,但是不影响生成
WARNING (wav-reverberate[5.5.575~1-ea575]:Read():wave-reader.cc:260) Expected 28228 bytes in RIFF chunk, but after first data block there will be 36 + 21574 bytes (wedo not support reading multiple data chunks).
需要把音频文件进行调整
ffmpeg -i in.wav -ar 16000 -ac 1 -f wav out.wav
能量衰减
import os
import sys
import librosa
import random
import soundfile as sf
wav_dir = sys.argv[1]
save_dir = sys.argv[2]
if not os.path.exists(save_dir):
os.makedirs(save_dir)
for fi in os.listdir(wav_dir):
wav_file = os.path.join(wav_dir, fi)
wav, sr = sf.read(wav_file)
X = random.randint(5,20)
print('x', X)
alpha = 10**( -X/20)
new_wave = wav * alpha
save_path = os.path.join(save_dir, fi)
sf.write(save_path, new_wave, 16000)
print('saved',save_path)
print('all end')