kaldi加噪声or混响or能量衰减

博客介绍了音频处理相关内容,包括加混响,不区分信噪比,按房间类型(largeroom/medium room/small room)划分且各类型下有多个噪声源;加噪声需按指定信噪比和噪声源,适用于噪声长度大于语音长度的情况,还提到可能遇警告但不影响生成,最后提及能量衰减及音频文件调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 加混响----不区分信噪比,只分混响的类型,分成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指令路径作出适当修改

  1. 加噪声–按照指定信噪比和指定噪声源
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')
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值