diff --git a/src/wav/question_1_3.m b/src/wav/question_1_3.m new file mode 100644 index 0000000000000000000000000000000000000000..4aff29f4fad89a6e7702f96ac83594cf976b11a9 --- /dev/null +++ b/src/wav/question_1_3.m @@ -0,0 +1,82 @@ +% % Paramètres de base +% f0 = 220; % Fréquence fondamentale en Hz (La3) +% amplitudes = [77, 75, 60, 63, 60, 56.5, 55, 41]; % Amplitudes des 8 harmoniques +% Fs = 44100; % Taux d'échantillonnage +% duration = 2; % Durée du son en secondes +% t = linspace(0, duration, duration * Fs); % Vecteur temps +% +% % Initialisation du signal +% signal = zeros(size(t)); +% +% % Superposition des 8 harmoniques +% for n = 1:8 +% freq = n * f0; +% signal = signal + amplitudes(n) * sin(2 * pi * freq * t); +% end +% +% % Normalisation +% signal = signal / max(abs(signal)); +% +% % Lecture du son +% sound(signal, Fs); +% +% % Optionnel : tracer la forme d’onde +% figure; +% plot(t(1:1000), signal(1:1000)); % Affiche un court extrait +% title('Forme d’onde du son harmonique'); +% xlabel('Temps (s)'); +% ylabel('Amplitude'); +% +% +% + +% Paramètres de base +f0 = 220; % Fréquence fondamentale +amplitudes =[77, 75, 60, 63, 60, 56.5, 55, 41]; +Fs = 44100; % Taux d'échantillonnage +duration = 4; % Durée totale +t = linspace(0, duration, duration * Fs); + +% Création du signal harmonique +signal = zeros(size(t)); +for n = 1:8 + freq = n * f0; + signal = signal + amplitudes(n) * sin(2 * pi * freq * t); +end +signal = signal / max(abs(signal)); % Normalisation + +% Paramètres ADSR (en secondes) +A = 0.01; +D = 0.05; +S = 0.2; +R = 0.1; + +% Calcul des échantillons pour chaque phase +N = length(t); +Na = round(A * Fs); +Nd = round(D * Fs); +Nr = round(R * Fs); +Ns = N - (Na + Nd + Nr); % reste pour sustain + +% Création de l'enveloppe ADSR +envelope = [linspace(0, 1, Na), ... % Attack + linspace(1, S, Nd), ... % Decay + S * ones(1, Ns), ... % Sustain + linspace(S, 0, Nr)]; % Release + +% Ajustement en cas de petit décalage +envelope = envelope(1:min(end, N)); +signal = signal(1:length(envelope)); % synchroniser + +% Application de l'enveloppe +signal = signal .* envelope; + +% Lecture du son +sound(signal, Fs); + +% Affichage forme d’onde + enveloppe +figure; +plot(t(1:3000), signal(1:3000)); +title('Son harmonique avec enveloppe ADSR'); +xlabel('Temps (s)'); +ylabel('Amplitude');