在MATLAB中创建淡入/淡出函数?

3
我希望您能创建一个函数,可以在五秒钟内对.wav文件进行淡入/淡出处理。
我在MATLAB论坛上找到了这段代码,但实现似乎有些问题,虽然正确的思路已经存在。它是针对300ms的.WAV文件,使用10ms的淡入/淡出效果:
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个回答

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);

我尝试使用wavread / wavrwite实现该函数,但它显示方程式不平衡。我现在没有时间再查看MATLAB,但感谢您的回复,我稍后会检查一下! - Velocity
谢谢,我已经成功让前五秒的淡入淡出效果生效了,但是我不确定如何选择剪辑的最后五秒。我以为应该是类似于fade_samples:end这样的东西,但我不确定是否正确? - Velocity
建议添加淡出效果;相关的MATLAB教程和帮助在此链接中:http://www.mathworks.com/access/helpdesk/help/techdoc/math/f1-85462.html 可供参考。 - Matt Mizumi
谢谢,太棒了。我一直在研究数组,但我不认为我能很快想出那个答案。不过我再次阅读了教程。谢谢! - Velocity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接