回荡干净的声音

Reverberate clean sound

我有一个干净的声音样本作为 wav 文件。我想为该声音添加混响。我看过 freeverbreverberation 应用程序,但不确定我是否可以使用它来将输出保存到文件。

以前有人做过吗?

谢谢,

您需要定义一个合适的脉冲响应,并将原始声音与其卷积。脉冲响应中的每个尖峰代表原始声音的反射,其特征在于 delayamplitude。您应该定义大量尖峰,以便将它们共同视为混响,而不是单独的回声。

通常使用指数模型来表示幅度随延迟的衰减(参见示例here)。您应该为参数定义 random 值,以使混响听起来逼真。下面给出一个简单的模型。

%// Data:
filename = 'file.wav'; %// name of input file. Mono or stereo.
delay_dispersion = .2; %// this defines the amount of reverberation
max_delay = delay_dispersion*4; %// this should be several times the delay dispersion
num_delays = 50; %// number of echoes. Should be large for realistic reverberation

%// Processing:
[x, fs] = audioread(filename); %// read file
delays = round(rand(1,50)*max_delay*fs);
amplitudes = exp(-delays/delay_dispersion/fs); %// exponential profile
amplitudes = .7*amplitudes+.3*rand(size(amplitudes)); %// add some randomness in amplitudes
delays = [1 delays]; %// add clean sound...
amplitudes = [1 amplitudes]; %// ...with unit amplitude
h = zeros(1,ceil(max_delay*fs));
h(delays) = amplitudes;
stem(delays, amplitudes) %// plot impulse response
y = conv2(x,h(:)); %// use conv2 so that it works for mono or stereo x
y = y/max(abs(y(:)));
sound(x(1:min(2*fs,end),:), fs) %// play two seconds of dry sound
pause(2)
sound(y(1:min(2*fs,end),:), fs) %// play two seconds of reverberated sound

可能的改进包括对延迟副本应用低通滤波器,或定义集群中的延迟以模拟来自组的反射物理关闭对象。