-
LAHRIRI Ismael authoredLAHRIRI Ismael authored
question3.m 865 B
% Charger le son
[y, Fs] = audioread('single_tone_piano1.wav');
% FFT
N = 2^nextpow2(length(y));
Y = fft(y, N);
P = abs(Y(1:N/2+1));
f = Fs*(0:(N/2))/N;
% Trouver la fondamentale (plus fort pic sous 500 Hz)
[~, loc_f1] = max(P(f < 500)); % Suppose que f1 est sous 500Hz
f1 = f(loc_f1);
% Initialiser
freq_harm = zeros(1,8);
amp_harm = zeros(1,8);
% Chercher 8 harmoniques autour de nf1
for n = 1:8
[~, idx] = min(abs(f - n*f1)); % Trouver l'index proche de n*f1
freq_harm(n) = f(idx);
amp_harm(n) = P(idx);
end
% Durée du son
duration = 2; % secondes
t = 0:1/Fs:duration;
% Signal synthétisé
synth = zeros(size(t));
for k = 1:8
synth = synth + amp_harm(k) * cos(2*pi*freq_harm(k)*t);
end
% Normaliser
synth = synth / max(abs(synth));
% Jouer le son
sound(synth, Fs);
% Sauvegarder si besoin
audiowrite('piano_synthetise.wav', synth, Fs);