function s = crea_suono(c, nota, durata, trasp)
%CREA_SUONO 
%
% S = CREA_SUONO(C, NOTA, DURATA) ...

if ~exist('trasp', 'var')
    trasp = 0;
end

% Numero di sample per secondo
fs = 44100; 

% Convertiamo la nota scritta come stringa di caratteri in una frequenza
% numerica. 
frequenza = nota2freq(nota) * pow2( trasp / 12 );

% Creiamo una discretizzazione del tempo
t = 1/fs : (1 / fs) : durata;

% Costruiamo il suono finale
s = c(1) * sin(2 * pi * frequenza * t);
for j = 2 : length(c)
    s = s + c(j) * sin(2 * pi * frequenza * t * j);
end

% Queste ultime due istruzioni servono a rendere leggermente più realistico
% il suono, facendo in modo che cresca da 0 fino al volume massimo, per poi
% ridiscendere fino a 0 prima di terminare. 
envelope = @(t) min(1, 30 * t);
s = envelope(t) .* envelope(durata - t) .* s;

% Dividiamo s per il suo massimo, per evitare di produrre suoni troppo
% forti! Se voleste regolare il volume (ad esempio ridurlo) conviene farlo
% fuori da questa funzione.
s = s / max(s);
