3

.wavファイルに5秒間でフェードイン/フェードアウト関数を作成できる関数を作成しようとしています。

このコードはMATLABフォーラムで見つけましたが、正しいアイデアはありますが、実装が少し間違っていたようです。これは、10ミリ秒のフェードイン/アウトを伴う300ミリ秒の.WAVファイル用でした。

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サンプルをスケーリングしようとすると、彼が何をしようとしていたかがわかりますが、いじくり回して変更しようとしましたが、機能しません。

誰か提案がありますか?ありがとうございました。

4

1 に答える 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)

もちろん、linspaceをシグモイドのようなものに置き換え、同じアイデアを使用してフェードアウトを行うことができます...

編集:フェードアウトを行うには、試してください

sig_faded(end-fade_samples+1:end) = sig(end-fade_samples+1:end).*fade_scale(end:-1:1);
于 2010-08-18T16:56:34.190 に答える