function detekce(vstpar)

%Hlavni skript programu pro detekci a  analýzu dětského pláče
%--------------------------------------------------------------------------
%Bc.Šárka Sobotková                                     2013
%--------------------------------------------------------------------------
if nargin==0    % jestlize je funkce volana bez vstupniho parametru
    clc;        
    clear;
    handles.handleV2 = figure ('Name','Detektor dětského pláče',...                            % definice hl. figure
        'NumberTitle','off','Units','Normalized','Tag','figureV1',...
        'Color',[1 1 1], 'Visible', 'on','MenuBar', 'none',...
        'Position',[0.1 0.1 0.85 0.75]);
    handles.handleV1 = axes('Units','Normalized','NextPlot','new',...                          % definice okna pro vykresleni 
        'Color','k','Position',[0.225 0.42 0.35 0.52],...
        'Tag','axesV1','Visible', 'off'); 
    handles.handleV3 = axes('Units','Normalized','NextPlot','new',...                          % definice okna pro vykresleni 
        'Color','k','Position',[0.225 0.42 0.35 0.52],...
        'Tag','axesV3','Visible', 'on'); 
 

    
    % nacte obr do aplikace pri spusteni
    I=imread('image_smile','jpg'); % relativni cesta
    
    image(I);
    axis off          % Remove axis ticks and numbers
    axis image        % Set aspect ratio to obtain square pixels
    
    uicontrol('Style','frame','Units','normalized',...                      % modry ram kolem vypisu zdrojoveho textu
              'Position',[0.03 0.03 0.74 0.25], 'Tag', 'frameV1',...
              'BackgroundColor', [1 1 1]);
    uicontrol('Style','text','Units','normalized',...                       % text nadpisu pole pro vypis zdrojoveho textu
              'Position',[0.05 0.23 0.7 0.04],'BackgroundColor', [1 1 1],...
              'FontSize',9,'FontWeight','bold',...
              'ForegroundColor', [1 1 1], 'Tag','textV1',...
              'String','Nápověda');
   
    uicontrol('Style','frame','Units','normalized', 'Tag', 'frameV2',...     %  ram okolo voleb pro vyber
              'Position',[0.81 0.03 0.18 0.94], 'BackgroundColor', [1 1 1]);
          
    uicontrol('Style','push','Units','normalized','Tag','resetV',...         % tlacitko Reset
              'Position',[0.0 0.97 0.07 0.03], 'String','Reset',...         
              'BackgroundColor', 'red',...
              'Enable','on','Callback','detekce resetV'); 
          
    uicontrol('Style','push','Units','normalized','Tag','nacistdataV',...
              'Position',[0.83 0.54 0.14 0.06], 'String','Načíst data',...   % tlacitko Nacist data
              'Enable','on','Callback','detekce nacistdataV');   
              
    uicontrol('Style','push','Units','normalized','Tag','analyzaV',...
              'Position',[0.83 0.40 0.14 0.06], 'String','Analýza',...                  % tlacitko Analyza
              'Enable','off','Callback','detekce analyzaV');
                

    uicontrol('Style','push','Units','normalized',...                                   % tlacitko nápověda       
              'Position',[0.83 0.19 0.14 0.06],'String','Nápověda',...
              'Callback','detekce helpV','Tag','helpV');      
    uicontrol('Style','push','Units','normalized',...                                   % tlacitko informace       
              'Position',[0.83 0.12 0.14 0.06],'String','Informace',...
              'Callback','detekce infoV','Tag','infoV');  
    uicontrol('Style','push','Units','normalized',...                                   % tlacitko konec      
              'Position',[0.83 0.05 0.14 0.06],'Tag','konecV',...
              'String','Ukončení programu','Callback','detekce konecV');
          
    %------------------Vypis uvodu v poli pro vypis zdrojoveho textu-----------
    Vypis=str2mat(' ','     ',...
                      ' Pokud chcete pracovat s programem Detektor dětského pláče a nevite si rady, klikněte na tlačítko "Nápověda"');
    uicontrol('Style','edit','HorizontalAlignment','left',...                           % uicontrol pro vypis zdrojoveho textu
              'Units','normalized','Max',40,...
              'FontWeight','bold','BackgroundColor', [1 1 1],...
              'ForegroundColor', [0 0 0],'Position',[0.05 0.05 0.7 0.18],...
              'String',Vypis,'Tag','editV'); 
          
    %------------------Ulozi strukturu handles do WS---------------------------
    assignin('base', 'handles',handles); % jsou tam handles vsech axes a panelu  

%% ----------jestlize je funkce volana se vstupnim parametrem
else

switch(vstpar)                             % volano z prislusnych Callback    
    
    case ('helpV')
            Vypis=str2mat(...
                ' ',...
                'Vitejte v programu pro detekci a analýzu dětského pláče a postupujte podle doporučeni:',...
                '   ',...
                '1. Vyberte nahrávku ve formátu *.wav - tlačítko Načíst data   ',...
                '2. V průběhu analýzy může byt zapnutý/vypnutý zvukový záznam dětského pláče" ',...
                '3. Spusťte analýzu - tlačítko "Analýza" ',...
                '4. Zobrazte nebo uložte výsledky analýzy   ',...
                'Tlačítko Reset - návrat k výchozímu nastavení programu po spuštění  ',...
                'Tlačítko Ukončení programu - zavření programu a smazání proměnných z Workspace	');
            set(findobj('Tag','editV'),'String',Vypis); 
    case ('infoV')
            Vypis=str2mat(...
                'Aplikace využívá pro zobrazení GUI  metodu SwitchBoard Programming.',...
                '   ',...
                '   ',...
                '   ',...
                '	');
            set(findobj('Tag','editV'),'String',Vypis);                      % vlastni vypis Info v poli pro zdrojovy text 
            
    case ('nacistdataV')
%             delete (findobj('tag','axesV3'))                                 %vymaze axesV3 s uvodni fotkou
            
                %Okno - zvuk ano nebo ne
                prompt = {'Zapnout zvuk (1 - ANO, 0 - NE)' };
                dlg_title = 'Zvuk';
                num_lines = 1;
                def = {'1'}; % preddefinovana hodnota 
                answer = inputdlg(prompt,dlg_title,num_lines,def); % vystup

            %   parametry sítě, musi se prevest string na number
            zvuk = str2num(answer{1,1});

            % Vyber nahravky ve formatu *.wav pro analyzu emocniho stavu       
            [FileName,PathName] = uigetfile('*.wav');
            Soubor=strcat(PathName,FileName);
            [vstup,Fvz,bity]=WAVREAD(Soubor);
            %-vypise vysledky do workspace pro dalsi pouziti v analyze-----
            assignin('base', 'vstup',vstup);
            assignin('base', 'Fvz',Fvz);
%           assignin('base', 'bity',bity);
            %--------------------------------------------------------------
            
             % nacte novy obr do aplikace 
%             delete (findobj('tag','axesV3')) 
%             handleV3=evalin('base','handles.handleV3');
%             axes(handles.handleV3);
            I=imread('image_cry','jpg'); % relativni cesta
            
            image(I);
            axis off          % Remove axis ticks and numbers
            axis image        % Set aspect ratio to obtain square pixels
            
            if zvuk==1
            sound(vstup,Fvz)                  % prehraje zvuk 
            end
            
            % -------------------------------------------------------------
            Vypis = str2mat(...
                '   ',...
                'Pro pokracování a analýzu stiskněte tlačítko "Analýza"   ',...
                '   ',...
                'Pro návrat k výchozímu nastavení stiskněte Reset   ',...
                '   ',...
                '	');
            set(findobj('Tag','editV'),'String',Vypis);                      % vlastni vypis v poli pro zdrojovy text    
%             Handle = findobj('Tag','editV');                                 % Handle pole pro vypis zdrojoveho textu
%             evalmcw(Handle);  
            set(findobj('Tag','analyzaV'),'Enable','on');
            set(findobj('Tag','nacistdataV'),'Enable','off');
    case ('analyzaV')

%     Nacte hodnoty vypoctene pri nacteni souboru pro analyzu po kliknuti na nacist data    
      vstup = evalin('base','vstup');
      Fvz = evalin('base','Fvz');
%       bity = evalin('base','bity');
%% Vstupnich hodnoty pro analyzu (pro editaci nastaveni viz nastaveni.m)
load ini; 

%% Vypocet zákaldniho tonu  

[f0_time,f0,SHR,f0_candidates]=shrp(vstup,Fvz); % Funkce pro výpocet zakladniho tonu reci
        
        
N=10*Fvz/1000 ;% delka ramce  
NN=length(vstup);
I=fix(NN/N)+1;               
x=vstup';
x=[x zeros(1,(I*N-NN))];
        
II=length(f0);
pomax=0;
pomin=9999;
pozmax=0;
pozmin=0;
postr=0;
postrpo=0; 
podf0=0;
for i=1:II  % cyklus pro nalezení Maxima a Minima F0
 if f0(i)>=pomax
    pomax=f0(i);
    pozmax=i;   % oznacuje poradí useku,kde se nachazí maximum F0
 end
    podf0=podf0+(f0(i)*f0(i));
 if f0(i)>=1   % V Pripade,ze F0=0 nebereme ji zde v potaz
    postr=postr+f0(i); 
    postrpo=postrpo+1;  % pomocná hodnota prumerneho F0 pocitaneho ze vsech nenulovzch hodnot ; pocet prvku ze kterych se prumer pocital
      if f0(i)<=pomin  
         pomin=f0(i);
         pozmin=i;  % oznacuje poradí useku,kde se nachazí minimum F0
      end
  end
end

pozmax=pozmax/II*100;
pozmin=pozmin/II*100;
postr=postr/postrpo;                        % Prumerna hodnota F0
rozf0=pomax-pomin;                          % Rozdíl  maxima a minima hodnoty frekvence základního tonu 
df0=(podf0/II)-(postr*postr);               % Rozptyl frekvence základního tonu
sof0=sqrt(df0);                             % Smerodatna odchylka f0
[medf0,y123]=median(f0,II);                 % vypocet mediánu f0
        
        
if zobraz==1;  %%  Zobrazení 
   figure;
   plot(f0);
   grid
   title('zakladni ton')
   xlabel('m')
   ylabel('F0[m] (Hz)')
end 
          
%% Vypocet energie signálu
      
[energy,maxen,minen,posenmax,posenmin,den,soen,rozen,meden]=energiesignalu(vstup,10,Fvz,zobraz);
           
%% Vypocet pruchodu signalu nulovou rovinou

[zc,zmax,zmin]=pruchodnulou(vstup,10,Fvz,zobraz);
        
%% Vypocet kepstralnich koeficientu

[S,F,T,mod_S,faz_S]=spektralnianalyza(x,8000,20,5,0,0);
[wts,binfrqs]=fft2melfilt(512,8000,40,40,4000,0,0);
melb=wts*mod_S;
[cep,dctm]=melb2cep(melb,20);
         
del=length(cep(1,:));
for u=1:20
    nnn=0;
  for i=1:del
      nnn=nnn+(cep(u,i)/del);
  end    
    nnx(u)=nnn;
    u;
end
         
if zobraz==1;
  figure;
  plot(cep);

end    
%% Analýza 
[prx_f0,prx_en,prx_zc,prx_cc]=prumerhodnot(nnx,zc,energy,f0);
              
vf0=rozf0*(abs(prx_f0-medf0)/prx_f0); % Vyriabilita frekvence zákl. tonu
        
ven=(maxen-minen)*(abs(prx_en-meden)/prx_en); % Vyriabilita energie
        
[vyhodn]=vyhodnoceni(postr,pomax,pomin,rozf0,vf0,sof0,pozmax,pozmin,prx_en,maxen,minen,ven,rozen,soen,posenmax,posenmin,prx_zc,zmax,zmin,prx_cc);
        
[pom3,proc_em]=vyhodvysledek(vyhodn); % Funkce pro vyhodnocení em.stavu z mozných variant (pom3 je umisteni nazvu vysledneho em. stavu ve vektoru nazev)
        
%% Výsledek analýzy: Shody s referencnimy hodnotami  a výslednými hodnotami
%% dětského pláče
        
disp('[%] Vyjádření daných shod dětského pláče: ');
proc_em
disp('   Hlad /  Nervozita  /  Nespokojenost /  Nuda /  Ospalost ');
disp('---------------------------------------------------------------');
disp('Nahrávka byla analyzována jako dětský pláč z :');
nazev{pom3}

            %-vypise vysledky do workspace pro dalsi pouziti v analyze-----
            assignin('base', 'nazev',nazev);
            assignin('base', 'proc_em',proc_em);
            assignin('base', 'Vysledna_emoce',nazev{pom3});
            %--------------------------------------------------------------
    delete (findobj('tag','axesV3'))          %vymaze axesV3 s uvodni fotkou
%     set(findobj('Tag','axesV3'),'Visible','off');    
    set(findobj('Tag','axesV1'),'Visible','on'); 
    handleV2=evalin('base','handles.handleV2');
    figure(handleV2)
    handleV1=evalin('base','handles.handleV1');
    axes(handleV1);        
    bar(proc_em, 'DisplayName', 'proc_em', 'YDataSource', 'proc_em');        
    xlabel('(1)HLAD (2)NERVOZITA (3)NESPOKOJENOST (4)NUDA (5)OSPALOST');
    ylabel('PROCENTO SHODY (%)');
    grid on
    title('Vyjádření shody s referenčnímy hodnotami dětského pláče')
    
    set(findobj('Tag','analyzaV'),'Enable','off');
    
                Vypis = str2mat(...
                '   ',...
                'Pro další analýzu a návrat k výchozímu nastavení stiskněte Reset   ',...
                '	');
            
            set(findobj('Tag','editV'),'String',Vypis); 
            
   
            
      uicontrol('Style','push','Units','normalized','Tag','ulozitV',...                   % tlacitko Výsledek
      'Position',[0.25 0.30 0.30 0.06], 'String',nazev{pom3},...    
      'BackgroundColor', 'white','Enable','on','Callback','analyza ulozitV'); 
          
    case ('resetV')                       % ukonceni prace s aplikaci analyza a jeji opetovne spusteni
            close(findobj('Tag','figureV1'))  
            evalin('base','clear all, clc')  
            analyza
    case ('konecV')                       % ukonceni prace s aplikaci analyza
        evalin('base','clear all, clc')   % smaze vsechny promene ve work space
        close(findobj('Tag','figureV1'))  

end
end
end