Создание функции постепенного появления / исчезновения в MATLAB? - PullRequest
3 голосов
/ 18 августа 2010

Я хочу создать функцию, которая могла бы создавать функцию постепенного появления / исчезновения в файле WAV в течение пяти секунд.

Я нашел этот код на форумах MATLAB, но онкажется, что реализация была немного неправильной, хотя правильная идея есть.Это было для .WAV файлов 300 мс с 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)];

Я могу видеть, что он пытался сделать, пытаясь масштабировать первые 10 выборок формы волны, считываемой возрастающимс использованием linspace, но я попытался изменить и изменить его, но не могу заставить его работать.

У кого-нибудь есть предложения, пожалуйста?Спасибо.

1 Ответ

5 голосов
/ 18 августа 2010

Я не уверен, в чем проблема, с которой вы сталкиваетесь, но я бы сделал что-то вроде этого:

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)

конечно, вы можете заменить линзу чем-то другим, например сигмовидной, и использовать ту же идею для затухания ...

РЕДАКТИРОВАТЬ: чтобы сделать затухание, попробуйте

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