diff --git a/docs/SARaudio.m b/docs/SARaudio.m index 62875ece4f99d35fcbd92e163e307b724df53ded..fa6af45b537bbdfcbed3921ddea17dce8f302463 100644 --- a/docs/SARaudio.m +++ b/docs/SARaudio.m @@ -1,5 +1,6 @@ -clear all; +cclear all; close all; +%{ [x,fe]=audioread('/homes/t24dherv/Documents/SAR_audio/single_tone_cello-a3.wav'); soundsc(x,fe); @@ -43,4 +44,144 @@ n4 = length(y4); freq4 = -fe4/2 : fe4/n4 : fe4/2-fe4/n4; plot(freq3,abs(y3)); -plot(freq4,abs(y4)); \ No newline at end of file +hold on +plot(freq4,abs(y4)); + + +fe = 44100; +D = 2; +t = linspace(0, D, D*fe); + +% Exemple d’amplitudes relatives (normalisées) +A = [7287.97, 5565.18, 1088.64, 1414.52, 980.919, 671.72, 570.373, 101.402]; +f = [220.374, 442.041, 663.24, 885.538, 1108.34, 1331.46, 1556.2, 1782.88]; + +x_synth = zeros(size(t)); +for k = 1:8 + x_synth = x_synth + A(k) * sin(2*pi*f(k)*t); +end + +x_synth = x_synth / max(abs(x_synth)); +%soundsc(x_synth, fe); +audiowrite('synth_piano.wav', x_synth, fe); + +% Durées de chaque phase +A = 0.1; Dd = 0.4; S = 1; R =0.5; + +% Points de rupture +Na = round(A * fe); +Nd = round(Dd * fe); +Ns = round(S * fe); +Nr = round(R * fe); + +% Niveaux +sustain_level = 0.6; + +% Création de l'enveloppe +attack = linspace(0, 1, Na); +decay = linspace(1, sustain_level, Nd); +sustain = sustain_level * ones(1, Ns); +release = linspace(sustain_level, 0, Nr); + +% Assemblage +env = [attack, decay, sustain, release]; + +% Ajuster la taille si dépassement +if length(env) < length(t) + env = [env, zeros(1, length(t) - length(env))]; +else + env = env(1:length(t)); +end + +x_synth_adsr = x_synth .* env; +soundsc(x_synth_adsr, fe); +%soundsc(x_synth, fe); +audiowrite('piano_adsr.wav', x_synth_adsr, fe); + +plot(t, env); +xlabel('Temps (s)'); +ylabel('Amplitude'); +title('Enveloppe ADSR'); + + +A = [7287.97, 5565.18, 1088.64, 1414.52, 980.919, 671.72, 570.373, 101.402]; +f = [220.374, 442.041, 663.24, 885.538, 1108.34, 1331.46, 1556.2, 1782.88]; + +fe = 44100; +D = 2; +t = linspace(0, D, D*fe); +N = D*fe; + +x_synth = zeros(size(t)); +for k = 1:8 + x_synth = x_synth + A(k) * sin(2*pi*f(k)*t); +end + +nu = zeros(size(t)); +for k = 1:8 + nu = nu + A(k) * fftshift(fft(sin(2*pi*f(k)*t))); +end + +x_synth2 = ifft(nu) +plot(t,x_synth2) + + +fe = 44100; % fréquence d’échantillonnage +T = 1/440; % période = 1/f0 = La4 +D = 100*T; +f0 = 1/T; +t = linspace(0, D, D*fe); +A = 1; + +% Signaux +x_carre = A * square(2*pi*f0*t); % signal carré +x_saw = A * sawtooth(2*pi*f0*t); % dent de scie + +% FFT +N = length(t); +X_carre = fftshift(abs(fft(x_carre))/N); +X_saw = fftshift(abs(fft(x_saw))/N); +f = linspace(-fe/2, fe/2, N); + +% Affichage +figure; +subplot(2,1,1); +plot(f, (X_carre)); +title('Spectre signal carré'); +xlabel('Fréquence (Hz)'); ylabel('Amplitude (dB)'); +xlim([0 5000]); + +subplot(2,1,2); +plot(f, (X_saw)); +title('Spectre signal dent de scie'); +xlabel('Fréquence (Hz)'); ylabel('Amplitude (dB)'); +xlim([0 5000]); +%} + +% Signal d’entrée : signal dent de scie +fe = 44100; +f0 = 10; +D = 100/f0; +t = linspace(0, D, D*fe); +x = sawtooth(2*pi*f0*t); + +% Filtrage passe-bas d’ordre 1 +b = [0.5 0.5]; +a = 1; +y = filter(b, a, x); + +% FFT +N = length(x); +X = fftshift(abs(fft(x))/N); +Y = fftshift(abs(fft(y))/N); +f = linspace(-fe/2, fe/2, N); + +% Affichage +figure; +plot(f, 20*log10(X), 'b*'); hold on; +plot(f, 20*log10(Y), 'r'); +legend('Entrée (signal brut)', 'Sortie filtrée'); +xlabel('Fréquence (Hz)'); +ylabel('Amplitude (dB)'); +title('Spectre avant et après filtrage passe-bas'); +xlim([0 5000]); \ No newline at end of file