\chapter{Popis aplikace pro transkripci hudby}\label{aplikace}

Aplikace je naprogramována v programovacím jazyku C++ a lze spustit na operačních systémech Windows a macOS. Aplikaci jsem pojmenoval ATM (Automatic Music Transcription). Na přiloženém CD se nacházejí zdrojové kódy programu včetně sestavovacích souborů pro Microsoft Visual Studio a Apple XCode, kde jsem aplikaci kompiloval. Přiložené CD obsahuje také už zkompilované spustitelné aplikace na macOS a Windows, které se nacházejí v kořenovém adresáři. Aplikace obsahuje tři třídy, které se jmenují wavread, CQT a midiwrite.\\

\textbf{Třída wavread} obsahuje metodu $cteni$, která slouží k načtení dat ze souboru WAVE. Metoda $cteni$ má jediný parametr, a to název souboru, který chceme načíst. V případě načtení jiného typu souboru než WAVE, vypíše uživateli chybné hlášení, že se jedná o jiný typ souboru. Soubor WAVE musí být bez komprese. Metoda $cteni$ načítá ze souboru data, jako vzorkovací frekvenci nahrávky, formát souboru, počet vzorků a jednotlivé vzorky nahrávky.\\

\textbf{Třída CQT} obsahuje metody potřebné k provedení navržené metody pro hudební transkripci popsanou v kapitole (\ref{navrh_metody}). \\

\textbf{Třída midiwrite} obsahuje konstruktor se třemi parametry: řetězce, třídy wavread a třídy CQT, který slouží k vytvoření MIDI souboru z analyzovaných not. Třída midiwrite obsahuje také metodu $ladeni$, která posuzuje dvě sousední současně hrající noty a vybere z nich jednu, která bude pravděpodobnější a tu umístí do notového záznamu viz. kapitola (\ref{navrh_metody}).\\ 

Výsledná aplikace prochází postupně pět částí, tak jak můžeme vidět v blokovém schématu na obrázku (\ref{blok_schema}). \\

\begin{figure}[!h]
  \begin{center}
	\includegraphics[width = 15.7cm, height = 1.7cm]{obrazky/schema}
  \end{center}
  \caption{Blokové schéma aplikace}\label{blok_schema}
\end{figure}


\begin{enumerate}

\item Na začátku aplikace má uživatel na výběr ze čtyř možností. V prvních třech si může uživatel vybrat analýzu skladby z připravené databáze skladeb s rytmem. Každá skladba v databázi s rytmem obsahuje i textový soubor, který se načte s analyzovanou skladbou a obsahuje vstupní parametry pro analýzu skladby. Jako čtvrtou možnost může uživatel zadat relativní cestu z adresáře, kde je umístěna aplikace, k souboru s nahrávkou, kterou chce analyzovat. Následně si uživatel může zvolit rozsah frekvencí, které bude aplikace ve skladbě hledat. Maximálně možný rozsah frekvencí je od 65 Hz do 3951 Hz, což odpovídá rozsahu not od druhé do sedmé oktávy. Jako druhý parametr si může uživatel zvolit počet počítaných frekvencí na oktávu, doporučeno je 12 nebo 48 frekvencí na oktávu. Zvýšením počítaných tónů na oktávu se může docílit přesnější analýzy skladby. Při 48 počítaných frekvencí na oktávu se jednotlivým frekvencím půltónů přiřadí vyhodnocené čtyři nejbližší frekvence. Zvýšením počtu počítaných frekvencí bude analýza skladby také několikanásobně delší.\\

\item V druhé části aplikace se ze vstupního souboru WAVE načtou data jako vzorkovací frekvence, počet vzorků skladby a jednotlivé vzorky skladby. \\

\item V této části aplikace se provádí výpočet navržené metody pro automatický převod hudební nahrávky do notového záznamu, která zjistí předběžné frekvence not, které jsou obsažené v nahrávce. Metoda zjistí také čas nástupu a uvolnění tónu pro určení rytmu skladby. Použitá metoda v aplikaci je popsána v kapitole (\ref{navrh_metody}).\\

\item V další části se jednotlivým analyzovaným frekvencím přiřadí odpovídající MIDI index noty a podle nástupu a uvolnění tónu se notám přiřadí také délka noty viz. kapitola (\ref{rytmus}). V této části programu také dochází k volání metody $ladeni$, která v případě nalezení dvou sousedních tónů z nich jeden vymaže viz. třída midiwrite výše.\\

\item Poslední krok aplikace slouží k uložení výsledných tónů do MIDI souboru. Po ukončení analýzy se aplikace zeptá uživatele, zda chce program ukončit, nebo analyzovat jinou skladbu. Pro převod MIDI souboru do hudební notace jsem používal notační program MuseScore.\\ 

\end{enumerate}


