2010-08-18 17 views
3

Je cherche à créer une fonction qui pourrait créer une fonction de fondu entrant/sortant sur un fichier .wav sur une période de cinq secondes.Création d'une fonction de fondu entrant/sortant dans MATLAB?

J'ai trouvé ce code sur les forums MATLAB mais il semble que la mise en œuvre était légèrement fausse, bien que la bonne idée soit là. Il était pour les fichiers .wav de 300ms avec un 10ms fade-in/out:

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

je peux voir ce qu'il essayait de faire en essayant d'escalader les 10 premiers échantillons de la forme d'onde lue par une fonction croissante à l'aide linspace, mais j'ai essayé de le bricoler et de le modifier mais je n'arrive pas à le faire fonctionner.

Quelqu'un a-t-il des suggestions s'il vous plaît? Je vous remercie.

Répondre

5

Je ne suis pas sûr de ce que le problème que vous rencontrez est, mais je voudrais faire quelque chose comme ceci:

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) 

Bien sûr, vous pouvez remplacer le linspace par quelque chose d'autre comme un sigmoïde, et utiliser le même idée de faire un fondu ...

EDIT: pour faire le fondu, essayez

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

J'ai essayé la mise en œuvre de la fonction à l'aide wavread/wavrwite mais il dit l'équation était déséquilibrée. Je n'ai pas le temps d'avoir un autre regard sur MATLAB en ce moment mais j'apprécie votre réponse et je le vérifierai plus tard! – Velocity

+0

Merci, j'ai réussi à faire fonctionner le fondu sur les cinq premières secondes, mais je ne suis pas sûr de savoir comment sélectionner les 5 dernières secondes du clip. Je supposais que ce serait quelque chose comme fade_samples: fin mais je ne suis pas sûr que ce soit correct? – Velocity

+0

suggestion pour le fondu sortant ajouté; Le didacticiel MATLAB pertinent et l'aide sont disponibles ici: http://www.mathworks.com/access/helpdesk/help/techdoc/math/f1-85462.html pour référence. –