% Softwarový analyzátor a dolaďovač zaznamenaného vokálu
% Software analysator and tuner of vocal records

function Tuner(vstpar)

    global y y2 Fs nbits N prubeh pracokno F player cursor cursorprac1 cursorprac2 kurzorx1 kurzorx2 pocetklik
    global delkaN kmitocet noty t tanalyza AX pulsy maxnota minnota oranal upanal    
    if nargin == 0  % funkce spuštěná bez vstupního parametru
        
        %--------- kresleni grafických objektů Figure a Uicontrol --------
        %00000000000000000000000000000000000000000000000000000000000000000
        Monitor = get(0, 'ScreenSize'); % rozliseni obrazovky monitoru
        F = figure('Units', 'Pixels', 'Name', 'Dolaďovač', ...
                   'Position', [0.05 * Monitor(3) 0.1 * Monitor(4) 0.9 * Monitor(3) 0.8 * Monitor(4)], ...
                   'Tag', 'Figure', 'NumberTitle', 'off', 'Resize', 'on', 'Menubar', 'none',...
                   'DockControls', 'off', 'ResizeFcn', 'Tuner resize');
                         
        % --- uimenu ---
        soubor = uimenu('Label', 'Soubor');
            uimenu(soubor, 'Label', 'Otevřít', 'Callback', 'Tuner otevrit', 'Accelerator', 'O');
            uimenu(soubor, 'Label', 'Uložit', 'Callback', 'Tuner ulozit', 'Accelerator', 'S', ...
                'Tag', 'Ulozit', 'Enable', 'off');
            uimenu(soubor, 'Label', 'Konec', 'Callback', 'Tuner konec', 'Separator', 'on', 'Accelerator', 'Q');
        napoveda = uimenu('Label', 'Nápověda');
            uimenu(napoveda, 'Label', 'Návod', 'Callback', 'Tuner navod');
            uimenu(napoveda, 'Label', 'O programu', 'Callback', 'Tuner oprogramu');
        
        % --- zobrazení průběhu ---
        prubeh = axes('Units', 'Pixels', 'Tag', 'Prubeh', 'Color', 'white', 'DrawMode', 'fast');
            axis(prubeh, [0 10 -1 1]);
            xlabel(prubeh, '{\itt} [s]');
            ylabel(prubeh, '{\itamplituda} [-]');
            
        uicontrol('Units', 'Pixels', 'Style', 'Toggle', ...
                  'String', 'Originál', 'FontSize', 10, 'FontWeight', 'bold', 'Value', 1, ...
                  'Enable', 'inactive', 'Callback', 'Tuner original', 'Tag', 'Originalbut');
              
        uicontrol('Units', 'Pixels', 'Style', 'Toggle', ...
                  'String', 'Upraveno', 'FontSize', 10, 'FontWeight', 'bold', 'Enable', 'off', ...
                  'Callback', 'Tuner upraveno','Tag', 'Upravenobut');
        
        uicontrol('Units', 'Pixels', 'Style', 'Slider', ...
                  'Enable', 'off', 'Callback', 'Tuner posuvprubehu', 'Tag', 'Posuvprubehu');
           
        uicontrol('Units', 'Pixels', 'Style', 'Push', ...
                  'String', '-', 'FontSize', 25, 'FontWeight', 'bold', 'Enable', 'off', ...
                  'Callback', 'Tuner oddaleni','Tag', 'Oddalenibut');
              
        uicontrol('Units', 'Pixels', 'Style', 'Push', ...
                  'String', '+', 'FontSize', 25, 'FontWeight', 'bold', 'Enable', 'off', ...
                  'Callback', 'Tuner priblizeni','Tag', 'Priblizenibut');
              
        % --- panel 'Informace o souboru' ---
        uipanel('Units', 'Pixels', 'Tag', 'Panelinfo', ...
                'Title', 'Informace o souboru', 'BorderType', 'beveledin', ...
                'FontSize', 12, 'FontWeight', 'bold');

        uicontrol('Units', 'Pixels', 'Style', 'Text', ...
                  'String', 'Název:', 'FontSize', 10, 'FontWeight', 'bold', ...
                  'HorizontalAlignment', 'left', 'Tag', 'Nazevnadpis');
              
        uicontrol('Units', 'Pixels', 'Style', 'Text', ...
                  'String', 'Délka:', 'FontSize', 10, 'FontWeight', 'bold', ...
                  'HorizontalAlignment', 'left', 'Tag', 'Delkanadpis');
              
        uicontrol('Units', 'Pixels', 'Style', 'Text', ...
                  'String', 'Vzorkovací kmitočet:', 'FontSize', 10, 'FontWeight', 'bold', ...
                  'HorizontalAlignment', 'left', 'Tag', 'Vzorkovacikmitocetnadpis');
              
        uicontrol('Units', 'Pixels', 'Style', 'Text', ...
                  'String', 'Bitová hloubka:', 'FontSize', 10, 'FontWeight', 'bold', ...
                  'HorizontalAlignment', 'left', 'Tag', 'Bitovahloubkanadpis');
              
        uicontrol('Units', 'Pixels', 'Style', 'Text', 'HorizontalAlignment', 'left',...
                  'String', 'Nebyl vybrán žádný soubor', 'FontSize', 10, 'FontAngle', 'italic', ...
                  'Tag', 'Nazev');
              
        uicontrol('Units', 'Pixels', 'Style', 'Text', 'HorizontalAlignment', 'left', ...
                  'FontSize', 10, 'Tag', 'Delka');
                      
        uicontrol('Units', 'Pixels', 'Style', 'Text', 'HorizontalAlignment', 'left', ...
                  'FontSize', 10, 'Tag', 'Vzorkovacikmitocet');
              
        uicontrol('Units', 'Pixels', 'Style', 'Text', 'HorizontalAlignment', 'left', ...
                  'FontSize', 10, 'Tag', 'Bitovahloubka');
              
        % --- panel 'Přehrávání' ---
        uipanel('Units', 'Pixels', 'Tag', 'Panelprehravani', 'Title', 'Přehrávání', ...
                'BackgroundColor', get(gcf, 'Color'), 'FontSize', 12, 'FontWeight', 'bold');
            
        uicontrol('Units', 'Pixels', 'Style', 'Text', 'String', '00:00.0', 'FontSize', 25, ...
                  'FontWeight', 'bold', 'Tag', 'Casomira');

        uicontrol('Units', 'Pixels', 'Style', 'Toggle', 'String', 'Přehrát', 'FontSize', 16, ...
                  'FontWeight', 'bold', 'Enable', 'off', 'Callback', 'Tuner play', 'Tag', 'Playbut');
              
        uicontrol('Units', 'Pixels', 'Style', 'Toggle', 'String', 'Pauza', 'FontSize', 16, ...
                  'FontWeight', 'bold', 'Enable', 'off', 'Callback', 'Tuner pause', 'Tag', 'Pausebut');
              
        uicontrol('Units', 'Pixels', 'Style', 'Push', 'String', 'Stop', 'FontSize', 16, ...
                  'FontWeight', 'bold', 'Enable', 'off', 'Callback', 'Tuner stop', 'Tag', 'Stopbut');
              
        % --- pracovní okno - půběh základního kmitočtu a noty ---
        pracokno = axes('Units', 'Pixels', 'Tag', 'Pracokno', 'Color', 'white', 'YGrid', 'on', ...
                        'YMinorGrid', 'on', 'GridLineStyle', '-');
            axis(pracokno, [0 10 0 1100]);
            xlabel(pracokno, '{\itt} [s]');
            ylabel(pracokno, '{\itf} [Hz]');
                     
        uicontrol('Units', 'Pixels', 'Style', 'Toggle', 'String', 'Kmitočet', 'FontSize', 10, ...
                  'FontWeight', 'bold', 'Enable', 'off', 'Callback', 'Tuner kmitocet', 'Tag', 'Kmitocetbut');
              
        uicontrol('Units', 'Pixels', 'Style', 'Toggle', 'String', 'Noty', 'FontSize', 10, ...
                  'FontWeight', 'bold', 'Enable', 'off', 'Callback', 'Tuner noty','Tag', 'Notybut');
              
        % --- panel 'Analýza' ---
        uipanel('Units', 'Pixels', 'Tag', 'Panelanalyza', 'Title', 'Analýza', ...
                'BackgroundColor', get(gcf, 'Color'), 'FontSize', 12, 'FontWeight', 'bold');
            
        uicontrol('Units', 'Pixels', 'Style', 'Push', 'String', 'Analyzovat', 'FontSize', 14, ...
                  'FontWeight', 'bold', 'Enable', 'off', 'Callback', 'Tuner analyzovat', 'Tag', 'Analyzovatbut');
              
        uicontrol('Units', 'Pixels', 'Style', 'Text', 'String', 'Měření odchylky:', 'FontSize', 10, ...
                  'HorizontalAlignment', 'left', 'FontWeight', 'bold', 'Enable', 'off', ...
                  'BackgroundColor', get(gcf, 'Color'), 'Tag', 'Odchylkatext');
              
        uicontrol('Units', 'Pixels', 'Style', 'Text', 'String', '-', 'FontSize', 18, ...
                  'HorizontalAlignment', 'left', 'FontWeight', 'bold', 'Enable', 'off', ...
                  'BackgroundColor', get(gcf, 'Color'), 'Tag', 'Odchylka');
              
        uicontrol('Units', 'Pixels', 'Style', 'Checkbox', 'String', 'Kurzor', 'FontSize', 10, ...
                  'HorizontalAlignment', 'left', 'Enable', 'off', 'Callback', 'Tuner kurzoranalyzacheck', ...
                  'BackgroundColor', get(gcf, 'Color'), 'Tag', 'Odchylkakurzorcheck');
              
        uicontrol('Units', 'Pixels', 'Style', 'Text', 'String', 'Reference a1 =', 'FontSize', 10, ...
                  'HorizontalAlignment', 'left', 'FontWeight', 'bold', 'Enable', 'off', ...
                  'BackgroundColor', get(gcf, 'Color'), 'Tag', 'Referencetext');
              
        uicontrol('Units', 'Pixels', 'Style', 'Text', 'String', 'Hz', 'FontSize', 10, ...
                  'HorizontalAlignment', 'left', 'FontWeight', 'bold', 'Enable', 'off', ...
                  'BackgroundColor', get(gcf, 'Color'), 'Tag', 'Jednotkareferencetext');
              
        uicontrol('Units', 'Pixels', 'Style', 'Edit', 'String', '440', 'FontSize', 10, 'Enable', 'off',...
                  'BackgroundColor', 'white', 'HorizontalAlignment', 'left', 'Tag', 'Reference');
            
        % --- panel 'Doladění' ---
        uipanel('Units', 'Pixels', 'Tag', 'Paneldoladeni', 'Title', 'Doladění', ...
                'BackgroundColor', get(gcf, 'Color'), 'FontSize', 12, 'FontWeight', 'bold');
            
        uicontrol('Units', 'Pixels', 'Style', 'Radiobutton', 'String', 'Automaticky', 'FontSize', 10, ...
                  'HorizontalAlignment', 'left', 'FontWeight', 'bold', 'Callback', 'Tuner automaticky', ...
                  'BackgroundColor', get(gcf, 'Color'), 'Value', 1, 'Enable', 'off', 'Tag', 'Automatickyradio');
              
        uicontrol('Units', 'Pixels', 'Style', 'Radiobutton', 'String', 'Ručně', 'FontSize', 10, ...
                  'HorizontalAlignment', 'left', 'FontWeight', 'bold', 'Callback', 'Tuner rucne', ...
                  'BackgroundColor', get(gcf, 'Color'), 'Enable', 'off', 'Tag', 'Rucneradio');
              
        uicontrol('Units', 'Pixels', 'Style', 'Popupmenu', 'String', {'-'}, 'FontSize', 10, ...
                  'HorizontalAlignment', 'left', 'Callback', 'Tuner notapresne', ...
                  'Enable', 'off', 'Tag', 'Notapresne');
              
        uicontrol('Units', 'Pixels', 'Style', 'Text', 'String', 'Půltóny:', 'FontSize', 10, ...
                  'HorizontalAlignment', 'left', 'FontWeight', 'bold', 'Enable', 'off', ...
                  'BackgroundColor', get(gcf, 'Color'), 'Tag', 'Pultonytext');
              
        uicontrol('Units', 'Pixels', 'Style', 'Text', 'String', 'Centy:', 'FontSize', 10, ...
                  'HorizontalAlignment', 'left', 'FontWeight', 'bold', 'Enable', 'off', ...
                  'BackgroundColor', get(gcf, 'Color'), 'Tag', 'Centytext');
              
        uicontrol('Units', 'Pixels', 'Style', 'Slider', 'Min', -12, 'Max', 12, 'SliderStep', [1/24 1/24], ...
                  'Value', 0, 'Enable', 'off', 'Callback', 'Tuner posuvpultony', 'Tag', 'Posuvpultony', ...
                  'UserData', 0);
              
        uicontrol('Units', 'Pixels', 'Style', 'Slider', 'Min', -100, 'Max', 100, 'SliderStep', [1/200 1/20], ...
                  'Value', 0, 'Enable', 'off', 'Callback', 'Tuner posuvcenty', 'Tag', 'Posuvcenty', ...
                  'UserData', 0);
              
        uicontrol('Units', 'Pixels', 'Style', 'Text', 'String', '+0', 'FontSize', 10, ...
                  'HorizontalAlignment', 'left', 'FontWeight', 'bold', 'Enable', 'off', ...
                  'BackgroundColor', get(gcf, 'Color'), 'Tag', 'Pultony');
              
        uicontrol('Units', 'Pixels', 'Style', 'Text', 'String', '+0', 'FontSize', 10, ...
                  'HorizontalAlignment', 'left', 'FontWeight', 'bold', 'Enable', 'off', ...
                  'BackgroundColor', get(gcf, 'Color'), 'Tag', 'Centy');
              
        uicontrol('Units', 'Pixels', 'Style', 'Text', 'String', 'Rozsah:', 'FontSize', 10, ...
                  'HorizontalAlignment', 'left', 'FontWeight', 'bold', 'Enable', 'off', ...
                  'BackgroundColor', get(gcf, 'Color'), 'Tag', 'Rozsahtext');
              
        uicontrol('Units', 'Pixels', 'Style', 'Radiobutton', 'String', 'Celé', 'FontSize', 10, ...
                  'HorizontalAlignment', 'left', 'FontWeight', 'bold', 'Callback', 'Tuner cele', ...
                  'BackgroundColor', get(gcf, 'Color'), 'Value', 1, 'Enable', 'off', 'Tag', 'Celeradio');
              
        uicontrol('Units', 'Pixels', 'Style', 'Radiobutton', 'String', 'Výběr', 'FontSize', 10, ...
                  'HorizontalAlignment', 'left', 'FontWeight', 'bold', 'Callback', 'Tuner vyber', ...
                  'BackgroundColor', get(gcf, 'Color'), 'Enable', 'off', 'Tag', 'Vyberradio');
              
        uicontrol('Units', 'Pixels', 'Style', 'Checkbox', 'String', 'Kurzor', 'FontSize', 10, ...
                  'HorizontalAlignment', 'left', 'Enable', 'off', 'Callback', 'Tuner kurzordoladenicheck', ...
                  'BackgroundColor', get(gcf, 'Color'), 'Tag', 'Rozsahkurzorcheck');
              
        uicontrol('Units', 'Pixels', 'Style', 'Push', 'String', 'Doladit', 'FontSize', 14, ...
                  'FontWeight', 'bold', 'Enable', 'off', 'Callback', 'Tuner doladit', 'Tag', 'Doladitbut');
                      
    else
        switch(vstpar)
            case('otevrit')
                [nazev, adresar] = uigetfile({'*.wav','Audio formát WAV'}, 'Otevření souboru ve formátu WAV ...');
                if nazev == 0 % volba storno
                else
                    kmitocet = []; % vynulování proměnné kmitočet, pro zjišťování, že ještě nebyla provedena analýza
                    oranal = 0; % analýza originálního signálu ještě nebyla provedena
                    upanal = 0; % analýza již jednou doladěného signálu ještě nebyla provedena
                    
                    [y,Fs,nbits] = wavread([adresar, nazev]);
                    
                    % --- převod ze sterea na mono ---
                    if size(y,2) > 1    % pokud je potřeba
                        levy = y(:,1);
                        pravy = y(:,2);

                        y = (levy + pravy) / 2;
                    end
                
                    % --- zobrazení průběhu ---
                    set(F,'CurrentAxes', prubeh)
                    cla(prubeh, 'reset');
                    
                    N = length(y); % celkový počet vzorků v nahrávce
                    t = 0:1/Fs:(N-1)/Fs; % délka nahrávky [s]
                    
                    plot(prubeh, t,y);
                    hold on
                    
                    axis(prubeh, [0 (N-1)/Fs -1 1]);
                    xlabel(prubeh, '{\itt} [s]');
                    ylabel(prubeh, '{\itamplituda} [-]');
                    
                    % --- zobrazeni kurzoru ---
                    cursor = line([0 0], [-1 1], 'LineWidth', 2, 'Color', 'r');
                
                    % --- prehravac ---
                    player = audioplayer(y, Fs, nbits);
                    set(player, 'TimerFcn', 'Tuner casomira', 'StopFcn', 'Tuner konecprehravani', 'TimerPeriod', 0.02)
    
                    % --- delka nahravky ---
                    delka = (N/Fs); 
                    minuty = floor(delka/60);
                    s = delka - (minuty * 60);
    
                    delkaN = delka/N;   % pro výpočet aktuálního přehrávaného času v case('casomira')
            
                    % --- nastaveni posuvu prubehu ---
                    set(findobj('Tag', 'Posuvprubehu'), 'Min', 0, 'Max', 0.0001, 'SliderStep', [1 1], 'Value', 0);
                    
                    % --- vymazání výsledků předchzí analýzy ---
                    set(F,'CurrentAxes', pracokno);
                    cla(pracokno, 'reset');
    
                    % --- nastavení okna pro zobrazení analyzovaného kmitočtu ---
                    set(pracokno, 'YTickMode', 'auto', 'YTickLabelMode', 'auto', 'YGrid', 'on', 'YMinorGrid', 'on', ...
                        'GridLineStyle', '-');
                
                    axis(pracokno, [0 (N-1)/Fs 0 1100]);
                    xlabel(pracokno, '{\itt} [s]');
                    ylabel(pracokno, '{\itf} [Hz]');
                    
                    % --- vykreslení vynulovaných kurzorů (mimo zobrazovaný rozsah) ---
                    kurzorx1 = -1; % hodnota polohy kurzoru na ose x mimo zobrazený rozsah
                    kurzorx2 = -1;
                    cursorprac1 = line([kurzorx1 kurzorx1], [0 1100], 'LineWidth', 2, 'Color', 'green', 'HitTest', 'off'); % vykreslení kurzoru pro výběr (mimo zobrazený rozsah)
                    cursorprac2 = line([kurzorx2 kurzorx2], [0 1100], 'LineWidth', 2, 'Color', 'green', 'HitTest', 'off');
                    
                    % --- deaktivace kurzoru analyza ---
                    set(findobj('Tag', 'Figure'), 'WindowButtonMotionFcn', ' ') % deaktivace reakce na pohyb myši po figure
                    set(pracokno, 'ButtonDownFcn', ' ') % deaktivace reakce na stisk v ramci Axes
                
                    % --- zobrazení informací o souboru ---
                    set(findobj('Tag', 'Nazev'), 'String', nazev, 'FontAngle', 'normal');
                    
                    delka = sprintf('%02dmin %04.1fs', minuty, s);
                    set(findobj('Tag', 'Delka'), 'String', delka);
                    
                    Fvz = sprintf('%d Hz', Fs);
                    set(findobj('Tag', 'Vzorkovacikmitocet'), 'String', Fvz);
    
                    pocbits = sprintf('%d bit', nbits);
                    set(findobj('Tag', 'Bitovahloubka'), 'String', pocbits);
                
                    % --- povoleni zobrazení ---
                    set(findobj('Tag', 'Posuvprubehu'), 'enable', 'on');
                    set(findobj('Tag', 'Priblizenibut'), 'enable', 'on');
                    set(findobj('Tag', 'Oddalenibut'), 'enable', 'on');
                    
                    % --- povolení přehrávání ---
                    set(findobj('Tag', 'Playbut'), 'enable', 'on');
                    
                    % --- povolení analýzy ---
                    set(findobj('Tag', 'Kmitocetbut'), 'Enable', 'off', 'Value', 0);
                    set(findobj('Tag', 'Notybut'), 'Enable', 'off', 'Value', 0);
                    set(findobj('Tag', 'Reference'), 'enable', 'on', 'string', '440');
                    set(findobj('Tag', 'Analyzovatbut'), 'enable', 'on');
                    set(findobj('Tag', 'Referencetext'), 'enable', 'on');
                    set(findobj('Tag', 'Jednotkareferencetext'), 'enable', 'on');
                    set(findobj('Tag', 'Odchylkatext'), 'enable', 'off');
                    set(findobj('Tag', 'Odchylka'), 'enable', 'off', 'String', '-');
                    set(findobj('Tag', 'Odchylkakurzorcheck'), 'enable', 'off', 'Value', 0);
                    
                    % --- povolení doladění ---
                    set(findobj('Tag', 'Automatickyradio'), 'enable', 'off', 'Value', 1);
                    set(findobj('Tag', 'Rucneradio'), 'enable', 'off', 'Value', 0);
                    set(findobj('Tag', 'Ulozit'), 'Enable', 'off');
                    set(findobj('Tag', 'Doladitbut'), 'enable', 'off');
                    set(findobj('Tag', 'Pozadovananotatext'), 'Enable', 'off');
                    set(findobj('Tag', 'Upravenobut'), 'Enable', 'off', 'Value', 0);
                    set(findobj('Tag', 'Originalbut'), 'Enable', 'inactive', 'Value', 1);
                    set(findobj('Tag', 'Notapresne'), 'enable', 'off', 'String', {'-'}, 'Value', 1);
                    set(findobj('Tag', 'Pultonytext'), 'enable', 'off');
                    set(findobj('Tag', 'Centytext'), 'enable', 'off');
                    set(findobj('Tag', 'Posuvpultony'), 'enable', 'off', 'Value', 0, 'UserData', 0);
                    set(findobj('Tag', 'Posuvcenty'), 'enable', 'off', 'Value', 0, 'UserData', 0);
                    set(findobj('Tag', 'Pultony'), 'enable', 'off', 'String', '+0');
                    set(findobj('Tag', 'Centy'), 'enable', 'off', 'String', '+0');
                    set(findobj('Tag', 'Rozsahtext'), 'enable', 'off');
                    set(findobj('Tag', 'Celeradio'), 'enable', 'off', 'Value', 1);
                    set(findobj('Tag', 'Vyberradio'), 'enable', 'off', 'Value', 0);
                    set(findobj('Tag', 'Rozsahkurzorcheck'), 'enable', 'off', 'Value', 0);
                    
                end
                
            case('ulozit')
                [nazev, adresar] = uiputfile({'*.wav','Audio formát WAV'}, 'Uložení souboru ve formátu WAV ...');
                if nazev == 0 % volba storno
                else
                    wavwrite(y2, Fs, nbits, [adresar, nazev]);
                end
                
            case('original')
                % protichůdné tlačítko
                set(findobj('Tag', 'Upravenobut'), 'Value', 0, 'Enable', 'on');
                set(findobj('Tag', 'Originalbut'), 'Enable', 'inactive');
                
                % zjištění aktuálních mezí osy x
                stav = get(prubeh, 'xlim');
                
                % --- zobrazení průběhu ---
                set(F,'CurrentAxes', prubeh)
                cla(prubeh, 'reset');
                    
                t = 0:1/Fs:(N-1)/Fs; % délka nahrávky [s]
                plot(prubeh, t,y);
                hold on
                axis(prubeh, [stav(1) stav(2) -1 1]);
                xlabel(prubeh, '{\itt} [s]');
                ylabel(prubeh, '{\itamplituda} [-]');
                    
                % --- zobrazeni kurzoru ---
                cursor = line([0 0], [-1 1], 'LineWidth', 2, 'Color', 'r');
                
                % --- prehravac ---
                player = audioplayer(y, Fs, nbits);
                set(player, 'TimerFcn', 'Tuner casomira', 'StopFcn', 'Tuner konecprehravani', 'TimerPeriod', 0.02)
                
            case('upraveno')
                % protichůdné tlačítko
                set(findobj('Tag', 'Originalbut'), 'Value', 0, 'Enable', 'on');
                set(findobj('Tag', 'Upravenobut'), 'Enable', 'inactive');
                
                % zjištění aktuálních mezí osy x
                stav = get(prubeh, 'xlim');
                
                % --- zobrazení průběhu ---
                set(F,'CurrentAxes', prubeh)
                cla(prubeh, 'reset');
                    
                t = 0:1/Fs:(N-1)/Fs; % délka nahrávky [s]
                plot(prubeh, t,y2);
                hold on
                axis(prubeh, [stav(1) stav(2) -1 1]);
                xlabel(prubeh, '{\itt} [s]');
                ylabel(prubeh, '{\itamplituda} [-]');
                    
                % --- zobrazeni kurzoru ---
                cursor = line([0 0], [-1 1], 'LineWidth', 2, 'Color', 'r');
                
                % --- prehravac ---
                player = audioplayer(y2, Fs, nbits);
                set(player, 'TimerFcn', 'Tuner casomira', 'StopFcn', 'Tuner konecprehravani', 'TimerPeriod', 0.02)
                
            case('posuvprubehu')
                hodnota = get(findobj('Tag', 'Posuvprubehu'), 'Value'); % zjištění hodnoty z posuvníku
                stav = get(prubeh, 'xlim'); % zjištění aktuálních mezí osy x
                rozdil = (stav(2) - stav(1));
                
                % --- projeveni se v prubehu ---
                axis(prubeh, [hodnota hodnota+rozdil -1 1]);
                if get(findobj('Tag', 'Notybut'), 'Value') == 1
                    set(AX, 'xlim', [hodnota hodnota+rozdil]);
                else
                    xlim(pracokno, [hodnota hodnota+rozdil]);
                end

            case('oddaleni')
                stav = get(prubeh, 'xlim'); % zjištění aktuálních mezí osy x
                rozdil = (stav(2) - stav(1));
                
                if stav(1) == 0      % pokud je zobrazení průběhu na doraz v levo
                    stav(2) = (1/0.7) * stav(2);
                elseif stav(2) == (N-1)/Fs  % pokud je zobrazení na doraz v pravo
                    stav(1) = stav(2) - (rozdil * (1/0.7));
                else
                    stav(1) = stav(1) - (((rozdil*(1/0.7))-rozdil)/2);
                    stav(2) = stav(2) + (((rozdil*(1/0.7))-rozdil)/2);
                end
                
                % pokud dojde při oddalování k překročení mezí
                if stav(2) > (N-1)/Fs
                    stav(2) = (N-1)/Fs;
                end

                if stav(1) < 0
                    stav(1) = 0;
                end
                
                % --- nastavení posuvníku ---
                if ((N-1)/Fs)-(stav(2)-stav(1)) == 0    % defaultní hodnoty == maximální oddálení
                    maximum = 0.0001;
                    slider = [1 1];
                else
                    maximum = ((N-1)/Fs)-(stav(2)-stav(1));
                    slider = [0.1*(stav(2)-stav(1))/(N/Fs) 0.5*(stav(2)-stav(1))/(N/Fs)];
                end
              
                set(findobj('Tag', 'Posuvprubehu'), 'Value', stav(1), 'Max', maximum, 'SliderStep', slider);
                
                % --- projevení se v průběhu ---
                axis(prubeh, [stav(1) stav(2) -1 1]);
                if get(findobj('Tag', 'Notybut'), 'Value') == 1
                    set(AX, 'xlim', [stav(1) stav(2)]);
                else
                    xlim(pracokno, [stav(1) stav(2)]);
                end
                
            case('priblizeni')
                stav = get(prubeh, 'xlim');     % zjištění aktuálních mezí osy x
                rozdil = (stav(2) - stav(1));
                
                if stav(1) == 0     % pokud je zobrazení průběhu na doraz v levo
                    stav(2) = 0.7 * stav(2);
                elseif stav(2) == (N-1)/Fs  % pokud je zobrazení průběhu na doraz v pravo
                    stav(1) = (rozdil * 0.3) + stav(1);
                else
                    od = stav(1);
                    stav(1) = (rozdil*0.15) + od;
                    stav(2) = (rozdil*0.85) + od;
                end
               
                % --- nastavení posuvníku ---
                set(findobj('Tag', 'Posuvprubehu'), 'Value', stav(1), 'Max', ((N-1)/Fs)-(stav(2)-stav(1)), ...
                'SliderStep', [0.1*(stav(2)-stav(1))/(N/Fs) 0.5*(stav(2)-stav(1))/(N/Fs)]);
                
                % --- projevení se v průběhu ---
                axis(prubeh, [stav(1) stav(2) -1 1]);
                if get(findobj('Tag', 'Notybut'), 'Value') == 1
                    set(AX, 'xlim', [stav(1) stav(2)]);
                else
                    xlim(pracokno, [stav(1) stav(2)]);
                end
                
            case('play')
                play(player);
                set(findobj('Tag', 'Playbut'), 'Value', 1);
                set(findobj('Tag', 'Playbut'), 'enable', 'inactive');
                
                set(findobj('Tag', 'Stopbut'), 'enable', 'on');
                set(findobj('Tag', 'Pausebut'), 'enable', 'on');
                
                % --- maximální zmenšení velikosti průběhu ---
                axis(prubeh, [0 (N-1)/Fs -1 1]); % zmenšení průběhu
                if get(findobj('Tag', 'Notybut'), 'Value') == 1 % zmenšení průběhu analýzy
                    set(AX, 'xlim', [0 (N-1)/Fs]);
                else
                    xlim(pracokno, [0 (N-1)/Fs]);
                end
                
                % --- deaktivace kurzoru analyza ---
                set(findobj('Tag', 'Figure'), 'WindowButtonMotionFcn', ' ') % deaktivace reakce na pohyb myši po figure
                set(pracokno, 'ButtonDownFcn', ' ') % deaktivace reakce na stisk v ramci Axes
                
                % --- vynulování kurzoru ---
                kurzorx1 = -1; % hodnota polohy kurzoru na ose x mimo zobrazený rozsah
                kurzorx2 = -1;
                set(cursorprac1, 'xdata', [kurzorx1 kurzorx1]); % posun kurzoru mimo zobrazený rozsah
                set(cursorprac2, 'xdata', [kurzorx2 kurzorx2]);
                
                % --- zakázání změny velikosti průběhu ---
                set(findobj('Tag', 'Posuvprubehu'), 'Value', 0, 'Min', 0, 'Max', 0.0001, 'SliderStep', [1 1]);
                set(findobj('Tag', 'Priblizenibut'), 'enable', 'off');
                set(findobj('Tag', 'Oddalenibut'), 'enable', 'off');
                
                % --- zakázání analýzy ---
                set(findobj('Tag', 'Analyzovatbut'), 'enable', 'off');
                set(findobj('Tag', 'Reference'), 'enable', 'off');
                set(findobj('Tag', 'Odchylkatext'), 'enable', 'off');
                set(findobj('Tag', 'Odchylkakurzorcheck'), 'enable', 'off', 'Value', 0);
                set(findobj('Tag', 'Odchylka'), 'enable', 'off', 'String', '-');
                
                % --- zakázání doladění ---
                set(findobj('Tag', 'Doladitbut'), 'enable', 'off');
                set(findobj('Tag', 'Automatickyradio'), 'enable', 'off', 'Value', 1);
                set(findobj('Tag', 'Rucneradio'), 'enable', 'off', 'Value', 0);
                set(findobj('Tag', 'Notapresne'), 'enable', 'off', 'String', {'-'}, 'Value', 1);
                set(findobj('Tag', 'Pultonytext'), 'enable', 'off');
                set(findobj('Tag', 'Centytext'), 'enable', 'off');
                set(findobj('Tag', 'Posuvpultony'), 'enable', 'off', 'Value', 0, 'UserData', 0);
                set(findobj('Tag', 'Posuvcenty'), 'enable', 'off', 'Value', 0, 'UserData', 0);
                set(findobj('Tag', 'Pultony'), 'enable', 'off', 'String', '+0');
                set(findobj('Tag', 'Centy'), 'enable', 'off', 'String', '+0');
                set(findobj('Tag', 'Rozsahtext'), 'enable', 'off');
                set(findobj('Tag', 'Celeradio'), 'enable', 'off', 'Value', 1);
                set(findobj('Tag', 'Vyberradio'), 'enable', 'off', 'Value', 0);
                set(findobj('Tag', 'Rozsahkurzorcheck'), 'enable', 'off', 'Value', 0);
                
            case('stop')
                stop(player);
                
                set(findobj('Tag', 'Casomira'), 'String', '00:00.0');   % vynulování počítadla
                set(cursor, 'xdata', [0 0]);    % kurzor na začátek
                
                % --- povolení tlačítek přehrávače ---
                set(findobj('Tag', 'Playbut'), 'Value', 0);
                set(findobj('Tag', 'Pausebut'), 'Value', 0);
                set(findobj('Tag', 'Playbut'), 'enable', 'on');
                set(findobj('Tag', 'Stopbut'), 'enable', 'off');
                set(findobj('Tag', 'Pausebut'), 'enable', 'off');
                
                % --- povolení změny velikosti průběhu ---
                set(findobj('Tag', 'Priblizenibut'), 'enable', 'on');
                set(findobj('Tag', 'Oddalenibut'), 'enable', 'on');
                
                % --- povolení analýzy ---
                set(findobj('Tag', 'Analyzovatbut'), 'enable', 'on');
                set(findobj('Tag', 'Reference'), 'enable', 'on');
                if ~isempty(kmitocet)
                    set(findobj('Tag', 'Odchylkatext'), 'enable', 'on');
                    set(findobj('Tag', 'Odchylkakurzorcheck'), 'enable', 'on');
                    set(findobj('Tag', 'Odchylka'), 'enable', 'on');
                end
                
                % --- povolení doladění ---
                if ~isempty(kmitocet)
                    set(findobj('Tag', 'Doladitbut'), 'enable', 'on');
                    set(findobj('Tag', 'Automatickyradio'), 'enable', 'on');
                    set(findobj('Tag', 'Rucneradio'), 'enable', 'on');
                    set(findobj('Tag', 'Notapresne'), 'enable', 'off');
                    set(findobj('Tag', 'Pultonytext'), 'enable', 'off');
                    set(findobj('Tag', 'Centytext'), 'enable', 'off');
                    set(findobj('Tag', 'Posuvpultony'), 'enable', 'off');
                    set(findobj('Tag', 'Posuvcenty'), 'enable', 'off');
                    set(findobj('Tag', 'Pultony'), 'enable', 'off');
                    set(findobj('Tag', 'Centy'), 'enable', 'off');
                    set(findobj('Tag', 'Rozsahtext'), 'enable', 'on');
                    set(findobj('Tag', 'Celeradio'), 'enable', 'on');
                    set(findobj('Tag', 'Vyberradio'), 'enable', 'on');
                end
                
            case('konecprehravani')     % slouží hlavně pokud samovolně dohraje zvukový soubor
                if get(findobj('Tag', 'Pausebut'), 'Value') == 0    % pokud není pauslé přehrávání
                    set(findobj('Tag', 'Casomira'), 'String', '00:00.0');   % vynulování počítadla
                    set(cursor, 'xdata', [0 0]);    % kurzor na začátek
                    
                    % --- povolení tlačítek přehrávače ---
                    set(findobj('Tag', 'Playbut'), 'Value', 0);
                    set(findobj('Tag', 'Playbut'), 'enable', 'on');
                    set(findobj('Tag', 'Stopbut'), 'enable', 'off');
                    set(findobj('Tag', 'Pausebut'), 'enable', 'off');
                    
                    % --- povolení změny velikosti průběhu ---
                    set(findobj('Tag', 'Priblizenibut'), 'enable', 'on');
                    set(findobj('Tag', 'Oddalenibut'), 'enable', 'on');
                    
                    % --- povolení analýzy ---
                    set(findobj('Tag', 'Analyzovatbut'), 'enable', 'on');
                    set(findobj('Tag', 'Reference'), 'enable', 'on');
                    if ~isempty(kmitocet)
                        set(findobj('Tag', 'Odchylkatext'), 'enable', 'on');
                        set(findobj('Tag', 'Odchylkakurzorcheck'), 'enable', 'on');
                        set(findobj('Tag', 'Odchylka'), 'enable', 'on');
                    end
                    
                    % --- povolení doladění ---
                    if ~isempty(kmitocet)
                        set(findobj('Tag', 'Doladitbut'), 'enable', 'on');
                        set(findobj('Tag', 'Automatickyradio'), 'enable', 'on');
                        set(findobj('Tag', 'Rucneradio'), 'enable', 'on');
                        set(findobj('Tag', 'Notapresne'), 'enable', 'off');
                        set(findobj('Tag', 'Pultonytext'), 'enable', 'off');
                        set(findobj('Tag', 'Centytext'), 'enable', 'off');
                        set(findobj('Tag', 'Posuvpultony'), 'enable', 'off');
                        set(findobj('Tag', 'Posuvcenty'), 'enable', 'off');
                        set(findobj('Tag', 'Pultony'), 'enable', 'off');
                        set(findobj('Tag', 'Centy'), 'enable', 'off');
                        set(findobj('Tag', 'Rozsahtext'), 'enable', 'on');
                        set(findobj('Tag', 'Celeradio'), 'enable', 'on');
                        set(findobj('Tag', 'Vyberradio'), 'enable', 'on');
                    end
                end
            
            case('pause')
                if isplaying(player)
                    pause(player);
                else
                    resume(player);
                end
                
            case('casomira')
                cs=get(player,'CurrentSample'); % aktuální přehrávaný vzorek
                casomira = cs * delkaN;  % aktuální čas v sekundách
                
                set(cursor, 'xdata', [casomira, casomira]); % posun kurzoru
                
                minuty = floor(casomira/60);     % přepočet na minuty a sekundy
                sekundy = casomira - (minuty * 60);

                casomira = sprintf('%02d:%04.1f', minuty, sekundy);   % vypsání akutálního času
                set(findobj('Tag', 'Casomira'), 'String', casomira);
            
            case('analyzovat')
                reference = str2double(get(findobj('Tag', 'Reference'), 'String')); % zjištění nastavené hodnoty reference
                
                % volání funkce pro provedení analýzy
                if get(findobj('Tag', 'Upravenobut'), 'Value') == 1 % jestli analyzovat originální nebo doladěný průběh
                    [kmitocet, noty, tanalyza, pulsy] = Analyza(y2, Fs, reference);
                    
                    oranal = 0; % indikuje, že orginální signál není analyzovaný
                    upanal = 1; % indikuje, že byl analyzován již jednou doladěný signál
                else
                    [kmitocet, noty, tanalyza, pulsy] = Analyza(y, Fs, reference);
                    
                    oranal = 1; % indikuje, že byl analyzován originální signál
                    upanal = 0; % indikuje, že doladěný signál není analyzovaný
                end
                    
                % --- průběh detekovaného kmitočtu ---
                set(F,'CurrentAxes',pracokno);
                cla(pracokno, 'reset');
                    
                plot(tanalyza, kmitocet, 'r', 'LineWidth', 2, 'HitTest', 'off');  % průběh kmitočtu
                                                                           % HitTest - aby se daly odečíst souřadnice, když bude myš přímo nad průběhem
                
                % --- vykreslení vynulovaných kurzorů (mimo zobrazovaný rozsah) ---
                kurzorx1 = -1; % hodnota polohy kurzoru na ose x mimo zobrazený rozsah
                kurzorx2 = -1;
                cursorprac1 = line([kurzorx1 kurzorx1], [0 1100], 'LineWidth', 2, 'Color', 'green', 'HitTest', 'off'); % vykreslení kurzoru pro výběr (mimo zobrazený rozsah)
                cursorprac2 = line([kurzorx2 kurzorx2], [0 1100], 'LineWidth', 2, 'Color', 'green', 'HitTest', 'off');
                    
                set(pracokno, 'YTickMode', 'auto', 'YTickLabelMode', 'auto', 'YGrid', 'on', 'YMinorGrid', 'on', ...
                    'GridLineStyle', '-');
                    
                % přizpůsobení rozsahu osy y podle obsahu
                rozdil = 0.1*(max(kmitocet) - min(kmitocet(kmitocet ~= -50)));
                
                if (min(kmitocet(kmitocet ~= -50))-rozdil) < 80
                    minimum = 0;
                else
                    minimum = min(kmitocet(kmitocet ~= -50))-rozdil;
                end
                
                if (max(kmitocet)+rozdil) > 1100
                    maximum = 1100;
                else
                    maximum = max(kmitocet)+rozdil;
                end
                   
                if minimum(1) ~= maximum(1)
                    ylim(pracokno, [minimum(1) maximum(1)]);
                end
                    
                % rozsah osy x
                stav = get(prubeh, 'xlim');     % zjištění aktuálních mezí osy x z prubehu analyzovaného signálu
                xlim(pracokno, [stav(1) stav(2)]);
                    
                % popisky os
                xlabel(pracokno, '{\itt} [s]');
                ylabel(pracokno, '{\itf} [Hz]');
                
                % --- deaktivace kurzoru analyza ---
                set(findobj('Tag', 'Figure'), 'WindowButtonMotionFcn', ' ') % deaktivace reakce na pohyb myši po figure
                set(pracokno, 'ButtonDownFcn', ' ') % deaktivace reakce na stisk v ramci Axes
                set(findobj('Tag', 'Figure'), 'Pointer', 'arrow') % v ramci figure nastavuje misto krize sipku
                
                % --- povolení měření odchylky ---
                set(findobj('Tag', 'Odchylkatext'), 'enable', 'on');
                set(findobj('Tag', 'Odchylkakurzorcheck'), 'enable', 'on', 'Value', 0);
                set(findobj('Tag', 'Odchylka'), 'enable', 'on', 'String', '-');
                
                % --- povolení zobrazení kmitočtu i not ---
                set(findobj('Tag', 'Kmitocetbut'), 'enable', 'inactive', 'Value', 1);
                set(findobj('Tag', 'Notybut'), 'enable', 'on', 'Value', 0);
                
                % --- povolení doladění ---
                set(findobj('Tag', 'Automatickyradio'), 'enable', 'inactive', 'Value', 1);
                set(findobj('Tag', 'Rucneradio'), 'enable', 'on', 'Value', 0);
                set(findobj('Tag', 'Doladitbut'), 'enable', 'on');
                set(findobj('Tag', 'Notapresne'), 'enable', 'off', 'String', {'-'}, 'Value', 1);
                set(findobj('Tag', 'Pultonytext'), 'enable', 'off');
                set(findobj('Tag', 'Centytext'), 'enable', 'off');
                set(findobj('Tag', 'Posuvpultony'), 'enable', 'off', 'Value', 0, 'UserData', 0);
                set(findobj('Tag', 'Posuvcenty'), 'enable', 'off', 'Value', 0, 'UserData', 0);
                set(findobj('Tag', 'Pultony'), 'enable', 'off', 'String', '+0');
                set(findobj('Tag', 'Centy'), 'enable', 'off', 'String', '+0');
                set(findobj('Tag', 'Rozsahtext'), 'enable', 'on');
                set(findobj('Tag', 'Celeradio'), 'enable', 'inactive', 'Value', 1);
                set(findobj('Tag', 'Vyberradio'), 'enable', 'on', 'Value', 0);
                set(findobj('Tag', 'Rozsahkurzorcheck'), 'Enable', 'off', 'Value', 0);
            
            case('kurzoranalyzacheck')
                if get(findobj('Tag', 'Odchylkakurzorcheck'), 'Value') == 1
                    % --- nastavení reakce myši ---
                    set(findobj('Tag', 'Figure'), 'WindowButtonMotionFcn', 'Tuner kurzorpohyb') % aktivace reakce na pohyb myši po figure
                    set(pracokno, 'ButtonDownFcn', 'Tuner kurzoranalyzaklik') % aktivace reakce na stisk v ramci Axes
                    
                    set(findobj('Tag', 'Rozsahkurzorcheck'), 'Value', 0); % zrušení fajky pro kurzor v doladění
                    
                    % --- vynulování kurzoru ---
                    kurzorx1 = -1; % hodnota polohy kurzoru na ose x mimo zobrazený rozsah
                    kurzorx2 = -1;
                    set(cursorprac1, 'xdata', [kurzorx1 kurzorx1]); % posun kurzoru mimo zobrazený rozsah
                    set(cursorprac2, 'xdata', [kurzorx2 kurzorx2]);
                    
                else
                    % --- deaktivace reakce myši ---
                    set(findobj('Tag', 'Figure'), 'WindowButtonMotionFcn', ' ') % deaktivace reakce na pohyb myši po figure
                    set(findobj('Tag', 'Odchylka'), 'String', '-'); % zobrazovaná odchylka se deaktivuje
                    set(pracokno, 'ButtonDownFcn', ' ') % deaktivace reakce na stisk v ramci Axes
                    
                    % --- vynulování kurzoru ---
                    kurzorx1 = -1; % hodnota polohy kurzoru na ose x mimo zobrazený rozsah
                    kurzorx2 = -1;
                    set(cursorprac1, 'xdata', [kurzorx1 kurzorx1]); % posun kurzoru mimo zobrazený rozsah
                    set(cursorprac2, 'xdata', [kurzorx2 kurzorx2]);
                end
                    
            case('kurzorpohyb') % pouze mění typ kurzoru nad pracovním oknem na křížek
                smysi = get(findobj('Tag', 'Figure'), 'CurrentPoint'); % souřadnice myši v rámci Figure
                saxes = get(pracokno, 'position'); % souřadnice axes pracokno
                
                % změna kurzoru ze šipky na kříž, pokud je nad axes pracokno
                if (smysi(1) >= saxes(1)) & (smysi(2) >= saxes(2)) & (smysi(1) <= saxes(1)+saxes(3)) & (smysi(2) <= saxes(2)+saxes(4))
                    set(findobj('Tag', 'Figure'), 'Pointer', 'crosshair') % v ramci figure nastavuje misto šipky kriz
                else
                    set(findobj('Tag', 'Figure'), 'Pointer', 'arrow') % v ramci figure nastavuje misto krize sipku
                end
                
            case('kurzoranalyzaklik')
                smysi = get(findobj('Tag', 'Figure'), 'CurrentPoint'); % souřadnice myši v rámci Figure
                saxes = get(pracokno, 'position'); % souřadnice axes pracokno
                
                set(F,'CurrentAxes', pracokno)
                stavx = get(pracokno, 'xlim');  % zjištění aktuálních mezí os axes pracokno
                
                kurzorx1 = stavx(1)+(((stavx(2)-stavx(1))*(smysi(1)-saxes(1)))/saxes(3)); % kliknutá pozice na ose x v axes pracokno [s]
               
                set(cursorprac1, 'xdata', [kurzorx1 kurzorx1]); % posun kurzoru
             
                nazevnot = {'D#' 'E' 'F' 'F#' 'G' 'G#' 'A' 'A#' 'H' ... % název not pro pozdější nahrazení za index
                'c' 'c#' 'd' 'd#' 'e' 'f' 'f#' 'g' 'g#' 'a' 'a#' 'h' ...
                'c1' 'c#1' 'd1' 'd#1' 'e1' 'f1' 'f#1' 'g1' 'g#1' 'a1' 'a#1' 'h1'...
                'c2' 'c#2' 'd2' 'd#2' 'e2' 'f2' 'f#2' 'g2' 'g#2' 'a2' 'a#2' 'h2' 'c3' 'c#3'};
                
                f = kmitocet(round((length(tanalyza)/tanalyza(end))*kurzorx1)); % detekovaný kmitočet v kliknutém místě
                
                if (f >= 82) & (f <= 1046) % pokud je kliknuto na možný kmitočet
                    index = 12*log2(f/str2double(get(findobj('Tag', 'Reference'), 'String'))); % přepočet frekvence na index
                    nota = nazevnot{round(index + 31)}; % nahrazení zaokrouhlené celé části za název noty
                    cent = (index - round(index))*100; % zbytek po zaokrouhlení přepočítán na centy
                
                    if abs(cent) == 1 % správná koncovka slova cent
                        jednotka = 'cent';
                    elseif (abs(round(cent)) >= 2) & (abs(round(cent)) <= 4)
                            jednotka = 'centy';
                    else
                        jednotka = 'centů';
                    end                    
                    
                    odchylka = sprintf('%s %+.0f %s', nota, cent, jednotka); % formátování
                    set(findobj('Tag', 'Odchylka'), 'String', odchylka) % vypsání odchylky
                else
                    set(findobj('Tag', 'Odchylka'), 'String', '-') % deaktivování vypsané odchylky
                end
                    
            case('kmitocet')
                set(findobj('Tag', 'Notybut'), 'Enable', 'on', 'Value', 0); % vymáčknutí protichodného tlačítka
                set(findobj('Tag', 'Kmitocetbut'), 'Enable', 'inactive');
                
                % --- průběh detekovaného kmitočtu ---
                set(F,'CurrentAxes',pracokno);
                cla(pracokno, 'reset');
                
                plot(tanalyza, kmitocet,'r','LineWidth',2, 'HitTest', 'off');  % průběh kmitočtu
                                                                        % HitTest - aby se daly odečíst souřadnice, když bude myš přímo nad průběhem
                
                cursorprac1 = line([kurzorx1 kurzorx1], [0 1100], 'LineWidth', 2, 'Color', 'green', 'HitTest', 'off'); % vykreslení kurzoru 1 pro výběr
                cursorprac2 = line([kurzorx2 kurzorx2], [0 1100], 'LineWidth', 2, 'Color', 'green', 'HitTest', 'off'); % vykreslení kurzoru 2 pro výběr

                set(pracokno, 'YTickMode', 'auto', 'YTickLabelMode', 'auto', 'YGrid', 'on', 'YMinorGrid', 'on', ...
                    'GridLineStyle', '-'); % zpět číselné popisky Y osy
                
                % přizpůsobení rozsahu osy y podle obsahu
                rozdil = 0.1*(max(kmitocet) - min(kmitocet(kmitocet >= 80)));
                
                if (min(kmitocet(kmitocet >= 80))-rozdil) < 80
                    minimum = 0;
                else
                    minimum = min(kmitocet(kmitocet >= 80))-rozdil;
                end
                
                if (max(kmitocet)+rozdil) > 1100
                    maximum = 1100;
                else
                    maximum = max(kmitocet)+rozdil;
                end
                
                if minimum(1) ~= maximum(1)
                    ylim(pracokno, [minimum(1) maximum(1)]);
                end
                
                % rozsah osy x
                stav = get(prubeh, 'xlim');     % zjištění aktuálních mezí osy x z prubehu analyzovaného signálu
                xlim(pracokno, [stav(1) stav(2)]);
                
                % popisky os
                xlabel(pracokno, '{\itt} [s]');
                ylabel(pracokno, '{\itf} [Hz]');
                
                % aktivace reakce na stisk v ramci Axes
                if get(findobj('Tag', 'Odchylkakurzorcheck'), 'Value') == 1 % pokud je zatrhlý checkbox na kurzor analyza
                    set(pracokno, 'ButtonDownFcn', 'Tuner kurzoranalyzaklik')
                elseif get(findobj('Tag', 'Rozsahkurzorcheck'), 'Value') == 1 % pokud je zatrhlý checkbox na kurzor doladění
                    set(pracokno, 'ButtonDownFcn', 'Tuner kurzordoladeniklik')
                end
                
            case('noty')
                set(findobj('Tag', 'Kmitocetbut'), 'Enable', 'on', 'Value', 0); % vymáčknutí protichodného tlačítka
                set(findobj('Tag', 'Notybut'), 'Enable', 'inactive');
                
                % --- průběh odpovídajících nejbližších not ---
                set(F,'CurrentAxes',pracokno);
                cla(pracokno, 'reset');
                
                % --- průběh not ---
                [AX,H1,H2] = plotyy(tanalyza, noty, tanalyza, noty, @stairs, @stairs);
                set(H1, 'Color', 'r', 'LineWidth',2, 'HitTest', 'off'); % HitTest - aby se daly odečíst souřadnice, když bude myš přímo nad průběhem
                set(H2, 'Color', 'r', 'LineWidth',2, 'HitTest', 'off');
                
                cursorprac1 = line([kurzorx1 kurzorx1], [-30 16], 'LineWidth', 2, 'Color', 'green', 'HitTest', 'off'); % vykreslení kurzoru 1 pro výběr
                cursorprac2 = line([kurzorx2 kurzorx2], [-30 16], 'LineWidth', 2, 'Color', 'green', 'HitTest', 'off'); % vykreslení kurzoru 2 pro výběr
                
                % --- hodnoty Y-osy ---
                YTick1 = [-29 -28 -26 -24 -22 -21 -19 -17 -16 -14 -12 -10 -9 -7 -5 -4 -2 0 2 3 5 7 8 10 12 14 15];
                YTickLabel1 = {'E' 'F' 'G' 'A' 'H' 'c' 'd' 'e' 'f' 'g' 'a' 'h' 'c1' 'd1' 'e1' 'f1' 'g1' 'a1' 'h1' ...
                              'c2' 'd2' 'e2' 'f2' 'g2' 'a2' 'h2' 'c3'};

                YTick2 = [-30 -27 -25 -23 -20 -18 -15 -13 -11 -8 -6 -3 -1 1 4 6 9 11 13 16];
                YTickLabel2 = {'D#' 'F#' 'G#' 'A#' 'c#' 'd#' 'f#' 'g#' 'a#' 'c#1' 'd#1' 'f#1' 'g#1' 'a#1' 'c#2' 'd#2' ...
                    'f#2' 'g#2' 'a#2' 'c#3'};
                
                set(AX(1), 'YTick', YTick1, 'YTickLabel', YTickLabel1, 'YGrid', 'on', 'GridLineStyle', '-', 'YColor', 'black'); 
                set(AX(2), 'YTick', YTick2, 'YTickLabel', YTickLabel2, 'YGrid', 'on', 'YColor', 'black'); 
                
                % přizpůsobení rozsahu osy y podle obsahu
                if (min(noty(noty >= -30))-1) < -30
                    minimum = -30;
                else
                    minimum = min(noty(noty >= -30))-1;
                end
                
                if (max(noty)+1) > 16
                    maximum = 16;
                else
                    maximum = max(noty)+1;
                end
                
                if minimum(1) ~= maximum(1)
                    set(AX(1), 'ylim', [minimum(1) maximum(1)]);
                    set(AX(2), 'ylim', [minimum(1) maximum(1)]);
                end
                    
                % rozsah osy x
                stav = get(prubeh, 'xlim');     % zjištění aktuálních mezí osy x z prubehu analyzovaného signálu
                set(AX, 'xlim', [stav(1) stav(2)]);
                
                % popis os
                set(get(AX(1),'Ylabel'), 'String', '{\itnota}')
                xlabel(pracokno, '{\itt} [s]');
                
                % aktivace reakce na stisk v ramci Axes
                if get(findobj('Tag', 'Odchylkakurzorcheck'), 'Value') == 1 % pokud je zatrhlý checkbox na kurzor analyza
                    set(pracokno, 'ButtonDownFcn', 'Tuner kurzoranalyzaklik')
                elseif get(findobj('Tag', 'Rozsahkurzorcheck'), 'Value') == 1 % pokud je zatrhlý checkbox na kurzor doladění
                    set(pracokno, 'ButtonDownFcn', 'Tuner kurzordoladeniklik')
                end
                
            case('automaticky')
                % --- nastavení protichudného radio ---
                set(findobj('Tag', 'Rucneradio'), 'Value', 0);
                set(findobj('Tag', 'Automatickyradio'), 'Enable', 'inactive');
                set(findobj('Tag', 'Rucneradio'), 'Enable', 'on');
                
                % --- zakázání uicontrol pro ruční nastavení hodnoty ---
                set(findobj('Tag', 'Notapresne'), 'Enable', 'off', 'String', {'-'}, 'Value', 1);
                set(findobj('Tag', 'Pultonytext'), 'Enable', 'off');
                set(findobj('Tag', 'Centytext'), 'Enable', 'off');
                set(findobj('Tag', 'Posuvpultony'), 'Enable', 'off', 'Value', 0, 'UserData', 0);
                set(findobj('Tag', 'Posuvcenty'), 'Enable', 'off', 'Value', 0, 'UserData', 0);
                set(findobj('Tag', 'Pultony'), 'Enable', 'off', 'String', '+0');
                set(findobj('Tag', 'Centy'), 'Enable', 'off', 'String', '+0');               
                
            case('rucne')
                % --- nastavení protichudného radio ---
                set(findobj('Tag', 'Automatickyradio'), 'Value', 0);
                set(findobj('Tag', 'Rucneradio'), 'Enable', 'inactive');
                set(findobj('Tag', 'Automatickyradio'), 'Enable', 'on');
                
                % --- povolení uicontrol pro ruční nastavení hodnoty ---
                set(findobj('Tag', 'Notapresne'), 'Enable', 'on');
                set(findobj('Tag', 'Pultonytext'), 'Enable', 'on');
                set(findobj('Tag', 'Centytext'), 'Enable', 'on');
                set(findobj('Tag', 'Posuvpultony'), 'Enable', 'on');
                set(findobj('Tag', 'Posuvcenty'), 'Enable', 'on');
                set(findobj('Tag', 'Pultony'), 'Enable', 'on');
                set(findobj('Tag', 'Centy'), 'Enable', 'on');
                
                % --- naplnění pop-up menu ---
                if get(findobj('Tag', 'Celeradio'), 'Value') == 1
                    nazevnot = {'D#' 'E' 'F' 'F#' 'G' 'G#' 'A' 'A#' 'H' ... % název not pro vložení do pop-up menu
                    'c' 'c#' 'd' 'd#' 'e' 'f' 'f#' 'g' 'g#' 'a' 'a#' 'h' ...
                    'c1' 'c#1' 'd1' 'd#1' 'e1' 'f1' 'f#1' 'g1' 'g#1' 'a1' 'a#1' 'h1'...
                    'c2' 'c#2' 'd2' 'd#2' 'e2' 'f2' 'f#2' 'g2' 'g#2' 'a2' 'a#2' 'h2' 'c3' 'c#3'};
                    
                    % --- omezení na změnu kmitočtu max +- do 1 oktávy ---
                    maxnota = floor(12+12*log2((min(kmitocet(kmitocet > 0)))/str2double(get(findobj('Tag', 'Reference'), 'String'))));
                    minnota = ceil(-12+12*log2((max(kmitocet(kmitocet > 0)))/str2double(get(findobj('Tag', 'Reference'), 'String'))));

                    if minnota >= maxnota
                        set(findobj('Tag', 'Notapresne'), 'String', {'-'}, 'Value', 1);
                    else
                        if (maxnota+31) > length(nazevnot)
                            maxnota = length(nazevnot)-31;
                        end
                    
                        if (minnota+31) < 1
                            minnota = -30;
                        end
                    
                        set(findobj('Tag', 'Notapresne'), 'String', {'-' nazevnot{minnota+31:maxnota+31}}, 'Value', 1);
                    end
                elseif get(findobj('Tag', 'Vyberradio'), 'Value') == 1
                    if (kurzorx1) & (kurzorx2) == -1
                        set(findobj('Tag', 'Notapresne'), 'Enable', 'off', 'String', {'-'}, 'Value', 1);
                        set(findobj('Tag', 'Pultonytext'), 'Enable', 'off');
                        set(findobj('Tag', 'Centytext'), 'Enable', 'off');
                        set(findobj('Tag', 'Posuvpultony'), 'Enable', 'off', 'Value', 0, 'UserData', 0);
                        set(findobj('Tag', 'Posuvcenty'), 'Enable', 'off', 'Value', 0, 'UserData', 0);
                        set(findobj('Tag', 'Pultony'), 'Enable', 'off', 'String', '+0');
                        set(findobj('Tag', 'Centy'), 'Enable', 'off', 'String', '+0'); 
                    else
                        if kurzorx2 > kurzorx1
                            usekkmitoctu = kmitocet(kurzorx1/tanalyza(2):kurzorx2/tanalyza(2));
                        else
                            usekkmitoctu = kmitocet(kurzorx2/tanalyza(2):kurzorx1/tanalyza(2));
                        end
                    
                        nazevnot = {'D#' 'E' 'F' 'F#' 'G' 'G#' 'A' 'A#' 'H' ... % název not pro vložení do pop-up menu
                        'c' 'c#' 'd' 'd#' 'e' 'f' 'f#' 'g' 'g#' 'a' 'a#' 'h' ...
                        'c1' 'c#1' 'd1' 'd#1' 'e1' 'f1' 'f#1' 'g1' 'g#1' 'a1' 'a#1' 'h1'...
                        'c2' 'c#2' 'd2' 'd#2' 'e2' 'f2' 'f#2' 'g2' 'g#2' 'a2' 'a#2' 'h2' 'c3' 'c#3'};
                        
                        % --- omezení na změnu kmitočtu max +- do 1 oktávy ---
                        maxnota = floor(12+12*log2((min(usekkmitoctu(usekkmitoctu > 20)))/str2double(get(findobj('Tag', 'Reference'), 'String'))));
                        minnota = ceil(-12+12*log2((max(usekkmitoctu(usekkmitoctu > 20)))/str2double(get(findobj('Tag', 'Reference'), 'String'))));

                        if minnota >= maxnota
                            set(findobj('Tag', 'Notapresne'), 'String', {'-'}, 'Value', 1);
                        else
                            if (maxnota+31) > length(nazevnot)
                                maxnota = length(nazevnot)-31;
                            end
                    
                            if (minnota+31) < 1
                                minnota = -30;
                            end
                    
                            set(findobj('Tag', 'Notapresne'), 'String', {'-' nazevnot{minnota+31:maxnota+31}}, 'Value', 1);
                        end
                    
                        % při obou kliknutých kurzorech je povoleno nastavení
                        if get(findobj('Tag', 'Rucneradio'), 'Value') == 1 % využito jen při ručním nastavení
                            set(findobj('Tag', 'Notapresne'), 'Enable', 'on');
                            set(findobj('Tag', 'Pultonytext'), 'Enable', 'on');
                            set(findobj('Tag', 'Centytext'), 'Enable', 'on');
                            set(findobj('Tag', 'Posuvpultony'), 'Enable', 'on');
                            set(findobj('Tag', 'Posuvcenty'), 'Enable', 'on');
                            set(findobj('Tag', 'Pultony'), 'Enable', 'on');
                            set(findobj('Tag', 'Centy'), 'Enable', 'on');
                        end
                    end
                end
              
            case('doladit')
                % zjištění posunu
                if get(findobj('Tag', 'Automatickyradio'), 'Value') == 1
                    posun = [];
                elseif get(findobj('Tag', 'Rucneradio'), 'Value') == 1
                    if get(findobj('Tag', 'Notapresne'), 'Value') == 1
                        pultony = get(findobj('Tag', 'Posuvpultony'), 'Value');
                        centy = get(findobj('Tag', 'Posuvcenty'), 'Value');
                        posun = pultony + centy/100;
                    else
                        moznosti = get(findobj('Tag', 'Notapresne'), 'String');
                        posun = moznosti{get(findobj('Tag', 'Notapresne'), 'Value')};
                    end
                end
                
                % zjištění rozsahu
                if get(findobj('Tag', 'Celeradio'), 'Value') == 1
                    rozsah = [1 tanalyza(end)*Fs];
                elseif get(findobj('Tag', 'Vyberradio'), 'Value') == 1
                    if kurzorx2 >= kurzorx1 % je jedno pořadí kliknutí kurzorů
                        rozsah = [kurzorx1*Fs kurzorx2*Fs];
                    else
                        rozsah = [kurzorx2*Fs kurzorx1*Fs];
                    end
                end
                
                % volání funkce doladění
                if ((kurzorx1 == -1) | (kurzorx2 == -1)) & (get(findobj('Tag', 'Vyberradio'), 'Value') == 1)
                    msgbox('Pro doladění není určen rozsah pomocí kurzorů!', 'Chyba!', 'error', 'modal');
                else
                    if get(findobj('Tag', 'Upravenobut'), 'Value') == 1 % jestli doladit už dříve doladěný průběh
                        if upanal == 1 % pokud byla provedena analýza již jednou doladěného signálu
                            y2 = Doladeni(y2, Fs, pulsy, kmitocet, posun, rozsah); % funkce pro doladění
                            
                            % povolení použití nového signálu
                            set(findobj('Tag', 'Upravenobut'), 'Enable', 'on');
                            set(findobj('Tag', 'Ulozit'), 'Enable', 'on');
                                
                            % zobrazení nového průběhu
                            Tuner('upraveno');
                            set(findobj('Tag', 'Upravenobut'), 'Value', 1);
                            
                            upanal = 0; % pro opětovné doladění je potřeba nová analýza
                        else
                            otazka = questdlg({'Nejprve je potřeba provést novou analýzu a teprve pak lze signál dolaďovat.' ...
                                               ' ' ...
                                               'Chcete provést analýzu?'}, 'Provést analýzu?', 'Ano', 'Ne', 'Ano');
                            % pokud je odpověď ano, provede se analýza
                            if strcmp('Ano', otazka)
                                Tuner('analyzovat');
                            end
                        end
                       
                    else % jestli doladit originální průběh
                        if oranal == 1 % pokud byla provedena analýza již jednou doladěného signálu
                            y2 = Doladeni(y, Fs, pulsy, kmitocet, posun, rozsah); % funkce pro doladění
                            
                            % povolení použití nového signálu
                            set(findobj('Tag', 'Upravenobut'), 'Enable', 'on');
                            set(findobj('Tag', 'Ulozit'), 'Enable', 'on');
                                
                            % zobrazení nového průběhu
                            Tuner('upraveno');
                            set(findobj('Tag', 'Upravenobut'), 'Value', 1);
                            
                            oranal = 0; % pro opětovné doladění je potřeba nová analýza
                        else
                            otazka = questdlg({'Nejprve je potřeba provést novou analýzu a teprve pak lze signál dolaďovat.' ...
                                               ' ' ...
                                               'Chcete provést analýzu?'},'Provést analýzu?', 'Ano', 'Ne', 'Ano');
                            % pokud je odpověď ano, provede se analýza
                            if strcmp('Ano', otazka)
                                Tuner('analyzovat');
                            end
                        end
                    end
                end
                
            case('posuvpultony')
                pultony = round(get(findobj('Tag', 'Posuvpultony'), 'Value')); % zjištění hodnoty z posuvníku pultony
                centy = round(get(findobj('Tag', 'Posuvcenty'), 'Value')); % zjištění hodnoty z posuvníku centy
                
                if abs(pultony + (centy/100)) < 12
                    set(findobj('Tag', 'Posuvpultony'), 'Value', pultony); % nastavení na posuvníku zaokrouhlenou hodnotu
                    set(findobj('Tag', 'Pultony'), 'String', sprintf('%+d', pultony)); % vypsání nastavené hodnoty
                    
                    set(findobj('Tag', 'Posuvpultony'), 'UserData', pultony); % uložení aktuální polohy pro pozdější použití
                    
                else
                    pultonystare = round(get(findobj('Tag', 'Posuvpultony'), 'UserData')); % zjištění původní hodnoty z posuvníku pultony
                    set(findobj('Tag', 'Posuvpultony'), 'Value', pultonystare); % nastavení na posuvníku puvodni hodnotu
                end
                
            case('posuvcenty')
                pultony = round(get(findobj('Tag', 'Posuvpultony'), 'Value')); % zjištění hodnoty z posuvníku pultony
                centy = round(get(findobj('Tag', 'Posuvcenty'), 'Value')); % zjištění hodnoty z posuvníku centy
                
                if abs(pultony + (centy/100)) < 12
                    set(findobj('Tag', 'Posuvcenty'), 'Value', centy); % nastavení na posuvníku zaokrouhlenou hodnotu
                    set(findobj('Tag', 'Centy'), 'String', sprintf('%+d', centy)); % vypsání nastavené hodnoty
                    
                    set(findobj('Tag', 'Posuvcenty'), 'UserData', centy); % uložení aktuální polohy pro pozdější použití
                    
                else
                    centystare = round(get(findobj('Tag', 'Posuvcenty'), 'UserData')); % zjištění původní hodnoty z posuvníku centy
                    set(findobj('Tag', 'Posuvcenty'), 'Value', centystare); % nastavení na posuvníku puvodni hodnotu
                end
                
            case('cele')
                % --- nastavení protichudného radio ---
                set(findobj('Tag', 'Vyberradio'), 'Enable', 'on', 'Value', 0);
                set(findobj('Tag', 'Celeradio'), 'Enable', 'inactive');
                set(findobj('Tag', 'Rozsahkurzorcheck'), 'Enable', 'off', 'Value', 0);
                
                % --- deaktivace reakce myši ---
                if get(findobj('Tag', 'Rozsahkurzorcheck'), 'Value') == 1 % jen pokud byl zaplý kurzor pro rozsah
                    set(findobj('Tag', 'Figure'), 'WindowButtonMotionFcn', ' ') % deaktivace reakce na pohyb myši po figure
                    set(pracokno, 'ButtonDownFcn', ' ') % deaktivace reakce na stisk v ramci Axes
                end
                
                % --- vynulování kurzoru ---
                if get(findobj('Tag', 'Odchylkakurzorcheck'), 'Value') == 0 % pokud není aktivovaný kurzor pro měření odchylky
                    kurzorx1 = -1; % hodnota polohy kurzoru na ose x mimo zobrazený rozsah
                    kurzorx2 = -1;
                    set(cursorprac1, 'xdata', [kurzorx1 kurzorx1]); % posun kurzoru mimo zobrazený rozsah
                    set(cursorprac2, 'xdata', [kurzorx2 kurzorx2]);
                end
                
                if get(findobj('Tag', 'Rucneradio'), 'Value') == 1 % využito jen při ručním nastavení
                    % --- naplnění pop-up menu ---
                    nazevnot = {'D#' 'E' 'F' 'F#' 'G' 'G#' 'A' 'A#' 'H' ... % název not pro vložení do pop-up menu
                    'c' 'c#' 'd' 'd#' 'e' 'f' 'f#' 'g' 'g#' 'a' 'a#' 'h' ...
                    'c1' 'c#1' 'd1' 'd#1' 'e1' 'f1' 'f#1' 'g1' 'g#1' 'a1' 'a#1' 'h1'...
                    'c2' 'c#2' 'd2' 'd#2' 'e2' 'f2' 'f#2' 'g2' 'g#2' 'a2' 'a#2' 'h2' 'c3' 'c#3'};
                    
                    maxnota = floor(12+12*log2((min(kmitocet(kmitocet > 0)))/str2double(get(findobj('Tag', 'Reference'), 'String'))));
                    minnota = ceil(-12+12*log2((max(kmitocet(kmitocet > 0)))/str2double(get(findobj('Tag', 'Reference'), 'String'))));

                    if minnota >= maxnota
                        set(findobj('Tag', 'Notapresne'), 'String', {'-'}, 'Value', 1);
                    else
                        if (maxnota+31) > length(nazevnot)
                            maxnota = length(nazevnot)-31;
                        end
                    
                        if (minnota+31) < 1
                            minnota = -30;
                        end
                    
                        set(findobj('Tag', 'Notapresne'), 'String', {'-' nazevnot{minnota+31:maxnota+31}}, 'Value', 1);
                    end
                
                    % povolení nastavování požadovaných hodnot doladění
                    set(findobj('Tag', 'Notapresne'), 'Enable', 'on');
                    set(findobj('Tag', 'Pultonytext'), 'Enable', 'on');
                    set(findobj('Tag', 'Centytext'), 'Enable', 'on');
                    set(findobj('Tag', 'Posuvpultony'), 'Enable', 'on');
                    set(findobj('Tag', 'Posuvcenty'), 'Enable', 'on');
                    set(findobj('Tag', 'Pultony'), 'Enable', 'on');
                    set(findobj('Tag', 'Centy'), 'Enable', 'on');
                end
                
            case('vyber')
                % --- nastavení protichudného radio ---
                set(findobj('Tag', 'Celeradio'), 'Enable', 'on', 'Value', 0);
                set(findobj('Tag', 'Vyberradio'), 'Enable', 'inactive');
                set(findobj('Tag', 'Rozsahkurzorcheck'), 'Enable', 'on');
                
                % --- dokud se neprovede výběr kurzory, není povoleno ovládání ---
                set(findobj('Tag', 'Notapresne'), 'Enable', 'off', 'String', {'-'}, 'Value', 1);
                set(findobj('Tag', 'Pultonytext'), 'Enable', 'off');
                set(findobj('Tag', 'Centytext'), 'Enable', 'off');
                set(findobj('Tag', 'Posuvpultony'), 'Enable', 'off', 'Value', 0, 'UserData', 0);
                set(findobj('Tag', 'Posuvcenty'), 'Enable', 'off', 'Value', 0, 'UserData', 0);
                set(findobj('Tag', 'Pultony'), 'Enable', 'off', 'String', '+0');
                set(findobj('Tag', 'Centy'), 'Enable', 'off', 'String', '+0'); 
                
            case('kurzordoladenicheck')
                if get(findobj('Tag', 'Rozsahkurzorcheck'), 'Value') == 1
                    set(findobj('Tag', 'Figure'), 'WindowButtonMotionFcn', 'Tuner kurzorpohyb') % aktivace reakce na pohyb myši po figure
                    set(pracokno, 'ButtonDownFcn', 'Tuner kurzordoladeniklik') % aktivace reakce na stisk v ramci Axes
                    
                    set(findobj('Tag', 'Odchylka'), 'String', '-'); % zobrazovaná odchylka v analýze se deaktivuje
                    set(findobj('Tag', 'Odchylkakurzorcheck'), 'Value', 0); % zrušení fajky pro kurzor v analýze
                    
                    pocetklik = 1; % vynulování počtu kliknutí (pro dva kurzory)
                    
                    % --- vynulování kurzoru ---
                    kurzorx1 = -1; % hodnota polohy kurzoru na ose x mimo zobrazený rozsah
                    kurzorx2 = -1;
                    set(cursorprac1, 'xdata', [kurzorx1 kurzorx1]); % posun kurzoru mimo zobrazený rozsah
                    set(cursorprac2, 'xdata', [kurzorx2 kurzorx2]);
                    
                else
                    % --- deaktivace reakce myši ---
                    set(findobj('Tag', 'Figure'), 'WindowButtonMotionFcn', ' ') % deaktivace reakce na pohyb myši po figure
                    set(pracokno, 'ButtonDownFcn', ' ') % deaktivace reakce na stisk v ramci Axes
                    
                    % --- vynulování kurzoru ---
                    kurzorx1 = -1; % hodnota polohy kurzoru na ose x mimo zobrazený rozsah
                    kurzorx2 = -1;
                    set(cursorprac1, 'xdata', [kurzorx1 kurzorx1]); % posun kurzoru mimo zobrazený rozsah
                    set(cursorprac2, 'xdata', [kurzorx2 kurzorx2]);
                    
                    % deaktivace možnosti nastavení
                    if get(findobj('Tag', 'Rucneradio'), 'Value') == 1 % využito jen při ručním nastavení
                        set(findobj('Tag', 'Notapresne'), 'Enable', 'off', 'String', {'-'}, 'Value', 1);
                        set(findobj('Tag', 'Pultonytext'), 'Enable', 'off');
                        set(findobj('Tag', 'Centytext'), 'Enable', 'off');
                        set(findobj('Tag', 'Posuvpultony'), 'Enable', 'off', 'Value', 0, 'UserData', 0);
                        set(findobj('Tag', 'Posuvcenty'), 'Enable', 'off', 'Value', 0, 'UserData', 0);
                        set(findobj('Tag', 'Pultony'), 'Enable', 'off', 'String', '+0');
                        set(findobj('Tag', 'Centy'), 'Enable', 'off', 'String', '+0');
                    end
                end
            
            case('kurzordoladeniklik')
                smysi = get(findobj('Tag', 'Figure'), 'CurrentPoint'); % souřadnice myši v rámci Figure
                saxes = get(pracokno, 'position'); % souřadnice axes pracokno
                
                set(F,'CurrentAxes', pracokno)
                stavx = get(pracokno, 'xlim');  % zjištění aktuálních mezí os axes pracokno
                
                if pocetklik == 1
                    % --- vynulování kurzoru ---
                    kurzorx1 = -1; % hodnota polohy kurzoru na ose x mimo zobrazený rozsah
                    kurzorx2 = -1;
                    set(cursorprac1, 'xdata', [kurzorx1 kurzorx1]); % posun kurzoru mimo zobrazený rozsah
                    set(cursorprac2, 'xdata', [kurzorx2 kurzorx2]);
                    
                    % --- kreslení prvního kurzoru ---
                    kurzorx1 = stavx(1)+(((stavx(2)-stavx(1))*(smysi(1)-saxes(1)))/saxes(3)); % kliknutá pozice na ose x v axes pracokno [s]
                    set(cursorprac1, 'xdata', [kurzorx1 kurzorx1]); % posun kurzoru
                    
                    pocetklik = 2; % zvýšení pořadí kliknutí - pro druhý kurzor
                    
                    % dokud je kliknuto jen jedním kurzorem pro výběr, není povoleno ovládání 
                    if get(findobj('Tag', 'Rucneradio'), 'Value') == 1 % využito jen při ručním nastavení
                        set(findobj('Tag', 'Notapresne'), 'Enable', 'off', 'String', {'-'}, 'Value', 1);
                        set(findobj('Tag', 'Pultonytext'), 'Enable', 'off');
                        set(findobj('Tag', 'Centytext'), 'Enable', 'off');
                        set(findobj('Tag', 'Posuvpultony'), 'Enable', 'off', 'Value', 0, 'UserData', 0);
                        set(findobj('Tag', 'Posuvcenty'), 'Enable', 'off', 'Value', 0, 'UserData', 0);
                        set(findobj('Tag', 'Pultony'), 'Enable', 'off', 'String', '+0');
                        set(findobj('Tag', 'Centy'), 'Enable', 'off', 'String', '+0');
                    end
                    
                elseif pocetklik == 2
                    % --- kreslení druhého kurzoru ---
                    kurzorx2 = stavx(1)+(((stavx(2)-stavx(1))*(smysi(1)-saxes(1)))/saxes(3)); % kliknutá pozice na ose x v axes pracokno [s]
                    set(cursorprac2, 'xdata', [kurzorx2 kurzorx2]); % posun kurzoru
                    
                    pocetklik = 1; % snížení pořadí kliknutí - pro první kurzor
                
                    if kurzorx2 > kurzorx1 % je jedno pořadí kliknutí kurzorů
                        usekkmitoctu = kmitocet(kurzorx1/tanalyza(2):kurzorx2/tanalyza(2));
                    else
                        usekkmitoctu = kmitocet(kurzorx2/tanalyza(2):kurzorx1/tanalyza(2));
                    end
                    
                    nazevnot = {'D#' 'E' 'F' 'F#' 'G' 'G#' 'A' 'A#' 'H' ... % název not pro vložení do pop-up menu
                    'c' 'c#' 'd' 'd#' 'e' 'f' 'f#' 'g' 'g#' 'a' 'a#' 'h' ...
                    'c1' 'c#1' 'd1' 'd#1' 'e1' 'f1' 'f#1' 'g1' 'g#1' 'a1' 'a#1' 'h1'...
                    'c2' 'c#2' 'd2' 'd#2' 'e2' 'f2' 'f#2' 'g2' 'g#2' 'a2' 'a#2' 'h2' 'c3' 'c#3'};
                    
                    maxnota = floor(12+12*log2((min(usekkmitoctu(usekkmitoctu > 20)))/str2double(get(findobj('Tag', 'Reference'), 'String'))));
                    minnota = ceil(-12+12*log2((max(usekkmitoctu(usekkmitoctu > 20)))/str2double(get(findobj('Tag', 'Reference'), 'String'))));

                    if minnota >= maxnota
                        set(findobj('Tag', 'Notapresne'), 'String', {'-'}, 'Value', 1);
                    else
                        if (maxnota+31) > length(nazevnot)
                            maxnota = length(nazevnot)-31;
                        end
                    
                        if (minnota+31) < 1
                            minnota = -30;
                        end
                    
                        set(findobj('Tag', 'Notapresne'), 'String', {'-' nazevnot{minnota+31:maxnota+31}}, 'Value', 1);
                    end
                    
                    % při obou kliknutých kurzorech je povoleno nastavení
                    if get(findobj('Tag', 'Rucneradio'), 'Value') == 1 % využito jen při ručním nastavení
                        set(findobj('Tag', 'Notapresne'), 'Enable', 'on');
                        set(findobj('Tag', 'Pultonytext'), 'Enable', 'on');
                        set(findobj('Tag', 'Centytext'), 'Enable', 'on');
                        set(findobj('Tag', 'Posuvpultony'), 'Enable', 'on');
                        set(findobj('Tag', 'Posuvcenty'), 'Enable', 'on');
                        set(findobj('Tag', 'Pultony'), 'Enable', 'on');
                        set(findobj('Tag', 'Centy'), 'Enable', 'on');
                    end
                end
                
            case('notapresne') % pokud se zadává konkrétní nota, ruční posuv je zakázán
                if get(findobj('Tag', 'Notapresne'), 'Value') == 1
                    set(findobj('Tag', 'Pultonytext'), 'Enable', 'on');
                    set(findobj('Tag', 'Centytext'), 'Enable', 'on');
                    set(findobj('Tag', 'Posuvpultony'), 'Enable', 'on');
                    set(findobj('Tag', 'Posuvcenty'), 'Enable', 'on');
                    set(findobj('Tag', 'Pultony'), 'Enable', 'on');
                    set(findobj('Tag', 'Centy'), 'Enable', 'on');
                else
                     set(findobj('Tag', 'Pultonytext'), 'Enable', 'off');
                    set(findobj('Tag', 'Centytext'), 'Enable', 'off');
                    set(findobj('Tag', 'Posuvpultony'), 'Enable', 'off', 'Value', 0, 'UserData', 0);
                    set(findobj('Tag', 'Posuvcenty'), 'Enable', 'off', 'Value', 0, 'UserData', 0);
                    set(findobj('Tag', 'Pultony'), 'Enable', 'off', 'String', '+0');
                    set(findobj('Tag', 'Centy'), 'Enable', 'off', 'String', '+0');
                end  
                
            case('resize')  % nastavení velikosti a pozice jednotlivých položek při změně velikosti okna
                Okno = get(gcf, 'Position');
                          
                % --- panel informace o souboru ---
                set(findobj('Tag', 'Panelinfo'), 'Position', [0.05*Okno(3) (Okno(4)-65) 0.44*Okno(3) 55]);

                if (0.04*Okno(3) >= 45)
                    delka = 45;
                else
                    delka = 0.04*Okno(3);
                end
                set(findobj('Tag', 'Nazevnadpis'), 'Position', [0.058*Okno(3) (Okno(4)-45) delka 15]);
                set(findobj('Tag', 'Nazev'), 'Position', [(0.058*Okno(3)+delka+2) (Okno(4)-45) ...
                    (0.242*Okno(3)-delka-6) 15]);
                
                if (0.038*Okno(3) >= 42)
                    delka = 42;
                else
                    delka = 0.038*Okno(3);
                end
                set(findobj('Tag', 'Delkanadpis'), 'Position', [0.3*Okno(3) (Okno(4)-45) delka 15]);
                set(findobj('Tag', 'Delka'), 'Position', [(0.3*Okno(3)+ delka+2) (Okno(4)-45) ...
                    (0.19*Okno(3)-delka-8) 15]);
                
                if (0.117*Okno(3) >= 135)
                    delka = 135;
                else
                    delka = 0.117*Okno(3);
                end
                set(findobj('Tag', 'Vzorkovacikmitocetnadpis'), 'Position', [0.058*Okno(3) (Okno(4)-60) delka 15]);
                set(findobj('Tag', 'Vzorkovacikmitocet'), 'Position', [(0.058*Okno(3)+ delka+2) (Okno(4)-60) ...
                    (0.242*Okno(3)-delka-6) 15]);
                
                if (0.09*Okno(3) >= 100)
                    delka = 100;
                else
                    delka = 0.09*Okno(3);
                end
                set(findobj('Tag', 'Bitovahloubkanadpis'), 'Position', [0.3*Okno(3) (Okno(4)-60) delka 15]);
                set(findobj('Tag', 'Bitovahloubka'), 'Position', [(0.3*Okno(3)+ delka+2) (Okno(4)-60) ...
                    (0.19*Okno(3)-delka-8) 15]);          

                % --- panel přehrávání ---
                set(findobj('Tag', 'Panelprehravani'), 'Position', [0.51*Okno(3) (Okno(4)-65) 0.44*Okno(3) 55]);
                set(findobj('Tag', 'Casomira'), 'Position', [0.83*Okno(3) (Okno(4)-60) 0.1*Okno(3) 35]);
                set(findobj('Tag', 'Playbut'), 'Position', [0.63*Okno(3) (Okno(4)-57) 0.08*Okno(3) 25]);
                set(findobj('Tag', 'Pausebut'), 'Position', [0.73*Okno(3) (Okno(4)-57) 0.08*Okno(3) 25]);
                set(findobj('Tag', 'Stopbut'), 'Position', [0.53*Okno(3) (Okno(4)-57) 0.08*Okno(3) 25]);
                
                % --- zobrazeni prubehu ---
                if (0.4*Okno(4)-160) <= 0
                    vyska = 0.01;
                else
                    vyska = (0.4*Okno(4)-160);
                end
                set(prubeh, 'Position', [0.05*Okno(3) (0.6*Okno(4)+50) 0.9*Okno(3) vyska]);
                set(findobj('Tag', 'Originalbut'), 'Position', [0.05*Okno(3) (Okno(4)-100) 0.08*Okno(3) 25]);
                set(findobj('Tag', 'Upravenobut'), 'Position', [0.13*Okno(3) (Okno(4)-100) 0.08*Okno(3) 25]);
                set(findobj('Tag', 'Posuvprubehu'), 'Position', [0.22*Okno(3) (Okno(4)-100) 0.66*Okno(3) 25]);
                set(findobj('Tag', 'Oddalenibut'), 'Position', [0.89*Okno(3) (Okno(4)-100) 0.03*Okno(3) 25]);
                set(findobj('Tag', 'Priblizenibut'), 'Position', [0.92*Okno(3) (Okno(4)-100) 0.03*Okno(3) 25]);
                
                % --- pracovní okno ---
                if (0.6*Okno(4)-160) <= 0
                    vyska = 0.01;
                else
                    vyska = (0.6*Okno(4)-160);
                end
                set(pracokno, 'Position', [0.05*Okno(3) 150 0.9*Okno(3) vyska]);
                set(findobj('Tag', 'Kmitocetbut'), 'Position', [0.05*Okno(3) 0.6*Okno(4) 0.08*Okno(3) 25]);
                set(findobj('Tag', 'Notybut'), 'Position', [0.13*Okno(3) 0.6*Okno(4) 0.08*Okno(3) 25]);
                
                % --- panel analýza ---
                set(findobj('Tag', 'Panelanalyza'), 'Position', [0.05*Okno(3) 10 0.44*Okno(3) 100]);
                set(findobj('Tag', 'Analyzovatbut'), 'Position', [0.32*Okno(3) 50 0.12*Okno(3) 35]);
                
                if (0.09*Okno(3) >= 123)
                    delka = 123;
                else
                    delka = 0.09*Okno(3);
                end
                set(findobj('Tag', 'Odchylkatext'), 'Position', [0.06*Okno(3) 55 delka 20]);
                set(findobj('Tag', 'Odchylka'), 'Position', [(0.06*Okno(3)+delka+4) 53 (0.23*Okno(3)-delka-8) 30]);
                
                if (0.06*Okno(3) >= 82)
                    delka = 82;
                else
                    delka = 0.06*Okno(3);
                end
                set(findobj('Tag', 'Odchylkakurzorcheck'), 'Position', [0.06*Okno(3) 30 delka 20]);
                                
                if (0.075*Okno(3) >= 102)
                    delka = 102;
                else
                    delka = 0.075*Okno(3);
                end
                set(findobj('Tag', 'Referencetext'), 'Position', [0.315*Okno(3) 15 delka 19]);
                set(findobj('Tag', 'Reference'), 'Position', [(0.315*Okno(3)+delka+4) 15 (0.12*Okno(3)-delka-8) 20]);
                
                if (0.017*Okno(3) >= 23)
                    delka = 23;
                else
                    delka = 0.017*Okno(3);
                end
                set(findobj('Tag', 'Jednotkareferencetext'), 'Position', [0.435*Okno(3) 15 delka 20]);
                
                % --- panel doladění ---
                set(findobj('Tag', 'Paneldoladeni'), 'Position', [0.51*Okno(3) 10 0.44*Okno(3) 100]);
                
                if (0.080*Okno(3) >= 110)
                    delka = 110;
                else
                    delka = 0.080*Okno(3);
                end
                set(findobj('Tag', 'Automatickyradio'), 'Position', [0.52*Okno(3) 65 delka 20]);
                set(findobj('Tag', 'Rucneradio'), 'Position', [0.52*Okno(3)+delka+10 65 delka*0.6 20]);
                
                if (0.045*Okno(3) >= 62)
                    delka = 62;
                else
                    delka = 0.045*Okno(3);
                end
                set(findobj('Tag', 'Notapresne'), 'Position', [(0.52*Okno(3)+3.2*delka+4) 67 delka 20]);
                set(findobj('Tag', 'Pultonytext'), 'Position', [0.52*Okno(3) 38 delka 20]);
                set(findobj('Tag', 'Centytext'), 'Position', [0.52*Okno(3) 15 delka 20]);
                set(findobj('Tag', 'Posuvpultony'), 'Position', [(0.52*Okno(3)+delka+4) 38 3.2*delka 20]);
                set(findobj('Tag', 'Posuvcenty'), 'Position', [(0.52*Okno(3)+delka+4) 15 3.2*delka 20]);
                set(findobj('Tag', 'Pultony'), 'Position', [(0.52*Okno(3)+delka+3.2*delka+8) 38 0.8*delka 20]);
                set(findobj('Tag', 'Centy'), 'Position', [(0.52*Okno(3)+delka+3.2*delka+8) 15 0.8*delka 20]);               
                set(findobj('Tag', 'Rozsahtext'), 'Position', [0.75*Okno(3) 60 delka 20]);
                set(findobj('Tag', 'Celeradio'), 'Position', [0.75*Okno(3) 43 delka 20]);
                set(findobj('Tag', 'Vyberradio'), 'Position', [0.75*Okno(3) 25 1.1*delka 20]);
                set(findobj('Tag', 'Rozsahkurzorcheck'), 'Position', [0.8*Okno(3) 25 1.1*delka 20]);
                
                set(findobj('Tag', 'Doladitbut'), 'Position', [0.85*Okno(3) 50 0.08*Okno(3) 35]);
               
            case('navod')
                winopen('manual.pdf'); % otevře návod k programu v prohlížeči souborů pdf
            
            case('oprogramu')
                h = msgbox({'Tento program byl vytvořen v rámci řešení diplomové práce na téma Softwarový analyzátor a dolaďovač zaznamenaného vokálu na' ...
                        'Fakultě elektrotechniky a komunikačních technologií' ...
                        'Vysokého učení technického v Brně' ...
                        ' ' ...
                        'Autor: Tomáš Smatana' ...
                        ' ' ...
                        '2015'}, 'O programu', 'modal');
               
            case('konec')
                close all
        end
    end