function analizza_suono(nomefile)
%ANALIZZASUONO Mostra le frequenze fondamentali in un file audio. 
%

if ischar(nomefile)
    [s, Fs] = audioread(nomefile);
else
    s = nomefile;
    Fs = 44100;
end

% Facciamo una copia del suono per intero che ci servirà più tardi, mentre
% s verrà tagliato a solo una parte iniziale per meglio identificare le
% frequenze. 
s_intero = s;

% Teniamo solo la parte iniziale del suono -- questo ci permette di
% ignorare il fatto che durante un suono lungo i coefficienti di Fourier
% cambiano un po'. 
s = s(8192 : 16384);

% Calcoliamo la trasformata di Fourier discreta dei sample. Questa è una 
% trasformata fatta utilizzando i numeri complessi, e restituisce dei 
% valori da cui si possono ricavare i coefficienti a_i, b_i della serie
% di Fourier come li abbiamo introdotti noi.
sf = fft(s);
sf = sf / max(abs(sf));

% Leggiamo le frequenze prendendo la prima metà del suono (ovvero estraiamo
% gli a_i). 
l = ceil((length(sf) + 1) / 2);
freqs = abs(sf(1 : l));

x = ( (0:l-1) ./ l * Fs / 2);

subplot(1, 2, 1);

ind = floor(Fs * 0.1) : floor(Fs * 0.12);
plot(ind ./ Fs, s_intero(ind));
xlabel('t');
ylabel('s(t)');
title('Forma d''onda');

set(gcf, 'position', [ 400 400 1400 700 ]);

subplot(1, 2, 2);
semilogy(x, freqs);

% Zoomiamo nel range interessante, dove ci sono le frequenze
% ragionevolmente udibili per noi. 
axis([ 0 4000 0 1.1 * max(freqs) ]);

title('Coefficienti di Fourier');
xlabel('Frequenza (Hz)');
ylabel('Coefficiente di Fourier');

end