查看单个帖子
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 在MATLAB中创建淡入/淡出功能?

我正在寻找一个可以在五秒钟内在.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个样本来了解他的尝试,但是我尝试进行修补和修改,但无法使其正常工作。

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



回答:

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

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) 当然,您可以用诸如S形之类的东西代替linspace,并使用相同的想法进行淡出...

编辑:做淡出,尝试

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

更多&回答...
poster 当前离线   回复时引用此帖