diff --git a/src/wav/question_1_5.m b/src/wav/question_1_5.m new file mode 100644 index 0000000000000000000000000000000000000000..69377166f312ccc67772a6c39e18e0194aeab0a8 --- /dev/null +++ b/src/wav/question_1_5.m @@ -0,0 +1,54 @@ +% Paramètres de base +f0 = 220; % Fréquence fondamentale +amplitudes = [77, 75, 60, 63, 60, 56.5, 55, 41]; +Fs = 44100; +duration = 4; +N = duration * Fs; % nombre total d'échantillons + +% Créer un spectre de taille N (complexe) +X = zeros(1, N); + +% Positionner les harmoniques dans le spectre (en amplitude complexe) +for n = 1:8 + bin = round(n * f0 * N / Fs); % position dans le spectre + X(bin + 1) = amplitudes(n) / 2; % moitié en partie réelle + X(N - bin + 1) = conj(X(bin + 1)); % symétrie conjuguée +end + +% Signal temps par IFFT +signal = real(ifft(X)); + +% Normalisation +signal = signal / max(abs(signal)); + +% Enveloppe ADSR (même que précédemment) +A = 0.01; +D = 0.05; +S = 0.2; +R = 0.1; + +Na = round(A * Fs); +Nd = round(D * Fs); +Nr = round(R * Fs); +Ns = N - (Na + Nd + Nr); + +envelope = [linspace(0, 1, Na), ... + linspace(1, S, Nd), ... + S * ones(1, Ns), ... + linspace(S, 0, Nr)]; +envelope = envelope(1:length(signal)); + +% Application enveloppe +signal = signal .* envelope; + +% Lecture +sound(signal, Fs); + +% Affichage +t = linspace(0, duration, N); +figure; +plot(t(1:3000), signal(1:3000)); +title('Son généré par IFFT avec enveloppe ADSR'); +xlabel('Temps (s)'); +ylabel('Amplitude'); +