MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY

'^AS MP**

Metody a nástroje pro tvorbu syntetizovaného zpěvu pomocí syntetizátoru řeči MBROLA

BAKALÁŘSKÁ PRÁCE

Lukáš Rydlo

Brno, jaro 2008

Prohlášení

Prohlašuji, že tato bakalářská práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj.

Vedoucí práce: Aleš Horák, Ph.D.

m

Poděkování

Rád bych poděkoval vedoucímu své práce, Aleši Horákovi, PhD., především za jeho ochotu, s jakou mi vyšel vstříc při volbě vlastního tématu práce, ale také za podnětné připomínky a rady ve všech nejasnostech.

v Abstrakt

Práce se věnuje možnostem tvorby syntetizovaného zpěvu z MIDI souborů v češ­ tině za použití syntetizéru MBROLA. V teoretické části jsou rozebrány možné pří­ stupy a problematika MIDI. V implementační části je popsána funkce programu, který tuto syntézu umožňuje.

Abstract

This thesis is focused on making synthesized singing in Czech language from MIDI files with MBROLA speech synthesizer. The teoretical part concentrates on possible approaches and MIDI protocol. The implementation part describes functio­ nality of the implemented application for automatic synthesis of singing.

Klíčová slova

syntéza zpěvu, zpěv, syntéza, MIDI, SMF, MBROLA, singing, singing synthesis, speech

vi Obsah

1 Úvod 1 1.1 Historický nástin 1 1.2 Motivace a cíle 2 2 Teorie syntézy zpěvu 3 2.1 Prístupy k syntéze zpěvu 3 2.2 MIDI protokol 5 2.3 SMF-Standard MIDI file 7 2.3.1 Struktura souboru 8 2.3.2 Časování událostí 9 2.3.3 Verze 10 2.3.4 Notový zápis 10 2.3.5 Texty písní 13 2.4 Fonetická transkripce 14 2.5 Načasování a délky fonémů 16 2.6 Ladění 18 3 Implementace 21 3.1 Obecné principy 21 3.2 MBROLA a zpracování výstupu 26 3.3 Parser SMF 27 3.4 Modifikátory 28 3.4.1 Princip 28 3.4.2 Fonetická transkripce 28 3.4.3 Transkripce délek 31 3.4.4 Transkripce frekvencí 32 4 Existující projekty 33 4.1 Burcas 33 4.2 Lyricos a Flinger 33 4.3 Zpívající počítač 34 4.4 MelissaaK.L.E.M 35 4.5 35 5 Možnosti dalšího rozvoje 37 6 Shrnutí 39 A Komentovaná ukázka SMF souboru 41 B Obsah CD 47

vii

Kapitola 1 Úvod

1.1 Historický nástin

Reč je základní komunikační prostředek člověka. I primitivní kultury, u jejichž příslušníků je rozšířený analfabetismus, využívají k dorozumívání mluveného pro­ jevu a také zpěvu. Je tedy pochopitelné, že se člověk již dávno zajímal o podstatu řeči a v souvislosti s tím i o její umělou syntézu, tedy o vytvoření stroje, který by dokázal simulovat lidský hlas. Odkazy na takové pokusy jsou známy již z antiky, přesto za první takový stroj postavený na seriózním výzkumu bývá považován mechanický syntetizér z druhé poloviny 18. století, jehož autorem byl (původem z Bratislavy). Ve stejné době Christian Gottlieb Kratzenstein vytvořil pět jazykových píšťal,1 které dokázaly produkovat zvuk podobný jednotlivým samohlás­ kám. Sám Kempelen pak uvádí, že chtěl sestrojit hudební nástroj, který by zněl podobně jako lidský hlas (viz [9, str. 148, 2. odstavec]). I další přístroj z oblasti syntézy řeči byl (a stále je) využíván jako hudební nástroj. Jedná se o vokodér,2 který je již elektrickým přístrojem. Jeho první (analogová) verze se objevila ve 30. letech 20. století a původně měl sloužit ke kódovanému přenosu lidského hlasu v telekomunikaci. Vokodér však není syntetizérem v pravém slova smyslu, protože na vstupu snímá promluvu člověka, kterou dále moduluje. Umož­ ňuje tedy modulovat řeč podle zvolených frekvencí tak, že připomíná zpěv, který však zní velmi „elektronicky". Nástup digitální techniky a počítačů posunul oblast zájmu od analogového k di­ gitálnímu signálu a jeho zpracování na počítačích. Ačkoliv se dnes běžně setkáváme s různými hračkami nebo zařízeními jako jsou například kapesní translátory, které na nás mluví, hlavní těžiště výzkumu je v oblasti rozpoznávání a syntézy mluveného projevu především na PC. Poněkud stranou zájmu zůstává syntéza zpěvu, ačko­ liv se na první pohled od syntézy řeči příliš neliší. Přesto se jako klíčové pro další výzkum jeví zdokonalování aplikací, které rozpoznávají řečové povely pro použití k ovládání elektroniky nebo které dokáží převádět souvislou promluvu do psané podoby. Spolu se zdokonalováním systémů syntézy mluveného projevu mají takové aplikace usnadnit život a komunikaci s technikou nejen slabozrakým a nevidomým, ale i ostatním lidem.

1. Zvuk jazykové píšťaly je tvořen kmitajícím kovovým plátkem, přes který je hnán vzduch - takové píštály se i dnes běžně využívají ve varhanách k simulaci zvuku např. trumpety. 2. Slovo „vokodér" vzniklo spojením slov „vox" (hlas) a „enkodér".

1 1. ÚVOD

1.2 Motivace a cíle

Z předchozí části vyplývá, že syntéza zpěvu je v oblasti zpracování řeči na počítači podružnou oblastí, které se nevěnuje příliš mnoho zájmu. Touto prací bych rád poukázal na to, že i tak lze objevit projekty, které se zpěvem zabývají. Především bych však chtěl zmínit, proč má smysl zabývat se syntézou zpěvu a jaké jsou její charakteristiky. Nástroj syntetizující zpěv nelze v žádném případě považovat za vhodnou „elek­ tronickou náhradu" živého zpěváka. Podobně jako je tomu u elektronických hudeb­ ních nástrojů, jedná se o nový nástroj, který rozšiřuje naše možnosti, ale nenahrazuje ty původní. Elektronicky syntetizovaný zpěv v profesionálních aplikacích se snaží vyznít přirozeně a jako by byl zpíván živou osobou. Přesto se do zpěvu promítá osobnost zpěváka - aktuální rozpoložení, ale i vzdělání, což syntetizéru chybí. Proto považuji za vhodné, vnímat syntetizovaný zpěv spíše za svébytný hudební žánr. Ovšem daleko podstatnější uplatnění syntetizéru zpěvu lze najít v pomoci skla­ dateli. Při skládání vokální hudby je dobré si zapsané noty poslechnout, zda zní opravdu podle skladatelovy představy. Ne vždy jsou poblíž zpěváci, kteří by byli ochotní partituru přezpívat. Pokud jde o jednohlas, může si skladatel pomoci sám (ačkoliv zpěv sopránového partu v podání mužského basu nebude mít příliš velký význam). V případě vícehlasého zpěvu si pomoci nemůže. V horší situaci je nevi­ domý nebo slabozraký člověk, který by chtěl vysázet noty pro zpěváka. Notační sice běžně disponuje exportem do formátu MIDI,3 ale přehráním souboru MIDI nelze získat informaci o správném nebo špatném zarovnání textu k notám. Těmto lidem, ale třeba i těm, kteří si chtějí poslechnout, jak přiližně zní určitá pís­ nička, kterou mají k dispozici v MIDI formátu, by mohla tato práce pomoci. Mým cílem bylo vytvořit aplikaci, která by dokázala ze vstupního MIDI souboru převzít jak melodii, tak text a za použití syntetizéru MBROLA (blíže viz [12]) vyge­ nerovat srozumitelný zpěv, rytmicky i délkou odpovídající zadané melodii. Jelikož jsem nemohl navázat na žádný předchozí výzkum, předpokládal jsem pouze zá­ kladní funkčnost, nicméně celá aplikace je koncipována tak, aby umožnila snadné rozšiřování a další vylepšování. Tomu odpovídá i detailně zpracovaná dokumentace ve formátu HTML za použití dokumentačního nástroje Doxygen (viz [5]).

3. blíže v kapitole 2.2 a 2.3

2 Kapitola 2 Teorie syntézy zpěvu

2.1 Přístupy k syntéze zpěvu

Zaměříme-li se na syntetizovaný zpěv, je vhodné nejprve zhodnotit, do jaké míry lze využít výsledky získané výzkumem syntézy řeči. Na první pohled se zdá, že řeč a zpěv se příliš neliší. Dalo by se zjednodušeně říci, že zpěv je promluva, jejíž prozódie, resp. intonace základního hlasivkového tónu a síla zvuku, je podřízena zadanému notovému zápisu, který bývá zpravidla pestřejší než stejné jevy v mluveném projevu. Zaměřme se tedy na toto tvrzení. Prozódie je souhrn akustických jevů, které mají vliv na výslednou promluvu nad úrovní jednotlivých hlásek (resp. fonémů). Jedná se především o následující charakteristiky (viz [10, str. 109]): Základní hlasivkový tón - tím je myšlena základní frekvence, na které je promluva pronášena. Změnou základního hlasivkového tónu měníme melodii řeči, na­ příklad tzv. zvednutí hlasu na konci tázací věty nebo naopak poklesnutí hlasu na konci věty oznamovací. Ve zpěvu jde opět o melodii, která je určena noto­ vým zápisem a je oproti mluvenému projevu složitější, nicméně pro každou píseň předepsaná a pro syntézu jasně daná. Při syntéze řeči je nutné vytvářet modely změny základního hlasivkového tónu, aby promluva nezněla mono­ tónně. S tím souvisí i pojem intonace, který v lingvistice označuje právě změnu frekvence základního hlasivkového tónu. Ve zpěvu je význam podobný, avšak zaměřuje se více na správné nasazení frekvence zadané notovým předpisem. Zpěvák správně intonuje tehdy, když jeho hlas při nástupu tónu nesklouzává po blízkých frekvencích.

Časování hlásek je ve zpěvu opět určováno notovým zápisem. Zpěvák ovšem může v zájmu srozumitelnosti textu nebo kvůli důrazu mírně měnit načasování a délky jednotlivých hlásek, čímž jeho projev nabývá na přirozenosti.

Hlasitost a její změna se v běžné mluvě používá především pro zdůraznění pod­ statné informace nebo demonstraci emocí. Podobně je tomu i ve zpěvu, který se ovšem opět řídí především notovým zápisem, který pokyny ke změně hla­ sitosti obsahuje. V mluveném projevu bývá snížení hlasitosti doprovázeno i poklesem intonace, čehož se musí zpěvák důsledně vyvarovat. Z uvedeného je zřejmé, že z hlediska prozódie je syntéza zpěvu jednodušší než syntéza řeči, protože většina parametrů je zadána notovým zápisem a není nutné

3 2. TEORIE SYNTÉZY ZPĚVU

vytvářet modely pro jejich výpočet. Nicméně je třeba si uvědomit, že zatímco pro řeč je primárním sdělením obsah promluvy, v případě zpěvu ustupuje obsah sdělení umělecké hodnotě projevu, která je určena právě kvalitou interpretace notového předpisu. Dostáváme se proto do situace, kdy pro kvalitní syntézu požadujeme mnohem přesnější a dokonalejší intonování textu, než jaké nabízí běžné hlasové syntetizéry Zároveň by bylo vhodné měnit i takové parametry hlasu, jako je tzv. vibráto - jemné kolísání frekvence základního hlasivkového tónu, které přispívá k přirozenosti zpěvu a jehož frekvence a rozsah závisí i na prováděné skladbě. Otázce časování bude věnována samostatná kapitola 2.3.2 a k problematice změn hlasitosti zmíním pouze to, že řečový syntetizér MBROLA neumožňuje ve svém vstupním souboru definovat změny hlasitosti a proto by bylo nutné tuto funkciona­ litu implementovat zvlášť (úpravou vygenerovaného zvukového souboru). Z toho vyplývá, že řečové syntetizéry nejsou pro použití k syntéze zpěvu příliš vhodné, pro­ tože většinou neumožňují měnit potřebné parametry promluvy v takovém rozsahu a s takovou přesností, jak by kvalitně syntetizovaný zpěv vyžadoval. Při syntéze řeči se využívá dvou základních principů. Jedná se o tzv. syntézu v časové oblasti (nebo doméně či o kódování kmitů) a o syntézu ve frekvenční oblasti (resp. doméně neboli kódování zdroje). Jako nejjednodušší řešení syntézy se na první pohled zdá nahrání nějakých zá­ kladních stavebních jednotek řeči (slov, slabik, hlásek...), jejich uložení a následné sestavení požadované promluvy z těchto jednotek a jejich přehrání jako celek. Tento postup se nazývá právě syntézou v časové oblasti. Jelikož počet všech slov nebo sla­ bik je příliš velký, než aby jej bylo možné rozumným způsobem uchovávat v paměti počítače, volí se menší jednotky. Je obecně známo, že mluvený projev neodpovídá přesně psané předloze a proto nelze za základní jednotku považovat znak. Místo znaku volíme jeho analogii v promluvě a tou jefoném. Ovšem ani fonémy nebývají používány, protože předěl mezi fonémy nese značné množství informace a uplat­ ňuje se v něm vliv tzv. koartikulace.1 Z toho důvodu se zavádí termín difón, což je vzorek reprezentující konec jednoho a začátek druhého fonému. Spojování probíhá vprostřed fonému, kde není tolik patrný vliv koartikulace. Všimněme si charakteristické vlastnosti tohoto přístupu. Pokud máme k dispo­ zici nasnímané „stavební kameny" promluvy, pak tyto jednotky již obsahují určité prozodické jevy, které je problematické pozměnit (především pokud jde o intonaci). Je bezpodmínečně nutné namluvit jednotlivé segmenty pro dif ónovou databázi co nej- monotónnějším hlasem a databázi dále zpracovat, aby při snaze „přeladit" základní hlasivkový tón na jinou frekvenci nebyly ve výsledku znatelné chyby. I samotné na­ pojení jednotlivých segmentů přináší určité problémy s plynulostí projevu a kvalita výsledné syntézy je přímo úměrná kvalitě nasnímaných vzorků. Psutka uvádí v [10, str. Ill], že pro kvalitní syntézu řeči je vhodné snímat vzorky (při pulsní kódové modulaci) pomocí 12bitových A/D převodníků při vzorkovací frekvenci minimálně

1. Koartikulace - vliv následujícího fonému na průběh předcházejícího a naopak ovlivnění začátku fonému předcházejícím.

4 2. TEORIE SYNTÉZY ZPĚVU

20 kHz. Přitom je vhodné si uvědomit, že v hudbě se dnes za minimum považuje vzorkovací frekvence 44,1 kHz při 16 bitech (odpovídá hodnotám audio CD). Jde o volbu mezi kvalitou vzorku a paměťovou náročností databáze. Pro potřeby řeči snížení vzorkovací frekvence a menší počet kvantizačních stupňů nezpůsobí tako­ vou ztrátu požadované informace, jako v případě zpěvu. Pro ilustraci uvádím, že syntetizér MBROLA spadá právě do kategorie syntetizérů v časové doméně a WAV soubor jím generovaný má frekvenci 16 kHz při 16 bitech. Bližší informace včetně používaných algoritmů k problematice syntézy v časové doméně jsou uvedeny v 10. kapitole [1]. Alternativní přístup nabízí syntéza ve frekvenční oblasti. Ta je založena na ma­ tematickém modelu řečového ústrojí člověka. Tento model modifikuje na základě parametrů frekvenční spektrum promluvy, čímž je emulována funkce lidského ře­ čového ústrojí. Parametry je samozřejmě nutné získat analýzou nahrané promluvy, nicméně uchovávají se pouze získané parametry, nikoliv celé databáze fonémů či difónů. To vede k výrazné úspoře paměti. Kvalita výsledné syntézy je závislá jednak na použitém modelu a jednak na kvalitě získaných parametrů. Podstatnou výhodou je, že vhodným ovlivněním parametrů lze snadno modifikovat jednotlivé prozodické charakteristiky, takže výsledek může být kvalitnější. Proto se syntéza ve frekvenční oblasti zdá být pro zpěv vhodnější, ačkoliv je technicky podstatně náročnější.

2.2 MIDI protokol

Specifikace MIDI (Musical Instrument Digital Interface) se dělí do tří základ­ ních částí. Jedná se o specifikaci hardware, specifikaci komunikačního protokolu a specifikaci formátu souboru pro uchovávání MIDI komunikace. MIDI bylo představeno v podobě MIDI 1.0 Specification 5. 8. 1983, průběžně je doplňováno o další funkcionality a již od svého uvedení se považuje za standard pro komunikaci mezi elektronickými hudebními nástroji a je široce podporováno vý­ robci těchto nástrojů i software (např. sekvencerů, notačního software, počítačových syntetizérů hudebních nástrojů apod.). O jeho správu se stará MIDI Manufacturers Asociation, která také prodává specifikaci - v současné době za 70 USD. Naštěstí je MIDI natolik rozšířené, že se mu věnují mnohé knihy i webové prezentace. Z hle­ diska hardware se jedná o protokol komunikující asynchronně sériově, rychlostí 31,25 kHz po jedné vstupní a jedné výstupní lince (zpravidla bývá přítomen ještě konektor bufferovaného průchodu dat). Linka se dělí na 16 kanálů, z nichž každý může ovládat jeden elektronický hudební nástroj (je samozřejmě možné, aby nástroj vysílal i přijímal data z několika kanálů). Princip komunikace spočívá v zasílání zpráv o určité události, které se označují jako message nebo někdy event. Typická událost je například stisk klávesy neboli sepnutí noty. Nejprve se vyšle stavový bajt, který označuje stisk klávesy spolu s úda­ jem o čísle kanálu. Za ním následují další datové bajty, jejichž počet je závislý na události - v případě stisku klávesy se zasílá údaj o síle úhozu (hlasitosti) a číslo

5 2. TEORIE SYNTÉZY ZPĚVU

noty Stavové a datové bajty se rozliší tak, že stavové mají v prvním bitu hodnotu 1, zatímco datové 0. Jestliže první bit stavové události je vždy 1 a poslední čtyři bity určují číslo kanálu, pak zbývají tři bity určující typ události. Jejich význam uvádí tabulka 2.1 („hodnota" pro přehlednost udává hexadecimálně hodnotu prvních čtyř bitů stavového bajtu).

hodnota význam a počet datových bajtů 8 Vypnutí noty 2 bajty: číslo noty a rychlost vypnutí 9 Zapnutí noty 2 bajty: číslo noty a síla úhozu A Individuální tlaková citlivost 2 bajty: číslo noty, hodnota B Kontrolér 2 bajty: číslo a hodnota kontroléru C Program (nástroj) 1 bajt, číslo programu D Společná tlaková citlivost 1 bajt, hodnota E Ohýbání tónu 2 bajty udávající hodnoty F Systémová data různá délka a význam dat

Tabulka 2.1: Význam první čtveřice bitů stavového bajtu

Druhý datový bajt události pro zapnutí noty by bylo lépe označit jako rychlost zapnutí, ale pro lepší pochopení významu je použito „síla úhozu". Tento bajt určuje jak rychle byla klávesa stisknuta, což je považováno za ekvivalent údaje o síle úderu do klávesy, tedy s jakou hlasitostí bude nota sepnuta. Hodnota může jako u každého datového bajtu nabývat stupňů od 0 do 127 (první bit je vždy 0) a v tomto případě má hodnota 0 speciální význam. Zapnutí noty rychlostí 0, je ekvivalent vypnutí noty. Je to zjednodušení v případě, kdy se využívá tzv. průběžných událostí (angl. running status), které umožňují zaslat stavový bajt jen jednou a pak posílat jen datové, pokud se nemění druh události. Tím se docílí rychlejšího přenosu dat, jelikož se jen jednou vyšle bajt „zapnutí noty" a pak se jen zasílají čísla not a rychlost zapnutí. Naopak hodnota 127 udává maximální hlasitost. Kontroléry jsou zařízení, která umožňují ovládat určité vlastnosti nástroje. Ty­ pické užití kontrolérů je například ovládání vyvážení levého a pravého kanálu, hlasitosti, efektů dozvuku, rychlosti tremola apod. Pro některé kontroléry nestačí rozsah 128 hodnot a proto mají přidělena dvě identifikační čísla, čímž se rozsah dat rozšíří na 14 bitů a 16 384 hodnoty. Změna hrajícího nástroje se provádí změnou

6 2. TEORIE SYNTÉZY ZPĚVU programu. Jednotlivé nástroje mají přiřazena identifikační čísla, avšak ta nejsou de­ finována samotným MIDI standardem, ale jsou obsažena například v doplňujícím standardu GM - General MIDI. Často používanou událostí je i ohýbání tónu (angl. pitch bend), která umožňuje zvýšit nebo snížit ladění znějících tónů. Z uvedené skupiny značně vybočuje událost systémových dat. Ta jako jediná v druhé čtveřici bitů nenese údaj o čísle kanálu, ale tyto bity blíže specifikují událost, která se váže na všechny kanály. Některé tyto události jsou nedefinované, některé jsou specifické pro konkrétní výrobce. Data, která zařízení nedokáže rozpoznat musí přeskočit bez vyvolání chyby. Zmiňme alespoň událost s hodnotou stavového bajtu FF, která značí resetování systému. Na závěr této podkapitoly by se slušelo vysvětlit význam „čísel not". Jelikož MIDI protokol není textový, ale binární, je označení tónů písmeny nežádoucí. Udávat přímo frekvence tónu by bylo zbytečně komplikované a neodpovídalo by to použití, pro které je protokol navržen. Proto se zavádí číselné označení tónů od 0 do 127. Tabulka začíná od subsubkontra C a po půltónech pokračuje až k šestičárkovanému fis. Jednočárkované c má tedy hodnotu 60 a celá tabulka obsahuje 10 oktáv a 6 půltónů. Detailnější popis protokolu včetně tabulky přiřazení tónů číslům je například v [3], ale vzhledem k oblibě MIDI lze tyto informace získat i na mnohých webových stránkách.

2.3 SMF - Standard MIDI file

Jako souborový formát pro uchovávání MIDI komunikace byl v roce 1988 přijat Standard MIDI file, jehož soubory mívají extenzi mid nebo midi. Tyto soubory dnes umí importovat i exportovat drtivá většina hudebního software, u kterého to má smysl (pochopitelně editory audio nahrávek touto funkcionalitou nedisponují), pře­ hrávat a nahrávat je umí i elektronické nástroje vybavené záznamovým zařízením a přehrávání zvládají i některé mobilní telefony, které v nedávné době těžily z úspor­ nosti SMF a integrované syntézy hudebních nástrojů oproti paměťově náročnějším zvukovým nahrávkám. SMF slouží k uchovávání MIDI událostí, z čehož plyne i to, že se jedná o binární formát a také to vysvětluje jeho „úspornost" oproti opravdovým zvukovým nahrávkám. Na PC je oblíbený i pro uchovávání notového zápisu, ačkoliv k tomuto účelu není příliš vhodný. MIDI soubory neobsahují jen MIDI události s časovou značkou, ale jsou schopny uchovávat i některé další informace, jako například tempo, předznamenání, název úseku, jméno autora a další. Pro potřeby syntézy zpěvu se jedná především o schop­ nost uchovávat texty písní. Samotný formát vychází z IFF - Interchange File Format, což znamená jednak to, že bajty jsou v pořadí big endian a také to, že se soubor člení na tzv. chunks. Tímto termínem se označují bloky dat formátu 4 bajty identifikátoru (ASCII znaky), 32bitů unsigned integer určující délku následujícího úseku s daty a pak samotná data bloku. Oproti IFF ale SMF neobsahuje úvodní chunk (mj. s údajem o celkové velikosti dat v souboru), takže nelze použít standardní kód pro čtení IFF

7 2. TEORIE SYNTÉZY ZPĚVU

souborů. Proto firma Microsoft zavedla soubory RMID, které se od SMF liší tím, že na začátku souboru mají navíc 12 bajtů složených ze čtyřbajtového řetězce RIFF, 32bitů unsigned integer údaje o velikosti souboru a čtyřbajtového řetězce RMID. Tento formát se ale neujal a dnes lze jen výjimečně narazit na takové soubory.

2.3.1 Struktura souboru

Pro detailní pochopení struktury MIDI souboru je v příloze A připojena komen­ tovaná ukázka SMF souboru. Popis struktury je rozpracován v následujících řádcích. SMF soubor začíná tzv. záhlavím, neboli blokem dat, který obsahuje 4 základní údaje: Identifikátor SMF souboru (4 bajty s ASCII znaky MThd), údaj o verzi SMF souboru (viz 2.3.3), počet stop (angl. tracks) a údaj o „dělení", tzv. pole division. Posledně zmíněný údaj je nutný pro správný výpočet délky not a jeho význam je rozebrán v sekci 2.3.2. Zbytek souboru je členěn na další bloky, které by už všechny měly popisovat jednotlivé stopy. Pokud se v souboru vyskytne blok s jiným identifikátorem, jedná se o proprietární data některého výrobce a parser je musí přeskočit a ignorovat, což může díky tomu, že každý identifikátor bloku, včetně záhlaví, je následován čtyřbajtovou hodnotou typu unsigned long určující délku bloku v bajtech. Pojem stopa (angl. track) je známý z oblasti sekvencerů a lze jej přirovnat k partu (notovému zápisu) jednoho nástroje v partituře skladby pro více nástrojů. I v SMF bývá zvykem, že v jedné stopě jsou veškerá data jednoho nástroje (v případě klavíru zpravidla noty pro obě ruce). V rámci stopy pak mohou být data ještě na různých kanálech (z celkem 16), jak bylo poznamenáno v kapitole o MIDI protokolu. Je samozřejmě možné umístit všechny nástroje do jediné stopy (např. na různé kanály), ale to je matoucí a nevhodné pro další zpracování; proto se většinou členění na stopy podle jednotlivých nástrojů využívá. Stopa také nemusí obsahovat data žádného nástroje, ale pouze systémová data (autora a název skladby, tempo apod.). Každá stopa už obsahuje přímo jednotlivé MIDI události. Kromě běžných udá­ lostí jako je sepnutí a vypnutí noty, se v MIDI souborech často objevují SysEx - System exclusive události. Jedná se o události se stavovým bajtem FF a spadají tedy do skupiny událostí systémových dat (viz str. 7). Tyto události nemají předem známý počet datových bajtů. Proto první datové bajty určují délku zbylých dat. Tento údaj se (stejně jako tzv. delta-time, který bude vysvětlen v dalším textu) neuvádí přímou hodnotou, ale pomocí údaje proměnné délky, angl. variable length bytes. Princip spočívá v tom, že nejvýznamnější bit v každém bajtu je roven jedné, vyjma posled­ ního bajtu, ve kterém je roven nule. V každém bajtu tedy zbývá už jen sedm bitů, které se seskládají za sebe, čímž dají výslednou hodnotu. Pak je jasné, že za prvním bajtem, který má v nejvýznamnějším bitu nulu, už následují samotná data události. Výčet všech existujících systémových událostí a přesný popis struktury SMF nemá smysl, vzhledem k rozsahu práce, zde uvádět. Tyto údaje lze nalézt jednak v [3], ale především na webu [4], kde je celá problematika detailně rozpracovaná.

8 2. TEORIE SYNTÉZY ZPĚVU

2.3.2 Časování událostí Aby bylo možné zaznamenaná data korektně reprodukovat, musí SMF ukládat nejen jednotlivé MIDI události, ale také čas jejich výskytu. Za tímto účelem se před každou událost (event) vkládá časová značka, tzv. delta-time. Jak napovídá anglický termín, jedná se o relativní časový údaj vztažený vůči předchozí události. Jednotlivé události se v SMF ukládají za sebou (serializují) a pokud nastaly ve stejný okamžik, pak jejich delta-time je roven nule, jinak odpovídá časovému úseku mezi nimi. Tento údaj je zadán v pulsech, což je dále nedělitelná časová jednotka, jejíž délka je vztažena vůči čtvrťové notě údajem, který určuje, kolik těchto pulsů je v jedné čtvťové notě. Tento údaj se označuje jako rozlišení2 (angl. time resolution) MIDI sekvenceru a v SMF je uchováván v záhlaví souboru v poli division (datový typ unsigned short). Ani tento údaj nedává absolutní časovou jednotku. Proto se v SMF objevuje speciální událost (angl. meta-event) pro tempo, která definuje kolik mikrosekund trvá jedna čtvrťová nota. Meta-event pro tempo má celkem 6 bajtů. První tři jsou FF 51 0 3a následující tři bajty3 udávají počet mikrosekund na jednu čtvrťovou notu. Implicitní hodnota tempa je 500 000 /xs na čtvrťovou notu. Ke správnému počítání délek not v MIDI souboru je tedy nutné nejprve v zá­ hlaví souboru přečíst, jaká je hodnota rozlišení v pulsech na čtvrťovou notu. Dále je nutné najít meta-event tempa, který určí počet mikrosekund ve čtvrťové notě. Údaj o tempu se vydělí rozlišením a výsledná hodnota je počet mikrosekund na jeden puls. Následně se u jednotlivých událostí přečte delta-time, tj. vzdálenost v pulsech od poslední události. Tato hodnota se vynásobí spočítaným počtem mikrosekund na puls. Výsledná hodnota je časový údaj v mikrosekundách, za jaký je třeba provést přečtenou událost po předcházející. Popsaný postup je obvyklý pro většinu MIDI souborů. Přesto existuje v SMF málo používaná alternativa, kterou je časový kód SMPTE. To je standard především v oblasti filmu (zkratka znamená Society of Motion Picture and Television Engineers). Časování je v něm udáváno jako počet hodin, minut, sekund a tzv. okének (angl. frames), která se mohou ještě dále dělit na „podokénka" (angl. subframes). Časový kód SMPTE bývá využíván především při potřebě synchronizace hudby s obrazem a proto není v MIDI souborech příliš běžný. Je to dáno i tím, že tento formát časování není odvozen od délky čtvrťové noty, jak bývá v hudbě zvykem, ale od absolutního času (členěním sekund na menší jednotku - okénka). SMF soubor využívající časový kód SMPTE se pozná tak, že v záhlaví souboru v poli division je v hlavním bajtu hodnota nejvýznamnějšího bitu rovna jedné. Platí tedy, že hodnoty 0 0 00 - 7F FF udávají běžné časování MIDI počtem pulsů ve čtvrťové notě, zatímco hodnoty 8 0 0 0 - FF FF udávají časový kód SMPTE. V tom případě v prvním bajtu vynulujeme jedničku v prvním bitu a dostáváme hodnotu určující počet okének v jedné sekundě (podle standardu se může jednat o hodnoty 24, 25,29 nebo 30). Druhý bajt pak reprezentuje počet podokének v jednom okénku.

2. jednotkou rozlišení je PPQN - pulses per quarter note, česky počet pulsů ve čtvrťové notě 3. opět ve velké endianitě, tedy první bajt je nejvýznamnější - MSB

9 2. TEORIE SYNTÉZY ZPĚVU

2.3.3 Verze V současnosti existují tři verze SMF, které se číslují počínaje nulou. První dvě verze jsou narozdíl od třetí široce používané.

Verze 0. Je základní verzí, která je charakteristická tím, že smí obsahovat jen jedinou stopu, uvnitř které se nachází všechny události včetně dat na libovolných ka­ nálech. Tento formát je nejsnazší na implementaci, ale tím, že nepodporuje více stop, je limitován na použití maximálně 16 nástrojů (co nástroj, to jeden kanál) a znesnadňuje manipulaci s daty v sekvenceru, což ale není omezující pro po­ třeby syntézy zpěvu. Nicméně to způsobuje ztížení situace při rozpoznávání jednotlivých hlasů u záznamu vícehlasého zpěvu.

Verze 1. Je nejrozšířenější, jelikož podporuje několik současně hrajících stop, kde každá stopa reprezentuje part jednoho nástroje. Tento přístup znamená, že všechny stopy se přehrávají zaráz od začátku až do konce. Formát je pochopi­ telně náročnější na implementaci, ale již je možné oddělit jednotlivé nástroje, počet nástrojů není limitován 16 kanály (prakticky ovšem závisí na hardware, zda bude schopen přehrát více než 16 různých nástrojů zaráz). Vícehlasý zpěv může být rozdělen po jednotlivých hlasech do samostatných kanálů, což zpře­ hledňuje strukturu skladby a zesnadňuje získání jednotlivých hlasů. V každé stopě je samozřejmě možné opět posílat data po více kanálech, což se ovšem nedoporučuje a takový soubor se označuje za „nečistý formát".

Verze 2. Nepříliš používaný formát orientovaný na vzory - patterny, které jsou repre­ zentovány jednotlivými stopami. Ty pak mohou obsahovat data více kanálů, čehož se využije především v patternově orientovaných sekvencerech. Pro potřeby syntézy zpěvu se více hodí formát 0 nebo 1 a je nepravděpodobné, že by se běžná vokální skladba ukládala ve formátu 2 už proto, že by nebylo jasné v jakém pořadí a kolikrát přehrávat jednotlivé vzory.

2.3.4 Notový zápis Jak již bylo zmíněno, notový zápis lze v SMF očekávat na jednom nebo více kanálech, kde každý samostatný kanál by měl reprezentovat jeden nástroj nebo u vokálních skladeb jeden hlas. Stejně tak je možné hlasy (nástroje) kombinovat do jediné stopy, aťuž na jediný kanál v polyfonním předpisu nebo na jednotlivé kanály. Zatímco lidský hlas z principu nedokáže tvořit souzvuky, nelze předpokládat, že v notovém předpisu nebudou souzvuky přítomny. V rámci zjednodušení notace je možné např. ve dvouhlasé sborové skladbě v místě, kde je třeba zpívat souzvuk tří tónů, sepsat dva tóny do partu pro soprán, jehož zpěváci se pak v tomto místě rozdělí na první a druhý soprán. Ve všech těchto případech je třeba nejprve notový předpis rozdělit na jednot­ livé hlasy, což s sebou přináší zajímavé otázky. První z nich je, zda v případě výše zmíněného dočasného rozdvojení hlasu na dvě sekce je žádoucí syntetizovat dva

10 2. TEORIE SYNTÉZY ZPĚVU samostatné hlasy, které ve společné části obsahují stejné noty Z hlediska sborového zpěvu každý zpěvák přispívá do výsledného zvuku tak, že více zpěváků zpívají­ cích týž part umocňuje sílu, resp. mění charakter výsledného souzvuku. To je dáno nepřesnostmi (všichni nemají zcela dokonale přesný nástup) a především různým zabarvením hlasu každého zpěváka. Při použití syntetizéru většinou nebývá k dispo­ zici příliš velké množství různých hlasů (difónových databází v případě syntetizéru MBROLA) a namixovaní téhož hlasu opakovaně do jednoho souboru dá výsledek, který (vzhledem ke sčítání identických vstupních signálů) zní opět jako jednohlasý zpěv. Pokud tedy není signál dále modifikován například použitím frekvenčních fil­ trů či drobným narušením fázového průběhu, nemá smysl obě sekce jednoho hlasu na společných úsecích duplikovat (po smixování by stejně nebyly poznat) a stačí vytvořit předpis pro dva hlasy, přičemž druhý hlas obsahuje pouze ty noty, které jsou v částech, kde se původní hlas dělí na dvě sekce. Tento postup je pochopitelně jednodušší na implementaci. Další a mnohem zásadnější otázka zní: Jak od sebe rozeznat noty pro jednotlivé hlasy? Pokud noty obsahují v jediné notové lince noty pro dva hlasy, většinou jsou opatřeny nožkou, která pro jeden hlas míří dolů a pro druhý nahoru (vyjma celých not). Pokud se tedy stane, že se nižší hlas dostane dočasně nad vyšší, lze to rozeznat. V MIDI se ovšem orientace nožek nijak neukládá a z údaje „zapnout notu" ji nelze rozpoznat. Tento problém nelze řešit jinak, než rozepsáním po jednotlivých hlasech do samostatných stop nebo alespoň na samostatný kanál. Nicméně pokud mají jed­ notlivé hlasy stejný text, neměl by nastat případ, ve kterém by přiřazení not k hlasu v závislosti na jejich výšce v souzvuku způsobovalo chyby. Zároveň lze vzít v úvahu fakt, že nová nota by se v hlasu měla objevit bezprostředně po události „vypni notu" předchozí noty. Zde se projevuje další nedostatek MIDI z hlediska notového zápisu a sice to, že pomlky se v MIDI nijak explicitně neukládají. Jejich výskyt vyplývá im­ plicitně z toho, že mezi poslední událostí „vypni notu" a následující událostí „zapni notu" je větší než nulový delta-time. Přesto pokud má např. soprán čtvrťový rytmus a alt obsahuje synkopu,4 která svou druhou notou vybočuje nad soprán, je zřejmé, že lze noty správně přiřadit, protože zatímco v sopránu stále zní první čtvrťová nota, v altu právě přestala znít první osminová nota a nově „spuštěná" čtvrťová nota by měla být přiřazena altu, který je „volný". Názorně to ukazuje obrázek 2.1, na kterém jsou noty sopránu šedé a altu černé.

Obrázek 2.1: Ukázky různých postupů dvou hlasů

4. rytmické ozvláštnení, důraz na neprízvučné době, v trojici not má prostřední nota dvojnásobnou délku než zbylé dvě

11 2. TEORIE SYNTÉZY ZPĚVU

První část ukazuje normální postup hlasů. V druhé části alt vybočuje nad soprán, ale je se sopránem rytmicky zarovnaný (noty sopránu se objevují ve stejnou chvíli jako noty altu). V poslední části alt opět vybočuje, ale tentokrát synkopou, takže není rytmicky zarovnaný se sopránem. Zjednodušený algoritmus pro rozčlenění vícehlasu na jednohlasé části by mohl (v pseudokódu) vypadat takto: RoZDELNAHLASY(mídíS'topa) 1 vHlaseZníNota[} <- NIL 2 while not KONECSTOPY(mídíStopa) 3 do událost <- ČTlDALŠÍUDÁLOST(midiTrack) 4 if událost = NOTE_ON 5 then hlas <— 0 6 while vHlaseZníNota[hlas\ ^ NIL 7 do hlas <— hlas + 1 8 vHlaseZníNota[hlas\ <— událost 9 if událost = NOTE.OFF 10 then for hlas <— 0 to VEUKOST(vHlaseZníNota) 11 do if vHlaseZníNota[hlas] = událost 12 then PŘIDEjDoHLASUNOTU(/zias, nota) 13 vHlaseZníNota[hlas] <— NIL 14 break

Tento kód je spíše pro názorné představení základní myšlenky (úryvek např. neřeší výskyt pomlk) a kvůli podmínce v řádku 11 předpokládá jednoznačné identi­ fikování každé události. Je vidět, že princip spočívá v přidělení nově se vyskytnuvší noty do prvního hlasu, ve kterém žádná nota zrovna nezní. Vrátíme-li se k obrázku 2.1, vidíme, že za předpokladu, že noty se stejnou dobou výskytu jsou seřazeny podle své výšky, bude tento algoritmus fungovat v prvním i třetím případě. Ke špat­ nému přidělení not dojde ve druhém případě, ve kterém bude sestupná sekvence tónů od c2 po g1 přidělena sopránu namísto altu. Jak již bylo zmíněno, ze samotného MIDI souboru to však v tomto případě nelze zjistit (pokud nejsou jednotlivé hlasy na jiném kanále nebo v jiné stopě). Navíc při zpěvu obou hlasů na stejný text bude rozdíl zřetelný pouze při prostorovém rozdělení hlasů (např. soprán do levého a alt do pravého sluchátka). Naprosto spolehlivý algoritmus pro rozdělení vícehlasu na jednotlivé hlasy vy­ tvořit nelze. Sofistikovanější algoritmus by musel analyzovat notový zápis na zá­ kladě určitých skladebných jevů a pravidel, která si však skladatel v moderní hudbě může stanovit zcela libovolně (např. aleatorika je založena na zcela náhodných skla- datelských postupech) nebo naopak volit zcela záměrně tak, aby popírala zavedená pravidla klasické harmonie.5 Jediný opravdu spolehlivý způsob je tedy rozepsání jed­ notlivých hlasů do samostatných stop nebo alespoň na samostatné kanály (což ale

5. Striktní pravidla v harmonii např. zakazují tzv. paralelní kvinty, což znamená, že dva hlasy nesmí 12 2. TEORIE SYNTÉZY ZPĚVU může být při přehrávání nepraktické kvůli omezení na počet 16 současně znějících nástrojů). V obecném případě, kdy je více hlasů napsáno v jedné stopě a na jednom kanále, lze považovat uvedený algoritmus za plně dostačující řešení.

2.3.5 Texty písní MIDI protokol je určený pro komunikaci elektronických hudebních nástrojů a tudíž není orientován na zpěv. Souborový formát SMF se vyvinul jako formát pro uchovávání MIDI komunikace, takže ani ten nebyl na podporu vokální hudby orien­ tován. Teprve v roce 1997 vydala MM A6 dokument označený RP-017 - Recommended Practice: SMF Lyric Meta Event Definition, což je doporučení, jak ukládat text písní v SMF souborech (v kompletním znění na webu [7]). Je k tomu určena speciální sys­ témová událost - meta-event se stavovým bajtem FF 0 5, který je následován textem v ASCII. Toto řešení je značně nepraktické, nicméně pro potřeby karaoke7 dostaču­ jící a v jiných systémech než karaoke se většinou nepoužívá. Základní nedostatek tohoto řešení je použitá znaková sada ASCII. Většina notačních editorů v systému MS Windows ukládá texty písní buď ve znakové sadě Latin 1 (ISO 8859-1), takže nesprávně ukládá českou diakritiku, nebo používá znakovou sadu CP-1250 (neboli windows-1250). Notační editor Lilypond (viz [8]) ukládá text v kódování UTF-8. Je tedy nutné kódování znát nebo rozpoznat, protože samotný MIDI soubor o něm informaci nenese. Dalším problémem je členění textu na slova a slabiky. Podle doporučení RP- 017 mají být slova ukončena mezerou, zatímco slabiky bez mezery. Nicméně běžnou praxí je ukončovat slabiky spojovníkem, jak je to zvykem v notovém zápisu. Zároveň každá slabika má tvořit samotnou událost a pokud se má někde vyskytovat melisma8, pak ke každé notě - vyjma první - má příslušet tento meta-event s prázdným textem. To však některé programy (nebo autoři MIDI souborů) nedodržují. Jelikož událost textu je na rozdíl od zapínání a vypínání not událostí jednorázovou, nelze poznat, jestli má být slabika dále zpívána nebo ne. Nejzásadnější problém tkví v tom, že události nejsou označeny číslem sloky, ke které náleží, a s notou jsou svázány jedině tím, že se objevují ve stejném čase. Pokud stopa obsahuje např. dva hlasy s dvěma různými texty, nelze rozeznat, zda se jedná o dvojhlas a dvě sloky písně nebo o dvojhlas, z nichž každý má zpívat jiný text. Navíc ani nelze rozeznat, který hlas má zpívat který text (na jednom časovém bodě jsou dvě noty a dvě neoznačené slabiky textu) ani která slabika je první. Zpravidla se páruje první nota s prvním textem nebo se první text označí za první sloku. Ještě horší situace nastává tehdy, když některý hlas má jiný rytmus. Pak v místech společ­ ného melodického postupu se nachází např. dvě meta události textu (pro dva hlasy), být vedeny tak, aby vzdálenost mezi tóny obou hlasů byla u dvou sousedních tónů rovna kvintě, tj. pěti celým tónům. Toto pravidlo však může být zcela záměrně porušeno např. v exponovaném místě, které má budit dojem napětí. 6. MIDI Manufacturers Asociation 7. Amatérský zpěv na hudbu z nahrávky - původem z Japonska. 8. melisma - jedna slabika zpívaná na více not, viz obrázek 2.2

13 2. TEORIE SYNTÉZY ZPĚVU

zatímco na místě samostatné melodické změny jednoho hlasu se nachází text pouze jediného hlasu. Zde je již zapotřebí spolehlivě rozpoznat, o který hlas se jedná, aby nedocházelo ke spojování slabik mezi různými hlasy. Největší problém pak tvoří soubory, které na jedné stopě nesou více rytmicky odlišných hlasů a navíc i několik slok. Pokud bude text uložen např. v pořadí 1. sloka prvního hlasu, 1. sloka druhého hlasu, 2. sloka prvního a 2. sloka druhého hlasu, pak v místě, kde bude rytmicky vybočovat např. druhý hlas, budou pouze dvě textové meta události v pořadí 1. a 2. sloka druhého hlasu, ale na místech, kde budou oba hlasy znít společně, bu­ dou všechny čtyři údaje neoznačené pod sebou a tudíž nebude možné poznat, zda jsou opravdu v uvedeném pořadí nebo postupně po hlasech (1. sloka prvního, 2. sloka prvního, 1. sloka druhého, 2. sloka druhého hlasu). Člověk toto rozezná díky pochopení textu a návaznosti slabik. Počítač by vyžadoval algoritmus využívající umělé inteligence a rozpoznání obsahu textu (samotné rozpoznání správného slova podle napojovaných slabik nestačí, jelikož je třeba správně hledat navazující text i na předělu slov). Ze zmíněného důvodu se jeví jako jediné vhodné řešení zásah člověka, který ručně zadá, jak jsou jednotlivé sloky a hlasy textu členěny a přiřazeny k notovému zápisu. Automatizováním této činnosti by totiž ve zmíněných případech docházelo k příliš velké chybovosti. To se ovšem netýká „rozumně" členěných souborů, jaké např. generuje aplikace Lilypond, která vytváří SMF tak, že vždy řadí do jedné stopy jeden hlas (v závislosti na notovém zápisu), pak do samostatných stop každou sloku příslušnou tomuto hlasu a stejným způsobem dále ostatní hlasy.

2.4 Fonetická transkripce

V rámci výuky Českého jazyka se na středních školách zmiňuje, že základním stavebním kamenem a dále nedělitelnou jednotkou psaného projevu je grafém, za který se považují např. znaky latinské abecedy. V mluveném projevu je touto zá­ kladní jednotkou foném a jak lze snadno ověřit, mezi grafémy a fonémy neexistuje žádné jednoduché přiřazení (na principu bijektivního nebo alespoň injektivního či surjektivního zobrazení). Tento problém řeší fonetická transkripce,9 která na zá­ kladě fonologických pravidel provádí přepis textu vyjádřeného grafémy na fonémy. Pro zjednodušení je zavedena fonetická abeceda, což je opět grafické vyjádření fonémů (fonémy jsou v této abecedě vyjádřeny pomocí zvolené množiny grafémů, které jim jsou ovšem přiřazeny jednoznačně). Běžně se využívá mezinárodní abeceda IPA - International Phonetic Alphabet, která slouží k popisu promluvy v libovolném jazyce a je srozumitelná každému odborníkovi v oblasti jazykovědy. Univerzálnost této abecedy a především použití neobvyklých grafémů ji diskvalifikuje v oblasti počítačového zpracování, kde bývá často výhodnější využít ASCII znaků a přiřadit jim odpovídající význam znaků IPA. Pro vlastní přepis je třeba definovat fonologická pravidla. Jejich obecný tvar je

9. z latinského transcribe), ere, psi, ptum - přepisovat

14 2. TEORIE SYNTÉZY ZPĚVU

A^B/C_D (takto ho uvádí [10, str. 99]), kde A je přepisovaná sekvence grafémů, B je sekvence znaků fonetické abecedy na než se transkribuje, C a D jsou levý a pravý kontext, tj. sekvence grafémů vlevo a vpravo od přepisovaných. Bývá praktické pravidlům přiřadit i prioritu, což umožňuje definovat obecné pravidlo pro určitou sekvenci (např. bez kontextu) a pak s vyšší prioritou definovat pravidlo pro stejnou sekvenci v určitém konkrétním kontextu, ve kterém je výjimka v přepisu. Při přepisu se pak uplatní odpovídající pravidlo s nejvyšší prioritou. Princip přepisu na základě pravidel spočívá v procházení textu a postupném aplikování pravidel. To je vhodný a efektivní postup pro jazyky, které mají minimum výjimek ve výslovnosti a existují obecná pravidla výslovnosti. Takovým jazykem je například čeština, pro kterou je tento postup velmi vhodný. Naproti tomu pro jazyky, které mají specifickou výslovnost téměř každého slova (např. angličtina), je tento postup neefektivní a je vhodné zvážit alternativní postup, kterým je slovníkový přepis. V tomto případě se postupuje po slovech, která se hledají ve slovníku, jenž obsahuje slova a jejich fonetický přepis. Teprve pokud není slovo nalezeno, aplikují se pravidla, kterých bude u takových jazyků větší množství. Pravidla české výslovnosti jsou poměrně jednoduchá a proto je vhodné použít přepis podle pravidel a nikoliv slovníkový. Základní (a na základě testů v rámci této práce evidentně i dostačující) množina těchto pravidel je např. v [10] od strany 101 po stranu 106. Nyní zaměřme svou pozornost na fonetickou transkripci textů písní. Na první pohled se zdá, že přepis textu písně je výrazně jednodušší úkol než transkripce obec­ ného textu. Písně zpravidla neobsahují zkratky, údaje o čase nebo datu, číslice ani jiné údaje, které je třeba nejprve rozepsat (přepsat „21" na „dvacet jedna"), vyře­ šit skloňování a správný rod apod. Navíc je text členěn po slabikách, což pomáhá snadno řešit chyby se špatným rozpoznáním švu mezi předponou a kořenem slova a aplikací chybného pravidla. Tyto výhody jsou však z jiného úhlu pohledu komplika­ cemi. Zbytečnost celého bloku zpracovávajícího zkratky, číslice a další údaje včetně skloňování poukazuje na to, že využití knihovny nebo aplikace pro přepis obecného textu by vedlo ke snížení výkonu a tedy nižší efektivitě. Kruciálním problémem je ovšem dělení na slabiky. Běžný text není dělený na slabiky a tudíž by před transkripcí textu písně obecným transkriptorem bylo nutné text spojit, čímž by došlo ke ztrátě údaje o předělu slabik, resp. o hranicích jednotlivých zpívaných slabik či bloků. To by znamenalo, že po transkripci by bylo nutné znovu rozdělit slova na slabiky a přidělit je odpovídajícím notám. Tato úloha ovšem není algoritmicky řešitelná především kvůli existenci melismat (viz str. 13), která mohou jedné slabice přiřazovat libovolný počet not. Problém lze obejít jedině vyznačením melismat v notovém zápise, ovšem i tak není jisté, že by přepočítané členění odpovídalo původnímu zápisu. Proto se jeví jako jediné vhodné řešení vytvořit pro potřeby přepisu textů písní samostatný jednoduchý transkriptor s podporou fonologických pravidel, výjimek ve výslov­ nosti a především s podporou vstupu děleného na slabiky. Tento přístup by nebyl nutný, pokud by vstupní text nebyl získáván přímo z MIDI souboru, ale například ze samostatného textového souboru. Tento postup využil Marcus Uneson ve svém

15 2. TEORIE SYNTÉZY ZPĚVU

syntetizéru zpěvu pro Švédštinu (viz [13]), což ovšem přineslo zmíněné problémy s melismaty K problematice fonetické transkripce textu písní budiž ještě poznamenáno, že na­ rozdíl od běžného textu není prioritou obsah textu, ale provedení neboli prozodická složka projevu. Odchylky od správné výslovnosti nebo drobnou nesrozumitelnost lze tedy tolerovat, pokud přispěje ke zlepšení celkového uměleckého dojmu.

2.5 Načasování a délky fonémů

S problematikou fonetické transkripce částečně souvisí i otázka správného nača­ sování a délek fonémů. Předně je třeba v návaznosti na poslední odstavec předchozí podkapitoly zmínit, že délky fonémů ve zpívaném projevu bývají jak výrazně kratší (především souhlásky) tak i naopak prodloužené (samohlásky). Je to určeno no­ tovým zápisem a také tím, že samohlásky jsou nositely tónu. V rámci zachování srozumitelnosti je vhodné snažit se dodržet určité minimální délky fonémů, při kte­ rých jsou srozumitelné (především pokud jde o souhlásky), ale u souhlásek je vhodné sledovat i přílišný nárůst délky nad standardní hodnotu, protože pak zní zpěv více „mluvené" a jako kdyby zpěvák zadrhával. Tabulku průměrných délek českých sou­ hlásek jsem převzal z [11, str. 21] a experimentálně ověřil, že je nutné tyto hodnoty výrazně snížit, aby nebyla narušena melodická linie „zadrháváním" na souhláskách a naopak podpořit délku samohlásek. Naivní princip přidělování délek fonémů spočívá v přerozdělení délek všech not mezi jednotlivé fonémy tak, že všechny fonémy dostanou kvantum odpovídající jejich standardním délkám. Pokud je celková délka fonémů menší než délka not, prodlouží se samohláska. Je-li delší, zkracují se souhlásky i samohlásky až ke svým minimálním hodnotám. Pokud je i tak celková délka fonémů větší, je třeba potlačit souhlásky na úkor samohlásky, čímž se sníží srozumitelnost, ale zachová nosný prvek melodie. Názorně to včetně melismat popisuje algoritmus následujících dvou funkcí:

ZPRACUjSLABIKU(/onémy [ ], noty [ ]) 1 if VELIKOST(noíy) = 1 2 then return PŘIDĚLDÉLKYFONÉMŮM(/onémy, SUMADÉLEK(noíy)) 3 else samohláska <— 0 4 while fonémy[samohláska] ^ SAMOHLÁSKA 5 do samohláska <— samohláska + 1 6 /l <— fonémy[0 to samohláska] 7 /2 <— fonémy[samohláska] 8 /3 <— fonémy[samohláska to VELIKOST^fonémy)] 9 dl<- SUMADÉLEK(noíy[0]) 10 d2 <- SUMADÉLEK(noíy[l to VELIKOST(noíy) - 2]) 11 d3 <- SUMADÉLEK(noíy[VELIKOST(noíy) - 1]) 12 délkyl <- PŘIDĚLDÉLKYFONÉMŮM(/1,ÍU)

16 2. TEORIE SYNTÉZY ZPĚVU

13 délky2 <- PŘIDĚLDÉLKYFONÉMŮM(/2, d2) 14 délky?, <- PŘIDĚLDÉLKYFONÉMŮM(/3, d3) 15 return délkyl U délky2 U délky?

PŘIDĚLDÉLKYFONÉMŮM(/onémy [ ], celkováDélka) 1 délky[] ^NIL 2 for í <- 0 to VELIKOST( fonémy) 3 do foném <— fonémy[i] 4 délky[i] <— obvykláDélka[foném] 5 if SUMA(dé/fcy) < celkováDélka 6 then samohlásky <- lNDEXYSAMOHLÁSEK(veÄ;torSFonémy) 7 kvantum <— {celkováDélka — SUMA(délky)) 8 kvantum <— kvantum/VEUKOST(samohlásky) 9 for each index in samohlásky 10 do délky[index] <— délky[index] + kvantum 11 else í <— 0 12 while SUMA(déZfcy) > celkováDélka 13 do while dé/fca[í] = 0 14 do í <— í + 1 (mod posledníFoném + 1) 15 dé/fca[í] <— dé/fca — 1 16 í <— í + 1 (mod posledníFoném + 1) 17 return dé/fcy

Funkce Zpracu jSlabiku názorně demonstruje, že pro správné zpracování me- lismat stačí přidělit první notu ke všem fonémům slabiky až po první samohlásku včetně, další noty až po předposlední včetně se přidělí k nalezené samohlásce a po­ slední nota je přidělena k samohlásce a všem následujícím fonémům až do konce slabiky Tento základní přístup by měl být ještě rozšířen pro případ, že se ve slabice nenachází žádná samohláska, ale pouze slabikotvorná souhláska. V takovém případě slabikotvorná souhláska převezme funkci samohlásky Oba případy jsou znázorněny na obrázky 2.2. V prvním případě je na notách h1 až f1 zpíváno měkké í, které zasa­ huje i do c2 na začátku a do g1, což je nutné proto, že souhlásky nemohou být nositely melodie. V druhém případě samohláska chybí a proto její funkci přebírá r, které je slabikotvornou souhláskou. Pokud by místo citoslovce „frnk" byl v ukázce shluk neslabikotvorných souhlásek, výše uvedený algoritmus by do funkce samohlásky ustavil první znak. Toto chování je tolerovatelné, neboť takové slabiky nejsou zpíva- telné (neosahují foném, který by dokázal nést melodii) a tedy je principiálně jedno, který foném bude zvolen. Funkce PřidělDélkyFonémůmje opět jen zjednodušujícím nástinem. Konkrétně else-větev podmínky na řádce 11 postupně zkracuje délky všech fonémů o stejný díl, dokud se nedostane na požadovanou délku. Z hlediska lepší srozumitelnosti by bylo výhodnější zkracovat nejprve déle trvající souhlásky a snažit se zachovat délku

17 2. TEORIE SYNTÉZY ZPĚVU

i f J J J JI J- i' J I ý i' J) p i1 Pi s - - nič-ka Frnk

Obrázek 2.2: Melisma

samohlásek, které jsou pro srozumitelnost a především pro udržení melodické linie nejdůležitější. V některých případech je kvůli příliš krátkým notám nutné zkrátit některé fonémy na nulovou délku. V tom případě musí jít vždy o souhlásky a to ideálně o souhlásky, které nejsou bezprostředně před samohláskou (ty napomáhají srozumitelnosti). Zásadním problémem je správné načasování jednotlivých fonémů, které utváří rytmus skladby. Výše uvedený algoritmus počítání délek předpokládá na vstupu jednotlivé slabiky. Experimentálně se potvrdila teze, že rytmus není určován počát­ kem slabiky, ale nástupem samohlásky. Lidské ucho vnímá nástup samohlásky jako chvíli, kdy se ozval tón, zatímco souhlásky jsou pouze šumem, který tón předchází pro zpřesnění obsahu textu. Správně by tedy model přepočítávání délek fonémů neměl pracovat se slabikami podle textu, ale se slabikami tvaru „samohláska, sou­ hlásky". Tento přístup přináší několik netriviálních problémů. Jednak jde o první slabiku. Nezačíná-li samohláskou, měly by být její souhlásky rytmicky jakoby před­ řazeny před začátek prvního taktu. Jenže to by celou nahrávku posunulo o délku těchto souhlásek a způsobilo problémy při mixování s dalšími hlasy nebo hudebními nástroji. Další problém tkví v tom, že souhlásky by musely být posunuty do před­ chozí slabiky ještě před spočítáním jejich délek, protože nesmí svou délkou omezit trvání předchozí slabiky. Zároveň by to výrazně ztížilo nakládání s pomlkami, které mohou být v původně představeném algoritmu předpokládány vždy na konci sla­ biky. V případě předsunutí souhlásek z následujícího textu by se pomlky objevily mezi fonémy původní slabiky a připojenými souhláskami následující. Z tohoto dů­ vodu lze zvážit, zda v případě dostatečně krátkých standardních délek souhlásek není drobné kolísání rytmu způsobené tímto problémem akceptovatelné. Chyby jsou však ještě zřetelnější u slov, která začínají více souhláskami (dvěma).

2.6 Ladění

Poslední, dosud nezmíněná, leč podstatná složka zpěvu, je správná intonace, tedy volba frekvence základního hlasivkového tónu. Notový předpis ani SMF neudává přesnou frekvenci, ale pouze oktávu a název tónu. Přiřazení konkrétní frekvence tónu se věnuje ladění, cizím slovem temperatura. Přesněji se věnuje vzdálenostem jednotlivých tónů stupnice, což je ekvivalent poměru jejich frekvencí. Samotné ladění tedy pro určení frekvence nestačí a je třeba znát ještě pevně zvolenou hodnotu

18 2. TEORIE SYNTÉZY ZPĚVU některého tónu. Tímto tónem bývá obvykle komorní a neboli a malé. Ladění existuje celá řada. Z těch nejstarších je obecně známé Pythagorejské ladění, které staví na intervalu kvinty10. Dva tóny v tomto ladění jsou v intervalu kvinty tehdy, když poměr jejich frekvencí je 3:2. Toto ladění zná dva druhy půltónů, což znamená, že na klaviatuře klavíru laděného pythagorejsky by mezi tóny c a d nebyla jen jedna klávesa půltónu cis identická s půltónen des, ale byly by zde dvě klávesy, jelikož frekvence cis a des by byly rozdílné. Kromě této komplikace při konstrukci nástrojů s pevným laděním přináší pythagorejské ladění i známý termín pythagorejské komma, což je rozdíl mezi frekvencí dvanácté kvinty a sedmé oktávy. Pokud si zvolíme třeba velké C a od něj utvoříme postupně 12 kvint, získáme tón his5. Utvoříme-li sedm oktáv, získáme tón c6. Tyto tóny by se měly krýt, ale místo toho je mezi nimi poměr frekvencí vyjádřený rovnicí: (f)12 312 -jJy=^Í9= 1,013 643 265

Různá další ladění se vždy snažila tohoto komma zbavit, aby docílila toho, že se oba zmíněné intervaly budou svými poměry frekvencí rovnat. Tak vzniklo i v současnosti nejrozšířenější rovnoměrně temperované ladění. Temperované znamená, že hodnota pythagorejského komma se rozdělí mezi ostatní intervaly a rovnoměrně znamená, že každý z intervalů dostane stejnou část. To vede k tomu, že samotné intervaly nejsou zcela čisté, ale chromatické a diatonické půltóny (tj. např. cis a des) se již rovnají, stejně jako se rovná dvanáctá kvinta sedmé oktávě. Základním intervalem tohoto ladění je půltón, jehož velikost je dána hodnotou x\f2 = 1,059 463 094. Pro srovnání, interval kvinty je ( 1\/2)7 = 1,498 307 077, což je nepatrně méně než v Pythagorejském ladění. MIDI protokol používá právě rovnoměrně temperovaného ladění, ačkoliv hráči na nástroje, které nemají pevné ladění (včetně zpěváků), inklinují spíše k čistějšímu přirozenému ladění, které je založeno na řadě alikvotních (vyšších harmonických) tónů, jejichž výskyt je čistě fyzikální a tedy přirozený (jsou to tóny, které se například objevují ve spektru zvuku, který vydává píšťala). Výsledný souzvuk je pak čistší a příjemnější na poslech. Pro potřeby zpěvu je tedy možné zvážit podporu i jiných ladění než jen rovnoměrně temperovaného. Zbývá zmínit, že absolutní hodnoty frekvencí se z poměrů mezi tóny dopočítávají vůči pevně zvolené frekvenci komorního a, která dnes činí 440 Hz, ale v minulosti bývala např. 435 Hz a při interpretaci starších děl některé soubory preferují dobovou hodnotu. Další detaily k této problematice lze čerpat z [14] nebo v základech z [6].

10. Kvinta - interval mezi prvním a pátým tónem stupnice

19

Kapitola 3 Implementace

3.1 Obecné principy

Na přiloženém CD je aplikace, která ze vstupního SMF souboru extrahuje text a notový zápis a buď automaticky (je-li to možné) nebo na základě zadání uživa­ tele vytvoří soubory s fonémy, jejich délkami a frekvencemi jako vstup pro syntetizér MBROLA. Pracovní název programu je Misip; vznikl jako zkratka slov MIDI to Singing Projed. Misip je naprogramovaný v jazyce C++ a odladěný pro použití v operačním systému GNU/ a je k němu dostupná jednak kompletní dokumentace ve for­ mátu HTML, která je generovaná ze zdrojových kódů aplikací Doxygen, a pak také manuálová stránka s popisem použití. Aplikace je konzolová a standardně se spouští v automatickém režimu, ve kterém se pokusí detekovat ve vstupním souboru jednotlivé hlasy a sloky textu a zesynteti- zovat jejich možné kombinace. Tato funkcionalita spolehlivě funguje v kombinaci se SMF soubory, které generuje aplikace Lilypond ve verzi 2.10.25 a které obsahují vždy jednu stopu s notami a pak samostatné stopy s jednotlivými slokami textu a pří­ padně další stopy not a textů. Aplikace umí automaticky zpracovat i soubory, které obsahují stopy s notami i textem (takové zdá se generuje např. program Sibelius), ale tato funkce nemusí být zcela spolehlivá. Uprednostnení Lilypondu vychází z toho, že se jedná o projekt, který je volně dostupný zdarma k používání a jeho kvalita je na profesionální úrovni. Aplikace jako Sibelius, Finale, Capella a další jsou bohužel placené a získat SMF soubor písní v nich vysázených není jednoduché. Kromě automatického režimu je možné zadat na příkazové řádce seznam hlasů v notové předloze a seznam slok textů, které mají být podle zadaných not zesynte- tizovány Zadávající řetězec se skládá ze čtyř úseků, které mají stejnou syntaxi jako řetězec obvyklý pro zadávání stran dokumentu k tisku. Nejprve jsou zadána čísla stop s notami (konkrétními hodnotami nebo rozsahem), pokud mají být zesyntetizo- vány jen některé hlasy v rámci těchto stop, použije se dvojtečka a seznam hlasů. Za tímto údajem se zadá lomítko a stejným způsobem čísla stop s textem a případně čísla slok v rámci stop. Pokud je žádoucí zadat více takovýchto řetězců, stačí je oddělit středníkem. Příklady zadání ukazuje tabulka 3.1. Jelikož sestavení výše zmíněného řetězce by mohlo některým uživatelům působit obtíže, lze aplikaci spustit v interaktivním módu a postupně na dotaz zadávat jednot­ livá čísla stop, hlasů a slok. To může být v některých případech výrazně neefektivní, ale nevyžaduje to pochopení principu zadávajícího řetězce.

21 3. IMPLEMENTACE

vzor 1/1 význam Z první stopy všechny kombinace hlasů i slok textu vzor 1:2/2:1,3-5 význam Z první stopy vzít noty druhého hlasu a použít texty z druhé stopy, první a třetí až pátou sloku. vzor 1-3:2,4/4-5 význam Z prvních tří stop vždy druhý a čtvrtý hlas a všechny sloky textu ze čtvrté a páté stopy. vzor 1,3-4:1,3/4;1/2;1:1-2/3:4-6 význam Z první, třetí a čtvrté stopy vždy jen první a třetí hlas v kombinaci se všemi slokami textu ze čtvrté stopy, pak zkombinovat všechny hlasy první stopy se všemi texty druhé stopy a nakonec z první a druhé stopy vzít všechny hlasy a zkombinovat je se čtvrtou až šestou slokou třetí stopy. vzor 1,3:1-2, 4-5/1:1; 11/11 význam Kdekoliv v řetězci (vyjma čísel) se smí vyskytovat mezery. Z první a třetí stopy se vezme první, druhý, čtvrtý a pátý hlas a zkombinuje se s první slokou v první stopě a následně se provedou všechny kombi­ nace slok a hlasů z jedenácté stopy.

Tabulka 3.1: Příklady vzorů řetězce hlasů a slok

Pro implementaci kontroly správnosti a čtení tohoto řetězce bylo použito determi­ nistického konečného automatu, který je deklarován v souboru re. h a implementován v re . cc. Vlastní implementace byla před použitím knihovny pro regulární výrazy a konečné automaty uprednostnená vzhledem k potřebě zakomponovat funkcionalitu postupného čtení jednotlivých možných kombinací hodnot. Automat je rozdělený na dvě části. První (obrázek 3.1) čte řetězec udávající jednotlivé hodnoty a druhý (ob­ rázek 3.2) čte celý řetězec. Oba automaty při čtení řetězce zamítnou ihned, jakmile se dostanou do stavu RJCT. Krom toho mohou zamítnout i tehdy, pokud se v ře­ tězci objevuje chyba například v podobě zadání intervalu, ve kterém je první číslo větší než druhé (tzn. zadání 2 - 2 je korektní, ale 2-1 není). Druhý automat navíc validuje jednotlivé úseky prvním automatem a zamítne i tehdy, pokud zamítl první. Po úspěšné validaci řetězce lze číst jednotlivé kombinace hodnot, což je založeno na opětovném procházení řetězce, ale po krocích. Blokové schéma průběhu syntézy je znázorněno na obrázku 3.3.

22 3. IMPLEMENTACE

m\iuMij]

H l 1/ NU\\( i N

[(SPCI jV-il*jŕcOM-^jY-Ľ^L/ŕ INU j]

C, H, O W H O, N C, H, O

C, H, O C, H, O HYPH RJCT [(COM2JJ

W C, H, O N, H, O C

W, N, C, H, O

H, O nSPC3JJ W]

W

NUM2

(Abeceda: W - mezera nebo tabulátor, N - číslice, C - čárka, H - pomlčka, O - jiný znak)

Obrázek 3.1: Schéma „malého" automatu

23 3. IMPLEMENTACE

(Abeceda: N - znaky z „malého" automatu, C - dvojtečka, L - lomítko, S - středník, O - jiný znak)

Obrázek 3.2: Schéma „velkého" automatu

24 Rozdělení na CT4 i-i hlasy/tracky Syntéza Tvorba výstupu 9* N rt> >V MBROLA CO L > CO NASTROJ >D/AW M/D/ SOUBORUX-^ MBROLA >| SPOJUJÍCÍ I— PHO SOUBOR WAV SOUBOR cT WAV >v o ^

3.2 MBROLA a zpracování výstupu

Samotná aplikace slouží (v souladu se zadáním) pouze jako předstupeň programu MBROLA. Tento program bere jako vstup soubory ve formátu PHO. Jeho syntaxe je triviální. Jedná se o čistý textový soubor ve znakové sadě ASCII, jehož jednotlivé řádky jsou ve formátu: [ ...] Řádek začíná řetězcem (bez bílých znaků}) který určuje f oněm ve fonetické abe­ cedě zvolené difónové databáze. Za skupinou bílých znaků pak následuje délka foněmu v celých milisekundách. Za dalšími bílými znaky pak mohou následovat nepovinné dvojice čísel (datový typ float, s desetinnou tečkou). První číslo vyjadřuje procentuální pozici v rámci celé délky fonému (tzn. 100 je hodnota konce trvání foněmu), druhé číslo je frekvence v jednotkách Hertze. Určení pozice procenty a nikoliv milisekundami je poněkud nepraktické a způsobuje nepřesnosti. Co se týče přesných hodnot frekvencí, tak lze podotknout, že syntetizováním fonému samohlásky „á" v hodnotách kolem 440 Hz (komorní a) byly výsledné sou­ bory binárně identické pro hodnoty od 433 Hz až po 444 Hz (včetně), dále byly binárně identické soubory od 445 po 457 Hz. Pro samohlásku „é" jsou binárně iden­ tické soubory ve stejných rozsazích. Z těchto hodnot je vidět, že syntetizér pracuje ve frekvencích kolem komorního a (s databází cz2, 32bitová verze v OS GNU/Linux) s přesností na přibližně 11 Hertzů, což odpovídá hodnotě kolem 45 centů2. To je hod­ nota necelé poloviny temperovaného půltónu a pro srovnání lze uvést, že největší rozdíl mezi frekvencemi tónů v ladění Werckmeister III(blíže v 3.4.4) a v rovno­ měrně temperovaném ladění (obě jsou v přiložené aplikaci implementovaná) je 12 centů. Zdá se tedy, že se syntetizérem MBROLA je implementace jiných běžných ladění naprosto zbytečná, protože přesnost syntézy je výrazně nižší než rozdíly mezi jednotlivými laděními a minimálně v oktávách blízkých jednočárkované oktávě je zbytečné uvádět frekvence s přesností v desetinných číslech. PHO soubor lze doplnit komentáři, které se uvozují středníkem. V současnosti platí omezení na nejvýše 20 frekvenčních bodů u jednoho fonému a také omezení na maximální délku fonému, která je závislá na frekvenci. Dokumentace bohužel neuvádí žádný vztah, ze kterého by bylo možné tuto hodnotu vypočítat a v případě, že je tato hodnota přesáhnuta, syntetizér havaruje s nepříliš logickým chybovým hlášením: _-a: Concat : PANIC, check your pitch :-) Z uvedeného popisu formátu je také vidět, že PHO soubory neobsahují údaj o hlasitosti, takže se syntetizérem MBROLA nelze přímo implementovat dynamiku.

1. Za bílé znaky považujeme mezeru a tabulátor. Oproti běžné praxi za ně nebude považováno odřádkování! 2. cent - jednotka ladění, počítá se jako jedna setina temperovaného půltónu, což je 1/1200 oktávy 120 ( {/2 = 1,0005777895), pro tóny o frekvencích a a b se spočítá 12001og2(f)

26 3. IMPLEMENTACE

MBROLA generuje na základě koncovky požadovaného výstupního souboru audio ve formátu WAV (Microsoft PCM, 16 bitů, 16 kHz, monofónni), RAW, AU nebo AIFF. Nevýhodou tohoto syntetizéru je především to, že ačkoliv je pro nekomerční účely volně dostupný, jedná se o proprietární aplikaci s ne zcela dostačující dokumentací (např. nejpřesnější údaje o formátu PHO lze získat z nepříliš rozsáhlého README souboru, který je v instalčním balíčku). Naopak jeho dostupnost pro velké množství platforem a velké množství difónových databází pro různé jazyky jsou podstatnou výhodou. Pro češtinu jsou oficiálně dostupné dvě databáze: neúplná a méně kva­ litní databáze mužského hlasu czl a novější, úplná a kvalitnější databáze cz2, opět mužského hlasu. Stejně jako zmíněné oficiální databáze, i databáze cz3, která není dostupná z oficiálních webových stránek, vznikla na půdě Fakulty informatiky, Ma­ sarykovy univerzity, ale je stále ve fázi vývoje a může obsahovat chyby. Databáze cz3 obsahuje ženský hlas a pro potřeby českého zpěvu je tedy možné používat jak mužský tak ženský hlas. Výstup syntetizéru je vhodné normalizovat (tj. upravit hlasitost na průměrnou hodnotu). K tomu je vhodné použít aplikaci normalize-audio, která je dostupná v repo­ zitářích všech velkých distribucí GNU/Linuxu. Pro mixování jednotlivých hlasů do vícehlasého zpěvu je vhodná aplikace sox (s parametrem -m), taktéž běžně dostupná v repozitářích. Tyto činnosti lze automatizovat pomocí přiloženého skriptu pro shell BASH, který je pojmenován misip-skript. sh. Jako povinný argument přebírá prefix názvu PHO-souboru, volitelně lze zadat název difónové databáze (předna­ staveno cz2) a jako třetí (opět volitelný) parametr lze zadat, jak mixovat výsledné audio soubory. Pokud není parametr zadán, mixují se všechny dostupné WAV sou­ bory s daným prefixem do jednoho. Zadá-li se „sloky", budou mixovány do jednoho souboru vždy soubory s textem ze stejné stopy a sloky. Pro hodnotu „nic" se nebude nic mixovat. Skript ke svému běhu vyžaduje zmíněné dvě pomocné aplikace.

3.3 Parser SMF

V původním plánu bylo využití existujících knihoven pro parsování SMF sou­ borů. Bohužel se záhy ukázalo, že nabídka těchto knihoven (pod vhodnou licencí) je nedostačující a jediná vhodná knihovna Improv 3 je zbytečně komplexní a orientovaná spíše na samotný MIDI protokol než na SMF. Proto se ukázalo jako efektivnější řešení vytvořit vlastní parser s integrací s vhodnou datovou strukturou pro reprezentaci zpěvu (třída Voice v souboru smf par ser . h, resp. smf par ser . cc). Tento parser zpracovává SMF verze 0 nebo 1 s běžným časováním (SMPTE není podporováno). Vzhledem k možnostem syntetizéru není zaimplementována podpora kontrolérů (viz str. 6) a v současné verzi ani změna tempa během skladby (tempo je nastaveno na standardní nebo podle prvního výskytu příslušné meta události). Parser počítá počty slok textu i hlasů v jednotlivých stopách a vrací vždy jednohlas s konkrétním textem formou třídy Voice. Obsahuje funkci pro sloučení dvou a

3. http://improv.sapp.org/

27 3. IMPLEMENTACE

více stop, která provede serializaci událostí a přepočítání hodnot delta-time, což je potřebné pro syntézu s notami a textem v oddělených stopách. V této funkci není dořešen výskyt meta události konce stopy, takže sloučená stopa jich bude obsahovat tolik, z kolika stop byla sloučena. Pro zpracování při syntéze zpěvu to nevadí, ale není vhodné takovou stopu zpětně ukládat. Nicméně parser v současné verzi dokáže jen číst, nikoliv zapisovat. Pro zjednodušení dalšího zpracování jsou události v jednom časovém okamžiku seřazeny do pořadí „vypnutí not", „texty", „zapnutí not". To přináší výrazné zjed­ nodušení ve fázi přiřazení not k textům. Pro urychlení běhu neprobíhá kontrola, zda v jednom časovém okamžiku není nějaká nota zapnuta a ihned vypnuta. To lze považovat za nekorektní vstup a kontrola by neúměrně zpomalila zpracování. Jed­ notlivé bloky událostí v konkrétním okamžiku prochází kontrolou jednoduchým au­ tomatem, který akceptuje sekvence v uvedeném pořadí, případně proložené jinými událostmi na libovolném místě. Pokud není blok akceptován jsou události zapnutí a vypnutí not přeskládány na principu lineárního průchodu od začátku bloku po první textovou událost a přesunutí všech „zapnutí noty" na konec bloku. Analogicky se při průchodu od konce posouvá „vypnutí noty". Vzhledem k průměrné délce bloku lze tolerovat lineární složitost.

3.4 Modifikátory

3.4.1 Princip

Celá aplikace je programována s ohledem na další možná rozšíření a především různá testování. Proto je základní datovou strukturou třída reprezentující jednohlasý zpěv (Voice), která obsahuje veškerá data potřebná pro jednotlivé fáze zpracování, aťuž jde o vektor midi událostí nebo strukturu slabik či samotných fonémů a not. V aplikaci jsou pak přítomny třídy, které nějakým způsobem tuto datovou struk­ turu modifikují. Například tak, že přepočítají notové midi události na konkrétní frekvence. Tyto třídy jsem pracovně nazval modifikátory a v současné době existují tři základní, které budou rozebrány v následujících podkapitolách. Jde o modifikátory pro transkripci fonetickou, frekvenční a časovou (délek not a fonémů). Vzhledem ke své různorodosti modifikátory neimplementují žádné předem dané rozhraní, ačkoliv by bylo možné požadovat existenci metody process (Voices v). Tento přístup umožňuje sledovat chování syntetizovaného zpěvu na základě změny určitých charakteristik pouhým zařazením dalšího modifikátoru při samotné syntéze bez zásahu do ostatních částí syntézy.

3.4.2 Fonetická transkripce

Fonetická transkripce je implementovaná pomocí vyhledávacího stromu s pravi­ dly i výjimkami. Výjimky jsou považovány za „rozsáhlejší pravidlo". Strom je velice podobný struktuře z obrázku 4.6 na str. 26 ve [2], odkud jsem převzal základní myš-

28 3. IMPLEMENTACE lenku. Pravidla jsou z obecného tvaru upravena do podoby a^B/C_D, ve které a už není řetězec, ale pouze jeden znak. Navíc se k pravidlu přidává údaj o počtu znaků pravého kontextu, které mají být po aplikaci pravidla přeskočeny (ke srovnání str. 15). Toto vyjádření je ekvivalentní s původním. Strom je pak tvořen uzly, které jsou určeny jedním znakem a případně nesou řetězec fonémů k přepsání, prioritu pravi­ dla a údaj o počtu přeskakovaných znaků vpravo (např. pravidlo SLOVO^? / _ se ekvivalentně přepíše naS^? / _LOVO s údajem o přeskakování 4 následujících znaků). Levý kontext se umisťuje jako větev pod levým potomkem. Pravý kontext se umístí jako pravá větev pod posledním uzlem levého kontextu. Samotný řetězec fonémů je vždy umístěn v posledním uzlu pravého kontextu. Ukázka stromu s fonetickými pravidly je na obrázku 3.4. Z něj je snad vidět i to, že jak kořen, tak leví i praví potomci uzlů, jsou asociativní pole, jejichž klíči jsou znaky. Pravidla (pro češtinu) bývají velmi krátká a proto se obvykle neprohledávají více než dvě úrovně stromu a na každé úrovni se hledá v těchto polích v logaritmickém čase, což vede k dobré časové složitosti pro nalezení všech pravidel, která lze na daný uzel aplikovat. Zároveň se uplatňuje priorita pravidel a proto je při jejich procházení vždy zvoleno to s vyšší prioritou. Pravidla lze do stromové struktury vložit jednak příslušnou metodou, ale také načtením souboru pravidel. Jeho formát byl navržen s ohledem na společné ulo­ žení dat pro přepis délek. Soubor je čistě textový a (kromě komentářů) ve znakové sadě ASCII. Jednotlivé řádky jsou buď prázdné nebo obsahují fonologické pravidlo zapsané ve tvaru: A>B/C_D Tento tvar tedy odpovídá původní definici fonologického pravidla. Na uprave­ nou variantu s přepisem jednoho znaku a počtem přeskočení je převedeno interně před vložením do stromu. Jelikož řetězec fonémů B obsahuje jednotlivé fonémy oddělené mezerou, nelze jej oddělovat bílými znaky. Ostatní části mohou být před­ cházeny i následovány libovolným počtem mezer či tabulátorů. Podmínkou je, že celé pravidlo se nachází na jednom řádku. V libovolném místě je možné umístit komentář, který se uvozuje znakem mříže (#). Při čtení souboru je tento znak, i všechny následující až do konce řádku, odmazán. Pokud bezprostředně za znakem mříže následuje některý ze speciálních symbolů @, $ nebo &, pak jsou následující údaje určeny pro transkriptor délek. Jelikož SMF soubory mohou obsahovat text v různém kódování, je žádoucí pro­ vést před zpracováním konverzi na nějakou vhodnou znakovou sadu. Za tuto sadu byla zvolena sada ASCII. Její znaky mají poněkud pozměněný význam tak, jak je konvertuje z původního kódování převodní tabulka v souboru charset. cc. Ta­ bulka nyní uvádí převod pro UTF-8, ISO-8859-2 a CP1250. Základní znaky latinky se přepisují na malá písmena latinky. České znaky s čárkami a háčky se přepisují na odpovídající velká písmena latinky (např. á se přepíše na A, ř na R apod.) s výjim­ kami: é se přepíše na E, ale ě se přepisuje na znak ~ a ů je nahrazeno znakem @. Znak pomlčky a mezery se zachovává, ostatní znaky jsou vypuštěny bez náhrady.

29 3. IMPLEMENTACE

č. pravidlo (vzor) 1 0^? / SL_V0 SLOVO 2 0^? / SL_VNÍK L N K SLOVNÍK 3 o^? / SL_VNÍKOVÝ / \ SLOVNÍKOVÝ o S z6 D8 L 4 0^? / 0L_V0 OLOVO ^rv \ 5 0^? / K_L0 M7 V V os KOLO 6 0^? / ZL_ \2\ ZLO N O, 7 0^? / M0L_ MOLO V 8 0^? / DN_ DNO X 9 0^? / — K, O Pravidla jsou zobrazena \ ve stromu. Na místě otaz- níkt i by měl být řetě- zec fonémů, na které se písmeno „O" v daném v kontextu přepisuje. Šedé uzly stromu nesou sa­ i. motné přepisovací pravi­ dlo, které je pro názor­ nost uvedeno číslem.

Obrázek 3.4: Ukázka stromové struktury

30 3. IMPLEMENTACE

Tento přístup umožňuje snadné zajištění korektního běhu programu i při chybně zvolené znakové sadě nebo při nesmyslném vstupu (nepoznané znaky nebudou na výstupu). Zároveň se takto vypustí zbytečná interpunkce. Přepis do ASCII podoby probíhá ještě před aplikací fonologických pravidel, proto se tato zapisují právě zmí­ něnou znakovou sadou (proto je také soubor s pravidly ve znakové sadě ASCII). Řetězec B v pravidle se zapisuje ve fonetické abecedě zvolené difónové databáze. Pokud je použita databáze s jinou fonetickou abecedou, je nutné použít i jiný soubor s pravidly. Priorita pravidel je v souboru určena jejich pořadím. První pravidlo má nejnižší prioritu naopak pravidlo na konci souboru má nejvyšší prioritu a bude tedy v případě shodného kontextu upřednostněno. Vzhledem ke zpracovávání po slovech, nelze uplatnit pravidla pro spodobu mezi slovy.

3.4.3 Transkripce délek

Modifikátor transkripce délek not fonémům je deklarován v souboru not eText Aligner .h a implementován v not eText Aligner . cc. Kromě zpraco­ vání délek fonémů v závislosti na notové předloze ještě provádí přepsání frekvencí not, které spočítá modifikátor pro transkripci frekvencí, k příslušným fonémům (je­ likož tato úloha úzce souvisí s délkou a pozicí fonémů). Zpracování probíhá po slabikách s ohledem na melismata podle postupu popsa­ ném v kapitole 2.5. Oproti uvedenému algoritmu se při přesáhnutí délky not stan­ dardními délkami fonémů provede nový výpočet s minimálními délkami fonémů a ty se znovu kontrolují. Pokud je součet délek opět vyšší než celková délka not, rozdělí se délka not rovnoměrně mezi jednotlivé fonémy. To není zcela ideální, pro­ tože by měla být preferována samohláska a případně souhláska bezprostředně před ní. Správnost této varianty by však bylo zapotřebí prokázat důkladnějšími testy. Ve většině případů výpočet projde se standardními nebo minimálními hodnotami. Vstupní data pro výpočet jsou seznam samohlásek a hodnota pro jejich mini­ mální délku, seznam slabikotvorných souhlásek (pro potřeby hledání melismatu ve slabikách bez samohlásky) a seznam souhlásek s jejich minimální a standardní délkou. Tato data lze načítat ze souboru, který je společný s fonologickými pravi­ dly. Pro potřeby tohoto modifikátoru se hledají v textu sekvence #@, #& a #$. Za sekvencí znaků # @ se očekává číslo, které udá délku samohlásek v ms, a mezerou oddělené samohlásky až do konce řádku. Za znaky # & mají následovat mezerami oddělené slabikotvorné souhlásky (opět až do konce řádku). Znaky #$ jsou násle­ dovány souhláskou, hodnotou její minimální a obvyklé délky v ms, opět oddělené mezerami. Samohlásky i souhlásky se zde zadávají již ve fonetické abecedě dané difónové databáze, tudíž odpovídají znakům v části B fonologického pravidla.

31 3. IMPLEMENTACE

3.4.4 Transkripce frekvencí Transkriptor frekvencí slouží k přepisu midi not na odpovídající frekvence ve zvoleném ladění. Je deklarován v souboru freq.h a implementován v freq. cc. Vzhledem k nepřesnosti syntézy (jak bylo zmíněno na str. 26) je implementace vět­ šího množství ladění při použití syntetizéru MBROLA zbytečná. Základní ladění je rovnoměrně temperované a pro ilustraci je možné vyzkoušet ladění Werckmeister lir. Hodnoty rovnoměrně temperovaného ladění jsou počítány ze vzorce

n-9 fn 2— . i± 32 ve kterém fa značí frekvenci komorního a a n je identifikační číslo noty v MIDI. Platnost vzorce je zřejmá z faktu, že velikost temperovaného půltonu je 1v/2. Mocnina dvojky v součinu udává intervalovou vzdálenost zvoleného tónu od subsubkontra a a samotná frekvence komorního a je vydělena 25, což je interval pěti oktáv, o které je nutné komorní a snížit na hodnotu subsubkontra a. Hodnoty v ladění Werckmeister III jsou počítány poněkud složitěji, jelikož jsou v něm čtyři kvinty (od tónů C, G, D, H) zmenšeny o čtvrtinu pythagorejského kom- ma, tedy vyděleny y |IQ. Ostatní kvinty jsou nezmenšené, tzn. v poměru 3 : 2. Vpře- vodní funkci jsou předpočítané intervalové vzdálenosti jednotlivých tónů v oktávě vůči tónu a. Vezme-li se identifikační číslo noty modulo 12, získáváme číslo noty v rámci jedné oktávy a proto zvolíme správný koeficient z předpočítaných hod­ not intervalů. Toto číslo vynásobíme mocninou dvojky podle oktávy a hodnotou frekvence komorního a. Modifikátor umožňuje nejen volbu ladění, ale umožňuje i nastavení frekvence komorního a.

4. Werckmeister III - jedno z nerovnoměrně temperovaných ladění, které vytvořil v 17. století ně­ mecký varhaník Andreas Werckmeister

32 Kapitola 4

Existující projekty

4.1 Burcas

Marcus Uneson z university v Lund ve Švédsku vytvořil jako svoji diplomovou práci z fonetiky v roce 2002 aplikaci, která v součinnosti se syntetizérem MBROLA umí zpívat ve Švédštině, pro kterou je optimalizovaná. Na aplikaci se v současnosti už nepracuje a autor neposkytuje ani zdrojové kódy ani binární podobu programu. Na webových stránkách http: //person. sol. lu. se/MarcusUneson/music/ burcas/ pouze nabízí pět ukázkových souborů a především text práce (viz [13]). V něm zmiňuje mimo jiné i to, že zvolený programovací jazyk - Perl, není pro tento typ aplikace nejvhodnější a pro rozsáhlejší projekt by doporučil objektově orientovaný jazyk. Burcas narozdíl od mnou implementované aplikace přebírá na vstupu kromě souboru SMF ještě textový soubor, ze kterého načítá text písně. Uneson to zdůvodňuje větší dostupností SMF souborů bez textu. Zároveň také podotýká, že tento přístup způsobuje problémy s přiřazením textu k notám, jelikož předpokládá na každou notu jednu slabiku. Na parsování SMF souborů využívá externí aplikaci, která soubor převede do textové podoby. Ukázkové soubory mají poměrně dobrou kvalitu a také proto mi byl tento projekt inspirací při volbě tématu mé bakalářské práce.

4.2 Lyricos a Flinger

Projekt Lyricos byl před svým ukončením vyvíjen na OGI School of Science & En­ gineering, což je jedna z částí Oregon Health & Science University. Jeho zásadní výho­ dou bylo využití syntézy ve frekvenční doméně, což umožnilo poměrně snadné mo­ difikování charakteristik jako je vibrato apod. Velmi zajímavé jsou ukázky výstupu na adrese http: //cslu.cse.ogi. edu/tt s /research/ sing/ sing. html. Vstu­ pem byl pouze MIDI soubor. Projekt byl nahrazen novým, který se jmenuje Flinger a je (byl) vyvíjen tamtéž. Jeho funkcionalita by měla být shodná s původním projektem, ačkoliv je od základů přepsán a začleněn do TTS systému Festival,1 který je frameworkem pro syntézu řeči. Nicméně web projektu - http: //speech, bme.ogi . edu/tt s/f linger/ - také nejeví známky nějakého vývoje.

1. http://www.cstr.ed.ac.uk/projects/festival/

33 4. EXISTUJÍCÍ PROJEKTY

4.3 Zpívající počítač

Softwarová laboratoř Free(b)sofl obecně prospěšné společnosti Brailcom je au­ torem projektu Zpívající počítač. Projekt je volně dostupný včetně zdrojových kódů pod licencí GNU/GPL z webových stránek http: //www. f reebsoft .org/ s inging-computer a poněkud netradičně integruje notační sázecí systém Li­ lypond a TTS systém Festival. Integrace spočívá v začlenění nového příkazu \festival nebo \festivalsyl (liší se podle zpracování po slovech nebo po slabikách - první varianta pro angličtinu, druhá pro češtinu), které se zavedou direk­ tivou \ include "festival. ly". Skladba, která je za tímto příkazem uvedena se exportuje do zvoleného XML souboru, který pak tvoří vstup TTS Festival. Přesněji je tento soubor předán jako parametr spolu se zvoleným hlasem skriptu lilysong, který za použití TTS Festival vygeneruje audio soubor ve formátu WAV. Podle údajů v CVS je většina souborů projektu starších než jeden rok, přesto se najde i soubor změněný na konci února 2008. Projekt je nejspíš již pouze udržován, což také odpovídá poměrně dobrému výstupu syntézy. Oproti mnou implemento­ vané aplikaci má Zpívající počítač lepší výsledky v členění délek fonémů, především pokud jde o zpěv dlouhé samohlásky na krátké notě nebo naopak krátké samohlásky na dlouhé notě. To přispívá k větší přirozenosti výsledného zpěvu. Přesto je tento projekt poněkud omezen tím, že se specializuje pouze na vstupní soubory Lilypondu, nicméně lze předpokládat, že nevidomí dají přednost sazbě not v tomto volně do­ stupném a textově orientovaném systému, než aby používali drahé notační editory s grafickým rozhraním, které nelze zobrazit ani na Braillově terminálu ani jej nelze přečíst čtečkou. Toto omezení také zmenšuje existence skriptu na převod SMF do zdrojového souboru Lilypondu. Ten by však bylo nutné ještě upravit. Z hlediska instalace stačí v operačním systému GNU/Linux v distribuci Ubuntu doinstalovat z repozitářů balíčky systému Festival a jeho podporu pro češtinu. Na stránkách projektu je připravený balíček TAR, ze kterého stačí podle návodu v sou­ boru README. c s rozkopírovat čtyři soubory do příslušných adresářů. Tím je in­ stalace hotova. Při testech jsem narazil na problém, že volba češtiny parametrem es u skriptu lilysong nefungovala (zpěv měl anglickou výslovnost), nicméně konkrétní volbou hlasu voice_czech_ph se tento problém vyřešil. Pokud je tedy možný zásah do zdrojového souboru partitury v programu Lilypond, je aplikace Zpívající počítač vhodnou jak pro češtinu tak pro angličtinu. Pokud srovnáme projekt Zpívající počítač s aplikací Misip, je výhodou Zpívají­ cího počítače lepší algoritmus zpracování délek fonémů a podpora angličtiny. Oproti tomu Misip nabízí vyšší modularitu, je přehlednější pro potřeby jakýchkoliv úprav kódu, umožňuje snadné začlenění dalších jazyků a modifikaci výslovnosti změnou údajů o délce fonémů v souboru fonologických pravidel. Jeho největší výhodou je nezávislost na aplikaci Lilypond a přímá podpora vícehlasého zpěvu, kterou je nutné při použití Zpívajícího počítače nahrazovat samostatným zápisem jednotli­ vých hlasů.

34 4. EXISTUJÍCÍ PROJEKTY

4.4 Melissa a K.L.E.M.

Na stránkách http://www.silexcreations.com/melissa/ lze najít pre­ zentaci „virtuální zpěvačky" Melissy Ta je výtvorem Silex creations inc. a jedná se údajně o syntézu za použití syntetizéru MBROLA. Nicméně efektní flashová prezen­ tace neobsahuje žádné bližší údaje a obsahuje jen jednu ukázku. Z dílny stejné firmy vychází i prezentace „rádia" K.L.E.M. na webu http: //www. silexcreations . com/klem/, kde je umístěno 5 ukázek elektronického zpěvu včetně doprovodu syntetizovaného syntetizérem MBROLA a hlasem ca2. Tato firma nabízí produkt Musix, který umožňuje na zadaný text aplikovat me­ lodii z virtuální klavitury nebo přímo syntetizovat z MIDI souboru. Nicméně bližší údaje nejsou uvedeny.

4.5 Vocaloid

Vocaloid, produkt firmy Yamaha, je ze zmíněných aplikací jednoznačně nejkva­ litnější, ale podporuje zatím pouze angličtinu (jeden mužský a dva ženské hlasy) a japonštinu (jeden mužský a ženský hlas). Byla vydaná i verze 2, která podporuje různé hudební styly, ale opět pouze ve zmíněných dvou jazycích. Vocaloid tvoří syntetizér a grafický editor, který umožňuje zadávat text, notový předpis a výrazové prostředky jako dynamiku, vibráto, legátový zpěv apod. Samotné knihovny s hlasy vytváří a prodávají jiné firmy jako své produkty bez účasti Yamahy Z technického hlediska jde o syntetizér ve frekvenční doméně speciálně vyvíjený pro potřeby syntézy zpěvu. Proto jsou také hlasy nahrávány profesionálními zpěváky, z jejichž nahrávek se získávají i parametry pro zmíněné vibráto nebo změny intonace. Na adrese http: //www. vocaloid. com/ lze získat nejen informace o aplikaci a ukázkové nahrávky, ale i odkaz na zdroj demoverze jednoho ženského hlasu v an­ gličtině. Výstup zní trochu hůře než ukázkové soubory, ale všechny ovlivnitelné parametry jsou patrné, hlas je vcelku přirozený a uživatelské rozhraní je intuitivní a logicky členěné. Aplikace umí načítat SMF soubory (demoverze pouze přiložené ukázkové), takže je lze zpracovat včetně doladění nepřesností v grafickém editoru, před samotnou syntézou či přehráním. Zásadní nevýhodou je dostupnost pouze pro MS Windows XP a vyšší. Na verzi pro platformu Apple Macintosh se údajně bude v budoucnu pracovat, o verzi pro OS GNU/Linux se neuvažuje. Přesto jsem demoverzi zcela bez problémů nainstaloval a otestoval na počítači s Ubuntu 7.10 s použitím Wine 0.9.53.

35

Kapitola 5 Možnosti dalšího rozvoje

Jelikož program Misip vznikal zcela od začátků a v rozsahu bakalářské práce, je jeho funkcionalita v některých ohledech omezená. Nabízí se několik základních oblastí, ve kterých by se dal dále vylepšovat pro spolehlivější použití aťuž při vlastní syntéze zpěvu nebo při analýze a testování zpívaného projevu a jeho vlastností. Vhodnými oblastmi dalšího rozvoje jsou:

Lepší počítání délek fonémů. V práci je zmíněn přesnější výpočet délek fonémů nikoliv po slabikách ale členěním na bloky, které začínají samohláskou. Tím by se vylepšil rytmus skladeb. Současná verze modifikátoru také nerozlišuje dlouhé a krátké samohlásky (samohláska je vždy natahována, aby se vypl­ nila délka asociovaných not), což ve výsledné syntéze nezní dobře. Bylo by vhodné analyzovat nahrávky zpěváků a stanovit postup, jak krátké a dlouhé samohlásky rozlišit. Zároveň by se v nahrávkách měl zkoumat postup, jakým zpěvák zkracuje nebo upravuje výslovnost slabik, které jsou v poměru k přiřa­ zeným notám příliš dlouhé a tento postup implementovat ve fázi rozpočítání velmi krátkého časového kvanta pod součtem minimálních délek fonémů.

Integrace s jinými syntetizéry. Pro kvalitnější výstup v oblasti intonace a možného využití alternativních ladění by bylo vhodné zmapovat možnosti integrace s jinými syntetizéry, např. s TTS Festival. Nabízí se možnost vytvořit třídu exportující data místo formátu PHO do XML formátu, který je použit v pro­ gramu Zpívající počítač. Předem je třeba ověřit, s jakou přesností intonují alternativní syntetizéry.

Podpora změny tempa. Parser neeviduje změny tempa, ačkoliv příslušné události jsou načítány. Modifikátor výpočtu délek bere v úvahu jen první nalezený výskyt takové události. Většina písní změny tempa neobsahuje a případně je lze simulovat kostrbatějším notovým předpisem nebo rozdělením skladby na více samostatných částí, přesto by se podpora této funkcionality hodila.

Podpora kontrolérů. Datová struktura Voice nezpracovává kontroléry Implemen­ tace jmenovitě kontroléru hlasitosti a změny ladění (angl. pitch bend) by mohla být žádoucí obzvláště v návaznosti na jiné syntetizéry. Případně by bylo možné vyřešit změny dynamiky manipulací s výstupním souborem pomocí externí aplikace.

37 5. MOŽNOSTI DALŠÍHO ROZVOJE

Fonologická pravidla jiných jazyků. Vytvořením souborů fonologických pravidel pro různé jiné jazyky by mohla vzniknout podpora například pro klasickou výslovnost latiny (MBROLA disponuje difónovou databází pro latinu) nebo jiné další jazyky, které mají výslovnost založenou na pravidlech.

38 Kapitola 6 Shrnutí

V této práci jsem se věnoval problematice počítačově syntetizovaného zpěvu. V první kapitole jsem stručně nastínil historii syntézy řeči s důrazem na zpěv a vyložil cíle, kterých jsem chtěl dosáhnout, včetně motivace k práci na nich. V druhé kapitole jsem se věnoval teoretickým zákonitostem, zmínil rozdíly syn­ tézy zpěvu a mluveného projevu, rozebral MIDI protokol a formát MIDI souborů. V návaznosti na problematiku získání relevantních dat z MIDI souboru jsem nastínil postupy, jakými lze extrahovat jednohlasý zpěv a text písní. Vyložil jsem návrhy, jak algoritmicky řešit fonetickou transkripci textu písně, přepis frekvencí not vůči fonémům a přiřazení správných délek a pozic fonémům. Tyto teoretické základy jsem rozvinul ve třetí kapitole, ve které jsem popsal hlavní části implementované aplikace Misip. Zároveň jsem popsal možnosti syntetizéru MBROLA. Pátá kapitola této práce obsahuje základní popis pěti projektů z oblasti syntézy zpěvu, z nichž jeden podporuje i češtinu (nicméně oproti aplikaci Misip nenabízí takovou modularitu, je pevně vázán na notační editor Lilypond a nenabízí přímou podporu vícehlasého zpěvu). Na závěr jsem zmínil základní možnosti, jak dále roz­ víjet výsledky této práce za účelem kvalitnější syntézy nebo výzkumu vlastností syntetizovaného zpěvu v časové doméně. Přestože jsem již v úvodní kapitole uvedl, že pro potřeby zpěvu by byla vhodnější syntéza ve frekvenční doméně a že syntetizér MBROLA nedisponuje tak přesnou in­ tonací, aby se projevily např. rozdíly v různých laděních, domnívám se, že práce splnila vytyčené cíle. Aplikace bez prolémů zvládá automatizovaně syntetizovat i vícehlasý zpěv vysázený aplikací Lilypond s exportem do SMF a dokáže zpracovat valnou většinu dnes rozšířených MIDI souborů. Dokáže také zpracovávat soubory ve třech různých kódováních a zvládá správně syntetizovat i melismata. Dostupný seznam fonologických pravidel provedl na testovacích souborech bezchybnou tran­ skripci a výsledné syntéze je velmi dobře rozumět. Zároveň je možné kdykoliv aplikaci rozšířit o fonologická pravidla jiných jazyků a s příslušnou difónovou data­ bází tak ověřit použitelnost i pro jiné jazyky (např. latinu nebo němčinu). Aplikace je detailně zdokumentovaná v syntaxi dnes oblíbeného JavaDocu, je striktně objek­ tově programovaná se základními moduly, což umožňuje její snadnější rozšiřování a různá testování. Každá základní datová struktura má přetížený operátor výstupu, takže lze snadno sledovat, jak se uložená data v jednotlivých fázích zpracování mění. K aplikaci je přiložen i skript v jazyce BASH, který usnadňuje dávkové zpracování.

39

* i-« O H*\ pozice počet hodnota B O v souboru bajtů HEX ASCII význam n> v 3 > 0000 4 4d 54 68 64 MThd identifikační hlavička SMF O 0004 4 00 00 00 06 délka hlavičky - vždy 6 bajtů < JU 0008 2 00 01 verze SMF - verze 1 3 JLK 0010 2 00 04 počet stop v souboru (4) C 0012 2 01 80 dělení (viz kapitola 2.3.2), zde 384 PPQN JLfc*K 0014 4 4d 54 72 6b MTrk záhlaví stopy N 0018 4 00 00 00 53 délka stopy, 83 bajty Jfc*U 0022 17 00 ff 03 Od první tři bajty identifikují meta-event „ná­ C/5 63 6f 6e 74 cont zev stopy" (03) v nulovém čase od začátku, 72 6f 6c 20 rol následující bajt udává (variabilní délka), že 74 72 61 63 trac následuje 13 bajtů dat O 6b k O 0039 13 00 ff 01 09 první tři bajty identifikují meta-event „li­ i-í 63 72 65 61 crea bovolný text" (01) v nulovém čase, jeden 74 6f 72 3a tor: bajt variabilní délkou specifikuje, že násle­ 20 duje 9 bajtů dat 0052 34 00 ff 01 le jako předchozí událost, ale s délkou dat 31 47 4e 55 20 GNU bajt 4c 69 6c 79 LILY 50 6f 6e 64 Pond 20 32 2e 31 2.1 30 2e 32 35 0.25 20 20 20 20 20 20 20 20 20 20 hr- K) pozice počet hodnota v souboru b aj tů HEX ASCII význam o M 0086 8 00 ff 58 04 metrum (meta-event 58) v délce 4 bajty dat. První dva určují předznamenání Z H 04 02 12 08 tempa (čtyřčtvrťové), třetí je počet pulsů na jeden úder metronomu, čtvrtý O určuje přesnost členění čtvrťových not Z 0094 7 OO ff 51 03 meta-event 51 - tempo (v nulovém čase), určuje 3 datovými bajty počet >^ Of 42 40 mikrosekund ve čtvrťové notě, zde 1 000 000, tj. 1 čtvrťová za sekundu c 0101 4 00 ff 2f 00 událost konce stopy (v nulovém čase), bez datových bajtů N 0105 4 4d 54 72 6b MTrk záhlaví další stopy > 0109 4 00 00 00 dl délka stopy je 209 bajtů 0113 4 00 ff 03 00 meta-event názvu stopy, zde ovšem s nulovou délkou dat C/l 1 O 0117 4 00 91 3c 7f nulový delta-time, zapnutí noty č. 60 (c ) na prvním kanále (91) s rychlostí C 127, tedy plnou hlasitostí Cd O 0121 5 83 00 81 3c posun o 384 pulsy (83 00 je ve formátu variable length bytes, str. 8, odstraníme 40 tedy vždy první bit z bajtu a máme hexadecimálně 0180), což odpovídá pulsům v jedné čtvrťové notě, tedy 1 sekundě, vypíná se nota č. 60 (c1) 0126 4 00 91 40 7f bez posunu (delta-time je 0), tj. ve stejném čase s vypnutím předchozí noty se zapíná nota č. 64 (e1) 0130 5 83 00 81 40 po 384 pulsech (1 čtvrťová) se vypne nota č. 64 40 0135 4 00 91 43 7f bez časového posunu sepne nota 67, g1 0139 5 83 00 81 43 po 384 pulsech se vypne nota č. 67 40 0144 18 00 91 41 7f zapnutí a po jedné vteřině (délka čtvrťové noty) vypnutí noty f1 (č. 65), 83 00 81 41 zároveň se zapíná opět c1 a po vteřině (384 pulsech) opět vypíná 40 00 91 3c 7f 83 00 81 3c 40 pozice počet hodnota v souboru bajtů HEX ASCII význam 0162 156 00 91 40 7f 00 91 3c 7f 8300 81 40 40 00 81 3c 40 00 91 43 7f 00 91 40 7f 00 91 3c 7f 8300 81 43 40 00 81 40 40 00 81 3c 40 00 91 37 7f 8300 81 37 40 00 91 3c 7f 00 91 40 7f 8300 81 40 40 00 91 40 7f 8300 81 3c 40 00 81 40 40 00 91 3e 7f 00 91 37 7f 8140 81 37 40 00 91 35 7f 8140 81 3e 40 00 91 40 7f 8300 81 40 40 00 91 41 7f 8300 81 35 40 00 91 36 7f 8300 81 41 40 00 81 36 40 00 91 3e 7f 00 91 37 7f 8440 81 37 40 00 91 35 7f 8140 81 3e 40 00 81 35 40 Ve výše zkráceném výpisu se pouze zapínají nebo vypínají jednotlivé noty. Pro přehlednost jsou tučně zvýrazněny variable length bytes, tedy bajty udá­ vající delta-time. Vždy první bajt za nimi určuje podle prvních čtyř bitů zapnutí (hexadec. 9) nebo vypnutí (hexadec. 8) noty, která je vždy na prvním kanále (protože následující 4 bity jsou vždy hexadec. 1). Vyskytují se zde hodnoty delta-time: 0 0, tj. událost probíhá ve stejném čase jako předchozí, O 8 3 0 0 - zde odstraníme první bit z obou bajtů a získáváme dekadicky 384, M což je počet pulzů v jedné čtvrtce, 81 4 0 - opět odstraněním prvních bitů H získáme dekadicky 192, což je polovina pulzů ve čtvrtce a jde tedy o délku O jedné osminky, 8 4 4 0 - dekadicky s odstraněním 1. bitů je to 576, což jsou tři >^ poloviny délky čtvrťové noty a jde tedy o čtvrtku s tečkou. Lze si povšimnout c vícehlasu - je zapnuto několik not zaráz. N 0318 4 00 ff 2f 00 konec stopy > 0322 4 4d 54 72 6b MTrk záhlaví další stopy 0326 4 00 00 00 37 data ve stopě budou mít 55 bajtů 0330 4 00 ff 03 00 název stopy bez datové části, tedy neuveden

Cd O OJ hr- hr- pozice počet hodnota v souboru b aj tů HEX ASCII význam o 0334 6 00 ff 05 02 .... textový meta-event (05) s dvoubajtovou datovou částí nesoucí znaky M 4f 76 Ov „Ov" H O 0340 9 83 00 ff 05 .... text posunutý o 384 pulsy (čtvrťová) se čtyřbajtovou datovou částí, která 04 c4 8d c3 nese dva znaky v kódování UTF-8 a sice „čá" >^ al c 0349 7 83 00 ff 05 • • • opět o délku čtvrťové noty posunutá textová událost se znaky „ci" N 02 63 69 ci > 0356 10 86 00 ff 05 ... delta-time 86 00 po odstranění prvních bitů z každého bajtu udává ča­ 05 c4 8d 74 . .t sový posun 768 pulsů, což je délka půlové noty (dvojnásobný počet C/l 76 65 ve pulsů než je ve čtvrťové), neboli 2 sekundy Datová část na pěti bajtech O C nese v UTF-8 zakódované znaky „čtve". Cd 0366 8 83 00 ff 05 .... opět o čtvrťovou notu posunutý text „rá" O 03 72 c3 al . r. . 0374 7 83 00 ff 05 .... o čtvrťovou notu posunutý text „ci" 02 63 69 . ci 0381 4 00 ff 2f 00 konec stopy - tato obsahovala jen text, zatímco předchozí jen noty, první stopa byla systémová, tj. ani text ani noty 0385 4 4d 54 72 6b MTrk záhlaví poslední stopy 0389 4 00 00 00 37 data stopy jsou v délce 41 bajt 0393 8 00 ff 03 04 .... název stopy se čtyřmi bajty dat nese text „\new" 5c 6e 65 77 .\new 0401 4 00 93 3c 7f hned na začátku se sepne na třetím kanále nota č. 60, tedy c1 0405 5 8c 00 83 3c s časovým posunem 1536 pulsů, což je čtyřnásobek čtvrťové neboli celá 40 nota, se tatáž nota vypne 0410 5 8c 00 93 3c opět s časovým posunem celé noty oproti předchozí události se zapíná 7f tón c1; jelikož do této chvíle žádný tón nezněl, znamená to, že zde byla pomlka v délce celé noty pozice počet hodnota v souboru bajtů HEX ASCII význam 0415 5 86 00 83 3c s odstupem půlové noty se znějící nota opět vypíná 40 0420 5 8c 00 93 37 7í opět po pomlce v délce celé noty se zapíná tón č. 55 (g malé) 0425 5 86 00 83 37 40 a po posunu o půlovou notu se vypíná 0430 4 00 ff 2f 00 konec poslední stopy a tím i celého souboru

Uvedený soubor je uložen na přiloženém CD jako Ukazky/ukazkaSMF .midi a jeho zdrojová podoba v Lilypondu s extenzí . ly tamtéž. Vygenerovaný notový zápis je následující:

Ovčáci čtveráci

lidová O M H "jJ^'iii-l'iS O f >^ třř-f *r r c Ov-čá-ci čtverá-ci N > 0/5

Ol

Příloha B Obsah CD

Přiložené CD obsahuje následující soubory a adresáře: Archivy mi s ip. tgz Komprimovaný archiv s aplikací Misip a její dokumentací text. tgz Komprimovaný archiv s textem práce Mbrola aplikace Adresář se zip-balíkem aplikace Mbrola pro OS GNU/Linux na platformě i386, ppc, alpha, ultral. Před po­ užitím neopomeňte přečíst přiložený soubor readme. txt s licencí. c z 2 Adresář s difónovou databází českého mužského hlasu cz2. c z 3 Adresář s difónovou databází českého ženského hlasu cz3 (nedokončená pracovní verze z května 2008). Misip do c Adresář s předgenerovanou dokumentací aplikace Misip ve formátu HTML. man Adresář s komprimovanou manuálovou stránkou aplikace Misip. Soubor stačí překopírovat do některého adresáře s manuálovými stránkami v systému. src Adresář se zdrojovými kódy a aplikací Misip předkompi- lovanou pro GNU/Linux i386. Doxyf ile Definiční soubor pro generování dokumentace aplikací do- xygen. f req.C C Implementace modifikátoru transkripce frekvencí. f req.h Deklarace modifikátoru transkripce frekvencí. chars et. c c Definice tabulky znaků pro převod kódování Latin2, UTF-8 a CP1250 na ASCII před fonetickou traskripcí. main. CC Hlavní funkce a jí přidružené funkce programu Misip. Maker ile Definiční soubor pro překlad aplikací Make. Standardní cíl generuje jak aplikaci tak dokumentaci. Samotná aplikace se generuje zadáním cíle misip, dokumentace cílem doc. Objektové soubory smaže cíl clear, misip Předgenerovaná binárka aplikace pro GNU/Linux na plat­ formě i386, formát ELF 32-bit LSB, dynamicky linkovaný.

47 B. OBSAH CD

noteText Al igner. cc Implementace modifikátoru pro přidělení délek not fonémům. noteText Al igner . h Deklarace modifikátoru pro přidělení délek not fonémům. parserexcept ions . h Deklarace výjimek parseru. phoexporter . cc Implementace exportní třídy pro formát PHO. phoexporter . h Deklarace exportní třídy pro formát PHO. ptree . cc Implementace tříd modifikátoru fonetické tran­ skripce (mj. stromové struktury fenologických pravidel). ptree.h Deklarace tříd modifikátoru fonetické tran­ skripce. re. cc Implementace tříd pro zpracování řetězce, kte­ rým se zadávají rozsahy hlasů a slok písní na vstupu aplikace Misip. re.h Deklarace tříd pro zpracování řetězce, kterým se zadávají rozsahy hlasů a slok písní na vstupu aplikace Misip. smfparser . cc Implementace parseru SMF. smf parser, h Deklarace parseru SMF. voice . cc Implementace základní datové struktury jedno­ hlasého zpěvu Voice a podřízených tříd. voiceexceptions . h Deklarace výjimek vyvolávaných při manipu­ laci s datovou strukturou jednohlasého zpěvu. voice . h Deklarace základní datové struktury jednohla­ sého zpěvu Voice a podřízených tříd. .misip-pravidla Soubor s fonologickými pravidly pro databázi cz2 a cz3. Nakopírujte do svého domovského adresáře nebo spouštějte aplikaci s parametrem -r. mi sip-script. sh Skript pro BASH usnadňující dávkové zpraco­ vání skladeb. Text Text práce včetně zdrojové podoby. Lze přeložit příkazem make, vyžaduje aplikace make, Lily- pond, pdfcslatex, ps2pdf, bibtex a makeindex. Ukázky Ukázky syntézy. Zdrojové soubory písní v Lily- pondu, PDF s notami, MIDI soubory, vygenero­ vané PHO soubory a WAV soubory. Komplet Všechny soubory (zdrojové, PHO, WAV, PS, PDF). Vy s 1 e dky Pouze zesyntetizované ukázky WAV.

48 Literatura

[1] DUTOIT, T.: An Introduction to Text-to-. Kluwer Academic Pub­ lishers, 1997, ISBN 0-7923-4498-7,285 s.

[2] DVOŘÁK, J.: Fonetická transkripce českého jazyka. Diplomová práce, Masarykova univerzita v Brně, Fakulta informatiky, 1999.

[3] FORRÓ, D.: Svět MIDI, úplný popis MIDI standardů, pre- a post-MIDI systémy, MIDI praxe. Grada, 1997, ISBN 80-7169-412-6, 375 s.

[4] GLATT, J.: MIDI File Format, [online], naposledy navštíveno 16. dubna 2008. URL http://www.borg.com/~jglatt/tech/midifile.htm

[5] van HEESCH, D.: Doxygen. [online], naposledy navštíveno 12. května 2008. URL http://www.stack.nl/~dimitri/doxygen/

[6] KURFÜRST, P: Základy hudební akustiky. Masarykova univerzita, 2000, ISBN 80-210-2333-3,41 s.

[7] MIDI Manufacturers Association Incorporated: SMF Lyric Meta Event Definition. [online], naposledy navštíveno 19. dubna 2008. URL http://www.midi.org/techspecs/rpl7.php

[8] NIENHUYS, H.-W.; NIEUWENHUIZEN, J.: LilyPond, music notation for everyone. [online], naposledy navštíveno 12. května 2008. URL http://www.lilypond.org/

[9] POMPINO-MARSCHALL, B.: Von Kempelen et al. - Remarks on the history of articulatory-acoustic modelling. In ZAS Papers in Linguistics, ročník 40, Humboldt-Universität zu Berlin and ZAS Berlin, 2005, s. 145-159, [online], naposledy navštíveno 10. dubna 2008. URL http://www.zas.gwz-berlin.de/papers/zaspi1/articles/ zp4 0/pompino-marschall_fina12.pdf

[10] PSUTKA, J.: Komunikace s počítačem mluvenou řečí. Academia, 1995, ISBN 8-02- 000203-0,287 s.

[11] RAMŠA, A.: Modelování prozódie české věty pro syntetizér MBROLA. Diplomová práce, Masarykova univerzita v Brně, Fakulta informatiky, 2002.

49 B. OBSAH CD

[12] The Mbrola team: The MBROLA PROJECT HOMEPAGE, [online], naposledy navštíveno 12. května 2008. URL http://tets.fpms.ac.be/synthesis/mbrola.html

[13] UNESON, M.: Burcas - a simple concatenation-based midi-to-singing voice synthesis system for Swedish. Diplomová práce, Dept. of Linguistics, Lund University, 2003, naposledy navštíveno 19. dubna 2008. URL http://person.sol.lu.se/MarcusUneson/music/burcas/pdf/ uneson_burcas_screen.pdf

[14] ŠPELDA, A.: Akustika. SPN, 1958,236 s.

50 Rejstřík

časový kód SMPTE, 9 událost, 5, 9 MIDI Manufacturers Asociation, 5 bajt datový, 5 normalizace, 27 stavový, 5 PHO formát, 26 cent, 26 PPQN, 9 chunks, 7 prozódie, 3 pulsy, 9 delta-time, 9 difón, 4 RMID, 8 division rovnoměrně temperované ladění, 19 SMF, 8, 9 stopa, 8 foném, 14 syntéza fonetická transkripce, 14 v časové oblasti, 4 fonologická pravidla, 14 ve frekvenční oblasti, 5 frekvence syntetizér vzorkovací, 5 mechanický, 1 SysEx, 8 General MIDI, 7 System exclusive, 8

IFF, 7 tón Interchange File Format, 7 základní hlasivkový, 3 intonace, 3 tempo IPA, 14 meta-event, 9 text písně Kempelen, 1 meta-event, 13 koartikulace, 4 track, 8 komorní a, 19 kontrolér, 6 variable length bytes, 8 Kvinta, 19 vokodér, 1 ladění, 18 Werckmeister III, 26, 32 melisma, 13 MIDI event, 5 message, 5

51