%prog 20230602 fade-in fade-out clearvars; clear all; close all; clc; [x,Fs] = audioread('violin.wav'); %leemos el archivo de audio y extramos sus muestras %al arreglo x y la frecuencia de muestreo en Hz a la variable Fs N = length(x); %largo del audio en cantidad de muestras (cantidad de elementos del arreglo) t = (0:N-1)/Fs; %otra forma de escribir el vector de tiempo, dividimos todo el arreglo por Fs %hacemos un arreglo de N-1 muestras porque partimos contando desde 0, por lo que el 0 cuenta como %un elemento del arreglo. %graficamos el audio sin realizar fade figure(1) plot(t,x) title('violin.wav') axis([0 t(end) 1.1*min(x) 1.1*max(x)]) xlabel('tiempo (s)') ylabel('amplitud') grid on; box on; %generamos el arreglo que realizará el fade fade = ones(N,1); t_in = 3; %tiempo de final del fade in t_out = 7; %tiempo de inicio del fade out N_in = t_in*Fs; %muestra final de fade in N_out = t_out*Fs; %muestra de inicio de fade out %calculamos las pendientes de fade in y fadeout usando la formula m = (y2-y1)/(x2-x1) m_in = (1 - 0) / (N_in - 1); %pendiente de fade in m_out = (0 - 1) / (N - N_out); %pendiente de fade out %aplicamos pendiente de fade in a la primera seccion del arreglo fade for n=1:N_in fade(n) = m_in*n; endfor %aplicamos pendiente de fade out a la ultima seccion del arreglo fade for n=N_out:N fade(n) = m_out*(n-N); %para que fade = 1 cuando n = N_out, debemos restarle N (la cantidad %total de muestras) y así a medida que la variable n %vaya aumentando, el valor final del fade out vaya disminuyendo hasta %llegar a 0 cuando n = N, ya que fade = m_out * (N-N) -- > fade = 0 end %multiplicamos el arreglo fade por el arreglo x que contiene el audio usando el operador % .* para multiplicar elemento a elemento (1er elemento * 1er elemento, 2do elemento * 2do elemento % y así ...) y = x.*fade; %graficamos el audio con fade aplicado y el arreglo fade figure(2) plot(t,y,'b',t,fade,'r') title('violin.wav con fade in - fade out aplicado') axis([0 t(end) 1.1*min(x) 1.1*max(x)]) xlabel('tiempo (s)') ylabel('amplitud') legend('violin.wav modificado','fade') grid on; box on; %guardamos el arreglo en un archivo %sound(y,Fs) audiowrite('violin_fade.wav',y,Fs)