% Corso Informatica Multimediale Audio: Prof. Mario Malcangi
%
% Esempio di programmazione per il trattamento del segnale audio
%
% Conversione del formato digitale (Fs e Nbit):
% legge un file audio con frequenza di campionamento Fs e quantizzazione
% Nbit e lo riscrive con frequenza di campionamento 2*Fs e Nbit+8
%

clear;        % Azzera il workspace (spazio dati)
close all;    % Chiude tutte le finestre grafiche (plot)

%
% Definizione del formato digitale (iniziale)
%

Fs=8000;        % Frequenza di campionamento (Hz)
Nbit=16;        % Numero di bit di quantizzazione (bit)
Ts=1/Fs;        % Periodo di campionamento

% Lettura di un file con header (.wav)

[x,Fs,Nbit]=wavread('Tone1000.wav');

% Visualizza e riproduce

Durata=length(x)*Ts; % durara della sequenza audio (s)
t=0:Ts:Durata-Ts;    % calibrazione asse del tempo
plot(t,x);           % visualizza
xlabel('Tempo (s)');
ylabel('Ampiezza (assoluta)');
wavplay(x,Fs);       % riproduce

Nsample=length(x);

m=1;
for n=1:Nsample-1
    x1(m)=x(n);
    x1(m+1)=(x(n)+x(n+1))/2;    % interpolazione lineare (ordine 1)
    m=m+2;
end
x1(m)=x(n);
x1(m+1)=x(n);

% Aggiorna Fs e Nbit

Fs=Fs*2;        % Raddoppia la freequenza di campionamento
Nbit=Nbit+8;    % Aumenta il numero di bit di quantizzazione
Ts=1/Fs;        % Aggiorna Ts

% Visualizza e riproduce con Fs e Nbit aggiornato

Durata=length(x1)*Ts;   % durara della sequenza audio (s)
t=0:Ts:Durata-Ts;       % calibrazione asse del tempo
figure;
plot(t,x1);             % visualizza
xlabel('Tempo (s)');
ylabel('Ampiezza (assoluta)');
wavplay(x1,Fs);         % riproduce

% Scrittura su file con header (.wav)

wavwrite(x1,Fs,Nbit,'Tone1000.wav');




