Skip to content
Snippets Groups Projects
Commit bdbed61d authored by TeodoreAutuly's avatar TeodoreAutuly
Browse files

fin partie 1

parent 3e1a2c7f
Branches
No related tags found
No related merge requests found
...@@ -49,6 +49,106 @@ ylabel('Degré d inharmonicité (cents)'); ...@@ -49,6 +49,106 @@ ylabel('Degré d inharmonicité (cents)');
grid on; grid on;
legend('Piano 1', 'Piano 2'); legend('Piano 1', 'Piano 2');
% Récupération des 8 premières harmoniques % Récupérer les amplitudes des 8 premières harmoniques du piano1
harmoniques1 = [f1, f1*2, f1*3, f1*4, f1*5, f1*6, f1*7, f1*8]; harmonic_amplitudes = zeros(1, 8);
harmonic_frequencies = f1 * (1:8); % Fréquences des 8 premières harmoniques
for k = 1:8
[~, idx] = min(abs(f1 - harmonic_frequencies(k))); % Trouver l'indice de la fréquence harmonique
harmonic_amplitudes(k) = abs(singalFFTpiano1(idx)); % Amplitude correspondante
end
% Générer un son en superposant les ondes sinusoïdales
duration = 2; % Durée du son en secondes
t = 0:1/fs_piano1:duration; % Vecteur temps
synthesized_signal = zeros(size(t));
for k = 1:8
synthesized_signal = synthesized_signal + harmonic_amplitudes(k) * sin(2 * pi * harmonic_frequencies(k) * t);
end
% Normaliser le signal synthétisé
synthesized_signal = synthesized_signal / max(abs(synthesized_signal));
% Écouter le son généré
sound(synthesized_signal, fs_piano1);
% Sauvegarder le son généré dans un fichier
audiowrite('synthesized_piano1.wav', synthesized_signal, fs_piano1);
% Appliquer une enveloppe ADSR (Attack, Decay, Sustain, Release)
attack_time = 0.01; % Durée de l'attaque en secondes
decay_time = 0.5; % Durée de la décroissance en secondes
sustain_level = 0.2; % Niveau de maintien (entre 0 et 1)
release_time = 1.0; % Durée de la libération en secondes
% Calcul des échantillons pour chaque phase
attack_samples = round(attack_time * fs_piano1);
decay_samples = round(decay_time * fs_piano1);
release_samples = round(release_time * fs_piano1);
sustain_samples = length(t) - (attack_samples + decay_samples + release_samples);
% Construire l'enveloppe ADSR
envelope = [linspace(0, 1, attack_samples), ...
linspace(1, sustain_level, decay_samples), ...
sustain_level * ones(1, sustain_samples), ...
linspace(sustain_level, 0, release_samples)];
% Ajuster la taille de l'enveloppe si nécessaire
envelope = envelope(1:length(t));
% Appliquer l'enveloppe au signal synthétisé
synthesized_signal = synthesized_signal .* envelope;
% Écouter le son avec l'enveloppe ADSR
sound(synthesized_signal, fs_piano1);
% Sauvegarder le son avec l'enveloppe ADSR dans un fichier
audiowrite('synthesized_piano1_with_adsr.wav', synthesized_signal, fs_piano1);
% Synthèse du son en utilisant la transformée de Fourier discrète inverse (IFFT)
N = length(t); % Nombre de points pour la synthèse
spectrum = zeros(1, N); % Spectre initialisé à zéro
% Placer les amplitudes des harmoniques dans le spectre
for k = 1:8
harmonic_index = abs(round(harmonic_frequencies(k) * N / fs_piano1)+1); % Indice de la fréquence harmonique
spectrum(harmonic_index) = harmonic_amplitudes(k); % Ajouter l'amplitude au spectre
spectrum(end - harmonic_index + 2) = harmonic_amplitudes(k); % Ajouter la composante symétrique
end
% Appliquer l'IFFT pour générer le signal temporel
synthesized_signal_ifft = real(ifft(spectrum));
% Normaliser le signal synthétisé
synthesized_signal_ifft = synthesized_signal_ifft / max(abs(synthesized_signal_ifft));
% Écouter le son généré
sound(synthesized_signal_ifft, fs_piano1);
% Sauvegarder le son généré dans un fichier
audiowrite('synthesized_piano1_ifft.wav', synthesized_signal_ifft, fs_piano1);
% Tracer le spectre du signal synthétisé
spectrum_ifft = fft(synthesized_signal_ifft); % Calculer la FFT du signal synthétisé
spectrum_ifft = fftshift(spectrum_ifft); % Centrer la FFT autour de 0
spectrum_synthesized = fft(synthesized_signal); % Calculer la FFT du signal synthétisé
spectrum_synthesized = fftshift(spectrum_synthesized); % Centrer la FFT autour de 0
f_ifft = linspace(-fs_piano1/2, fs_piano1/2, length(spectrum_ifft)); % Fréquence associée à la FFT
amplitude_ifft = 20 * log10(abs(spectrum_ifft)); % Convertir en dB
f_synthesized = linspace(-fs_piano1/2, fs_piano1/2, length(spectrum_synthesized)); % Fréquence associée à la FFT
amplitude_synthesized = 20 * log10(abs(spectrum_synthesized)); % Convertir en dB
% Tracer le spectre
figure;
plot(f_ifft, amplitude_ifft, 'g', f_synthesized, amplitude_synthesized, 'm');
title('Spectre des signaux synthétisés');
xlabel('Fréquence (Hz)');
ylabel('Amplitude (dB)');
grid on;
xlim([-fs_piano1/2 fs_piano1/2]);
legend('Synthèse IFFT', 'Synthèse directe');
File added
File added
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment