【语音增强】使用RIR_Generator从近场音频产生远场音频|混响

这里介绍一种使用近场的干净的音频生成(模拟)远场音频的方法。GitHub项目地址:RIR_Generator。

只介绍方法,要了解原理的请参考项目里的rir_generator.pdf文档。

1.首先把这个项目git clone到本地。

2.将cpp文件编译成matlab可执行的文件

(参考这里)

方法是,在终端打开matlab,在matlab命令行输入以下代码并回车

mex rir_generator.cpp

得到rir_generator.mexa64文件,在matlab中可以直接调用这个文件。

3.从近场音频产生远场音频

example_1.m为例产生远场音频。

example_1.m的代码为

c = 340;                    % Sound velocity (m/s)
fs = 16000;                 % Sample frequency (samples/s)
r = [2 1.5 2];              % Receiver position [x y z] (m)
s = [2 3.5 2];              % Source position [x y z] (m)
L = [5 4 6];                % Room dimensions [x y z] (m)
beta = 0.4;                 % Reverberation time (s)
n = 4096;                   % Number of samples

h = rir_generator(c, fs, r, s, L, beta, n);

参数的解读请参考rir_generator.pdf文档的p11

修改一下代码,将干净的近场音频close_clean.wav生成远场音频。

c = 340;                    % Sound velocity (m/s)
fs = 16000;                 % Sample frequency (samples/s)
r = [2 1.5 2];              % Receiver position [x y z] (m)
s = [2 3.5 2];              % Source position [x y z] (m)
L = [5 4 6];                % Room dimensions [x y z] (m)
beta = 0.4;                 % Reverberation time (s)
n = 4096;                   % Number of samples

h = rir_generator(c, fs, r, s, L, beta, n);			% 计算转换矩阵
close_clean_wav = audioread('close_clean.wav');		% 读取近场干净音频
far_field_wav = fftfilt(h, close_clean_wav); 		% 产生远场音频
audiowrite('far_field.wav', far_field_wav, 16000);	% 保存为.wav文件

4.效果

近场音频:close_clean.wav
【语音增强】使用RIR_Generator从近场音频产生远场音频|混响_第1张图片

产生的远场音频:far_field.wav
【语音增强】使用RIR_Generator从近场音频产生远场音频|混响_第2张图片
这种方法可以用于语音增强。

你可能感兴趣的:(语音增强,添加混响,远场,far-field,audio,语音)