%% Elõször a fájlnév, mintavételezés, maximális kivezérlés és kvantálási
%  bitmélység beolvasását kell megcsinálni. Mivel ebben nincs sok nehézség,
%  ezért a feladatnak ezt a részét készen kapod.
% 
%  A tesztelés során nem kell minden lefutásnál megadni ezeket a
%  paramétereket, a Matlab scriptet lehet szekciónként is futtatni. A
%  szekciókat a %% jelekkel a sor elején kezdõdõ kommentek határolják
%  Ehhez a Run Section vagy a [Ctrl]+[ENTER] gombokat kell megnyomni

filename_readed = input('Kérem a fájl nevét!\n', 's'); % A második paraméter a beolvasott érték típusa
maxAmplitudo_readed = input('Kérem a maximális kivezérlést!\n'); % Ha nincs második paraméter, a Matlab maga próbálja eldönteni
Fs_new_readed = input('Mi legyen a mintavételi frekvencia?\n');
bitrate_readed = input('Mi legyen a bitmélység?\n');

% A könnyû tesztelés érdekében, ha a kérdések után csak ENTER-t ütünk,
% akkor nem fogja felülírni a korábbi értékeket.

if ~isempty(filename_readed)
    filename = filename_readed;
end
if ~isempty(maxAmplitudo_readed)
    maxAmplitudo=maxAmplitudo_readed;
end
if ~isempty(Fs_new_readed)
    Fs_new=Fs_new_readed;
end
if ~isempty(bitrate_readed)
    bitrate=bitrate_readed;
end

[y,Fs] = audioread(filename);

%% Skálák elkészítése

linScale = createLinScale(maxAmplitudo, bitrate);
logScale = createLogScale(maxAmplitudo, bitrate);

% Ezután ábrázoljuk a skálákat, hogy lássuk, mi köztük a különbség
% Látszik, hogy a logaritmikus kvantáló beosztása a 0 környékén nem
% tökéletes, de a mostani demonstrációs célnak megteszi

figure(1);
subplot(1,2,1);
plot(linScale, linScale, '*');
subplot(1,2,2);
plot(logScale, logScale, '*');
disp('Várakozás ENTER-re');
pause;
close(1);
%% A tényleges feladat elvégzése (újramintavételezés, logaritmikus
%  kvantálás, lineáris kvantálás) itt történik meg.

y_resampled = resampleSound(y, Fs, Fs_new);
y_lin = quantizeByScale(y_resampled, linScale);
y_log = quantizeByScale(y_resampled, logScale);

figure(1);
subplot(3,1,1);
plot(y_resampled-y_lin', 'r');
title('Lineáris hiba');
subplot(3,1,2);
plot(y_resampled-y_log', 'r');
title('Logaritmikus hiba');
subplot(3,1,3);
plot(y_resampled, 'b');
title('Eredeti jel');
disp('Várakozás ENTER-re');
pause;
close(1);

%% A hangminták lejátszása az utolsó lépés
num=1;
disp('Az eredeti minta lejátszásához nyomj 1-et');
disp('A mintavett minta lejátszásához nyomj 2-t');
disp('A lineárisan kvantált minta lejátszásához nyomj 3-t');
disp('A logaritmikus minta lejátszásához nyomj 4-et');
disp('A kilépéshez nyomj 0-át');


while num>0
    num=input('');
    switch num
        case 1 
            sound(y, Fs);
        case 2
            sound(y_resampled, Fs_new);
        case 3 
            sound(y_lin, Fs_new);
        case 4
            sound(y_log, Fs_new);
    end
end
%{
%}