From d0bd45adc6eef1f8cf9f0e89d9e035de65db2929 Mon Sep 17 00:00:00 2001 From: YE Victor <victor.ye@imt-atlantique.net> Date: Tue, 27 May 2025 16:18:16 +0000 Subject: [PATCH] Upload New File --- src/SAR2Q4.m | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/SAR2Q4.m diff --git a/src/SAR2Q4.m b/src/SAR2Q4.m new file mode 100644 index 0000000..e3a98f3 --- /dev/null +++ b/src/SAR2Q4.m @@ -0,0 +1,44 @@ +function synthese_soustractive_optimisee() + % Paramètres + Fe = 44100; + D = 1; f0 = 220; + t = 0:1/Fe:D-1/Fe; + + % Enveloppe ADSR + env = envelope_adsr(length(t), Fe, 0.05, 0.2, 0.6, 0.2); % plus rapide + sustain moyen + + x = sawtooth(2*pi*f0*t); + + % Filtre passe-bas FIR + fc = 600; % fréquence de coupure proche de 5*f0 + ordre = 50; + Wn = fc / (Fe/2); % normalisation + b = fir1(ordre, Wn, 'low'); % filtre passe-bas + + % Application du filtre + y = filter(b, 1, x); + + % Application de l’enveloppe + y = y .* env; + + % Écoute + soundsc(y, Fe); +end + +function env = envelope_adsr(N, Fe, A, D, S, R) + Na = round(A * Fe); + Nd = round(D * Fe); + Nr = round(R * Fe); + Ns = N - Na - Nd - Nr; + + if Ns < 0 + error('Durée totale trop courte pour ADSR.'); + end + + attack = linspace(0, 1, Na); + decay = linspace(1, S, Nd); + sustain = S * ones(1, Ns); + release = linspace(S, 0, Nr); + + env = [attack, decay, sustain, release]; +end -- GitLab