TP-traitement-audio-visuel/TP12/exercice_3bis.m
2023-06-22 20:47:16 +02:00

46 lines
1.7 KiB
Matlab
Executable file

clear;
close all;
taille_ecran = get(0, 'ScreenSize');
L = taille_ecran(3);
H = taille_ecran(4);
% Lecture d'un fichier audio :
[y, f_ech] = audioread('Musiques/Gounod.wav');
% Passage au domaine fréquentiel :
n_fenetre = 1024; % Largeur de la fenêtre (en nombre de points)
n_decalage = 512; % Décalage entre deux fenêtres (en nombre de points)
fenetre = 'hann'; % Type de la fenêtre
[Y, valeurs_t, valeurs_f] = TFCT(y, f_ech, n_fenetre, n_decalage, fenetre);
S = 20 * log10(abs(Y) + eps);
% NMF :
fichiers_notes_piano = dir('Musiques/Notes/Piano/');
fichiers_notes_piano = {fichiers_notes_piano(3:end).name};
chemins_notes_piano = strcat('Musiques/Notes/Piano/', fichiers_notes_piano);
fichiers_notes_violon = dir('Musiques/Notes/Violon/');
fichiers_notes_violon = {fichiers_notes_violon(3:end).name};
chemins_notes_violon = strcat('Musiques/Notes/Violon/', fichiers_notes_violon);
chemins = [chemins_notes_violon chemins_notes_piano];
D_0 = initialisation_notes(chemins, n_fenetre, n_decalage, fenetre);
A_0 = rand(size(D_0, 2), size(S, 2));
[D, A] = nmf(abs(Y), D_0, A_0, 30, 1, "exo3bis", valeurs_t, valeurs_f, length(chemins_notes_piano));
D_piano = D(:, 1:length(chemins_notes_piano));
D_violon = D(:, length(chemins_notes_piano)+1:end);
A_piano = A(1:length(chemins_notes_piano), :);
A_violon = A(length(chemins_notes_piano)+1:end, :);
Y_final_piano = D_piano * A_piano;
[y_final_piano, ~] = ITFCT(Y_final_piano, f_ech, n_decalage, fenetre);
audiowrite(['/work/lfainsin-matlab/TP12/exo3bis_final_piano.wav'], y_final_piano, f_ech);
Y_final_violon = D_violon * A_violon;
[y_final_violon, ~] = ITFCT(Y_final_violon, f_ech, n_decalage, fenetre);
audiowrite(['/work/lfainsin-matlab/TP12/exo3bis_final_violon.wav'], y_final_violon, f_ech);