%{
Informatica applicata al suono aa 2019/20
Lettura dati seriali e generazione di un tono puro

MODIFICARE LA PORTA NELLA PRIMA RIGA DELLO SCRIPT A SECONDA DELLA PROPRIA
PORTA DISPONIBILE.

lo script resta in attesa del primo intero seguito da un 'a capo' sulla
porta specificata.

moltiplica questo intero per 10 e lo utilizza come frequenza per generare
un suono di durata 1 secondo.

Si può inviare il dato tramite STM32 con l'istruzione
printf("%d\n", variabile);

Si può inviare anche con porte seriali virtuali tramite coolTerm o da
terminale:
echo 150 > COMX                 su windows
echo 150 > /dev/ttySX           su macOS/Linux
avendo cura di inviare sulla porta accoppiata corretta, 
e non quella di lettura indicata nel codice sottostante.
%}

s = serial('COM4'); 
set(s,'BaudRate',9600); 
fopen(s); 
try
	f0 = fscanf(s, "%d"); % in assenza di dati genera una timeout exception da catturare con il blocco try catch
	
    Fs=8000;    % Frequenza di campionamento [Hz]
    Ts=1/8000;  % periodo di campionamento[s]
    D=1*Fs;     % durata del segnale 1[s]
    A=32767;    % ampiezza massima a 16 bit - 0 [dB)
    F0=f0*10;     % frequenza fondamentale 100 [Hz}

    x = zeros(D,1); % preallocazione array di dimensione D
    
    for n=0:D
        x(n+1)=A*sin(2*pi*F0*(n)*Ts);
    end

    player = audioplayer(x,Fs,16); 
    play(player);

catch
end

fclose(s);
delete(s);
clear s;
