在MATLAB中创建淡入/淡出功能?

时间:2010-08-18 10:44:14

标签: matlab audio wav fadein fadeout

我希望创建一个可以在五秒钟内在.wav文件上创建淡入/淡出功能的函数。

我在MATLAB论坛上发现了这个代码,但似乎实现有些错误,尽管正确的想法就在那里。它适用于300毫秒的.WAV文件,淡入/淡出10毫秒:

tenmssamples = length(soundfile)*10/300;
fade1 = linspace(0,1,tenmssamples);
fadedsound = soundfile .* ...
  [fade1, ones(1,length(soundfile)-2*tenmssamples), fliplr(fade1)];


tenmssamples = length(soundfile)*10/300;
fade2 = sin(linspace(0,2*pi/4,tenmssamples));
fadedsound2 = soundfile .* ...
  [fade2, ones(1,length(soundfile)-2*tenmssamples), fliplr(fade2)];

我可以通过尝试使用linspace来扩展通过增加函数读取的波形的前10个样本来查看他想要做的事情,但我尝试修改并修改它但是我无法使其工作。

有人有什么建议吗?谢谢。

1 个答案:

答案 0 :(得分:5)

我不确定你遇到的问题是什么,但我会做这样的事情:

Fs = 1000; % sampling rate of signal
FADE_LEN = 5; % 5 second fade

sig = randn(15.*Fs,1); % generate 15 s signal

fade_samples = round(FADE_LEN.*Fs); % figure out how many samples fade is over
fade_scale = linspace(0,1,fade_samples)'; % create fade

sig_faded = sig;
sig_faded(1:fade_samples) = sig(1:fade_samples).*fade_scale; % apply fade

subplot(211)
plot(sig)
subplot(212)
plot(sig_faded)

当然你可以用sigmoid之类的东西替换linspace,并用同样的想法做淡出......

编辑:要淡出,请尝试

sig_faded(end-fade_samples+1:end) = sig(end-fade_samples+1:end).*fade_scale(end:-1:1);