function nova_databaze( )
%% Vytvoření (natrénování) databáze jednoho slova
%
%databáze je uložena do souboru pod nejnižším možným číslem
%>"číslo"matlab.dat<
%v souboru je uveden název slova, které bylo trénováno
%

dalsi = 1;
kepstra=  [];
k = 0;

%% zjískání informací a o trénovaném slově

okenko1 = inputdlg({'Zadejte název slova:', 'Zadejte počet hlásek:'}, ...
    'Informace.', 1, {'slovo' , '4'});

if isempty(okenko1) == 0                    % jestli byla zadána data 
        slovo_char = cell2mat(okenko1(1,1));
        stavy = str2num(cell2mat(okenko1(2,1)));

    if any(slovo_char) == 0
        slovo_char = 'neznámé slovo';
    end
    
    if any(stavy) == 0
        stavy = 4;
    end

%% načítání jednotlivých souborů

while dalsi ==1

    k = k+1;

    
[soubor, cesta] = uigetfile('*.wav', 'Vyber souboru');

if soubor == 0
    k = k-1;
    break;
end

%% výpis názvu do okna
               
if k >= 1 && k <= 29
uicontrol('style', 'text', 'string', soubor, ...
    'units', 'normalized', 'Position', [0.0 (0.89 - k*0.03) 0.2 0.03]);
elseif k >= 30 && k <= 58
uicontrol('style', 'text', 'string', soubor, ...
    'units', 'normalized', 'Position', [0.2 (0.89 - (k-29)*0.03) 0.2 0.03]);
elseif k >= 59 && k <= 87
uicontrol('style', 'text', 'string', soubor, ...
    'units', 'normalized', 'Position', [0.4 (0.89 - (k-58)*0.03) 0.2 0.03]);
elseif k >= 88 && k <= 116
uicontrol('style', 'text', 'string', soubor, ...
    'units', 'normalized', 'Position', [0.6 (0.89 - (k-87)*0.03) 0.2 0.03]);
elseif k >= 117 && k <= 145
uicontrol('style', 'text', 'string', soubor, ...
    'units', 'normalized', 'Position', [0.8 (0.89 - (k-116)*0.03) 0.2 0.03]);
end    

%% úpravy signálu

[signal, frekvence] = nacteni_zvuku (soubor, cesta);

signal = energie(signal);

signal = orezani_sumu(signal);

signal = preemfaze(signal);

%signal = pasmova_propust(signal, frekvence);

signal = zesileni(signal);

kepstrum = vzorkovani(signal);

kepstra = [kepstra, kepstrum(2:end,:)];
    
konce(k) = size(kepstrum, 2);
  


      tlacDalsi = questdlg('Přidat další soubor do dodatabáze?', ...
          'Trénování databáze', 'Ano', 'Ne', 'Ano');

  if strcmp(tlacDalsi, 'Ne') || strcmp(tlacDalsi, '')
      dalsi = 0;
  end
      

end  %konec while

if k > 0
    
kepstra = kepstra';

%% získání centroidů a jejich označení

[kepidx, keptrs] = kmeans( kepstra, stavy, 'Replicates', 100, ...
    'Distance', 'cityblock');


prubeh = 0;

for (ko = 1:k)
  prubeh = prubeh +1;

  if ko==k
      od=1;
      do=konce(1,1);
  else
      od = sum(konce(1,1:(ko-1))) + 1;
      do = sum(konce(1,1:(ko)));

  end;

  data = kepidx(od:do);

  
  data = odskoky(data);      %odstranění jednobodových ruchů
  
  
  cykl = size (data);
  chyba = 0;

%% pravděpodobnost

  if prubeh == 1
      maticeP = pravdepodobnost(data, cykl(1,1));
    
  else
      maticePx = [];
      maticePx = pravdepodobnost(data, cykl(1,1));
    
      hlavni = size(maticeP(5,:),2);
      vedlejsi = size(maticePx(5,:),2);
      
      if (hlavni - vedlejsi) > 0       %hlavni je vetsi
              maticePx = sjednoceni_matic(maticeP, ...
                  maticePx, hlavni, vedlejsi);
      elseif hlavni - vedlejsi  < 0    %hlavni je mensi
              maticeP = sjednoceni_matic( maticePx, ...
                  maticeP, vedlejsi, hlavni);
            
      end; 
      if size(maticeP) == size(maticePx)
            if maticeP(5,:) == maticePx(5,:)
                maticeP(:,:) = (maticeP(:,:) + maticePx(:,:))/2;
            else
                chyba = chyba +1;
            end;
      else
          chyba = chyba +1;
      end
 
  end;
  if chyba > 3
      box2 = msgbox({'!! Slova se neshodují !!', ' '}, 'Chyba');
  end;
end;

%% ulozeni

maticeP = matice_P(maticeP);

maticeA = zeros(size(keptrs,2),size(maticeP,2));
maticeA = matice_A(keptrs', maticeP(5,:));

cisloDatab = 1;
konec = 1;


while konec == 1;
    
  nazev = [num2str(cisloDatab) 'matlab.dat'];


  if exist(nazev) == 2

          cisloDatab = cisloDatab +1;
  else
      
    slovo_int = uint8(slovo_char);
    maticeM = zeros(5,size(maticeP,2));
    
    radek = 1;
    sloupec = 0;
    for k = 1:size(slovo_int,2)
       sloupec = sloupec +1;
       maticeM(radek,sloupec) = slovo_int(1,k);
       if sloupec == size(maticeP,2)
           sloupec = 0;
           radek = radek +1;
       end;
        
    end
    
    matice = [[maticeP];[maticeM];[maticeA]];
    konec = 0;
    
  end

end

ulozeni( nazev, matice);

slovo_char = strcat('"', slovo_char, '"');
nazev = strcat('>', nazev, '<');

msgbox ({'Databáze slova', slovo_char, 'byla uložena do souboru', ...
    nazev, ''}, 'Databáze');


else
    close all;
    diplom_menu;
end   % k ==0
else
    close all;
    diplom_menu;

end   %isempty 


end

