%Informatica Applicata al Suono - Modulo 1 - Prof. Malcangi
%
% Wavetable: sintesi di suoni da tabella (Table Look-up)

% La Tabella contiene il campionamento di un timbro 
% La frequenza del tono memorizzato è una frequenza fondamentale 
% di sintesi da cui si ottengono per decimazione le frequenze superiori

% Il controllo della sintesi dipende da tre parametri:
% F: Frquenza fondamentale di sintesi
% 
clear;
close all;

Fs=16000; %[Hz]
Ts=1/Fs; %[s]

% parametri di controllo
F=1000;    %[Hz]   Altezza (pitch)
Amp=1;   %[lin]  Ampiezza (massima)
Dur=1;  %[s]    Durata

% La tabella può essere caricata o con il campionamento
% di suoni sintetici o con il campionamento di suoni natutrali

% Tono puro
Nmax=Dur/Ts;
A=(Amp:-1/Nmax:0);          % Controllo d'ampiezza (inviluppo)
A=A*0.3;
F0=1; %[Hz]
T0=1/F0;
N0=T0/Ts;
for (n=0:N0-1)
    Table(n+1)=sin(2*pi*F0*n*Ts);
end
% figure;
% plot(Table)

NDur=Dur/Ts; %[samples]
TF=1/F;
NF=TF/Ts;
stepr=(N0/NF);

m=1;
mr=0;
step=0.0;
for (n=0:NDur-1)
    mr=(mr+stepr);
    m=fix(mr)
    if(m>N0)
        m=m-N0;
        mr=0;
    end
    Out(n+1)=A(n+1)*Table(m);
end
MAX=max(Out);
if(MAX>1.0)
    Out=Out/MAX;
end
figure;
plot(Out);
sound(Out);
