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
2
3
4
5 6 A B
Úvod 1.1 Historický nástin 1.2 Motivace a cíle Teorie syntézy zpěvu 2.1 Prístupy k syntéze zpěvu 2.2 MIDI protokol 2.3 SMF-Standard MIDI 2.3.1 Struktura souboru 2.3.2 Časování událostí 2.3.3 Verze 2.3.4 Notový zápis 2.3.5 Texty písní 2.4 Fonetická transkripce 2.5 Načasování a délky fonémů 2.6 Ladění Implementace 3.1 Obecné principy 3.2 MBROLA a zpracování výstupu 3.3 Parser SMF 3.4 Modifikátory 3.4.1 Princip 3.4.2 Fonetická transkripce 3.4.3 Transkripce délek 3.4.4 Transkripce frekvencí Existující projekty 4.1 Burcas 4.2 Lyricos a Flinger 4.3 Zpívající počítač 4.4 MelissaaK.L.E.M 4.5 Vocaloid Možnosti dalšího rozvoje Shrnutí Komentovaná ukázka SMF souboru Obsah CD
file
1 1 2 3 3 5 7 8 9 10 10 13 14 16 18 21 21 26 27 28 28 28 31 32 33 33 33 34 35 35 37 39 41 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 Wolfgang von Kempelen (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í software 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.
2
blíže v kapitole 2.2 a 2.3
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 nejmonotó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. I l l ] , ž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í Zapnutí noty 2 bajty: číslo noty a síla úhozu Individuální tlaková citlivost 2 bajty: číslo noty, hodnota Kontrolér 2 bajty: číslo a hodnota kontroléru Program (nástroj) 1 bajt, číslo programu Společná tlaková citlivost 1 bajt, hodnota Ohýbání tónu 2 bajty udávající hodnoty Systémová data různá délka a význam dat
9 A B C D E F
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 3 a 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 skladatelský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.
12
Striktní pravidla v harmonii např. zakazují tzv. paralelní kvinty, což znamená, že dva hlasy nesmí
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 A 6 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í RP017 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.
14
z latinského transcribe), ere, psi, ptum - přepisovat
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 14 15
délky2 <- PŘIDĚLDÉLKYFONÉMŮM(/2, d2) délky?, <- PŘIDĚLDÉLKYFONÉMŮM(/3, d3) return délkyl U délky2 U délky?
PŘIDĚLDÉLKYFONÉMŮM(/onémy [ ], celkováDélka)
1 délky[] ^ N I L 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 Z p r a c u j S l a b i k u názorně demonstruje, že pro správné zpracování melismat 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ívatelné (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 Pi s
J
J J JI J- i' J I ý i' J) p i1 -
-
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/Linux 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 zesyntetizovat 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 zesyntetizová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 zesyntetizová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 význam vzor význam vzor význam vzor význam
vzor význam
1/1 Z první stopy všechny kombinace hlasů i slok textu 1:2/2:1,3-5 Z první stopy vzít noty druhého hlasu a použít texty z druhé stopy, první a třetí až pátou sloku. 1-3:2,4/4-5 Z prvních tří stop vždy druhý a čtvrtý hlas a všechny sloky textu ze čtvrté a páté stopy. 1,3-4:1,3/4;1/2;1:1-2/3:4-6 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. 1 , 3 : 1 - 2 , 4 - 5 / 1 : 1 ; 11/11 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 r e . h a implementován v r e . 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
/
N
U \ \ (
i
N
[(SPCI jV-il*jŕcOM-^jY-Ľ^L/ŕ INU j] C, H, O H
C, H, O
HYPH W
W C, H, O
O, N
C, H, O
RJCT
C, H, O
N, H, O
[(COM2JJ 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 hlasy/tracky
CT4
i-i
9*
Syntéza
N rt> >V
Tvorba výstupu
MBROLA
L >
CO CO
>D/AW M/D/
SOUBORUX-^
PHO SOUBOR
cT >v o
<ŕ
t/i rirtK N
WAV SOUBOR
MBROLA
>|
NASTROJ SPOJUJÍCÍ WAV
^
Parsing
n ST SD
MBROLA
i. MIDI SOUBOR SMF v. 0, 1 ,
í?
MODIFIKÁTORY
ni
Fonetická transkripce
Přepis not na délku segmentu
Přepis not na frekvenci segmentu
VÝSTUPNÍ WAV SOUBOR.
<7
I—
3. IMPLEMENTACE
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:
< d é l k a >
[<pozice>
...]
Řádek začíná řetězcem (bez bílých znaků}) který určuje foně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 y o u r p i t c h
:-)
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á 12001og 2 (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 m i s i p - s k r i p t . 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 V o i c e v souboru smf p a r s e r . h, resp. smf p a r s e r . 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 V o i c e . 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 p r o c e s s (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 n a S ^ ? / _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 c h a r s e t . 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
č. 1 2
L
N K 3 /
o
D8
S z6
^rv M7
V
L
4
\
5
os
V
\2\
\
6
N O,
7
V
8
X
9
K, \
v
i.
pravidlo (vzor) 0 ^ ? / SL_V0 SLOVO 0 ^ ? / SL_VNÍK SLOVNÍK
o^? /
Pravidla jsou zobrazena ve stromu. Na místě otazníkt i by měl být řetězec fonémů, na které se písmeno „O" v daném kontextu přepisuje. Šedé uzly stromu nesou sa motné přepisovací pravi dlo, které je pro názor nost uvedeno číslem.
Obrázek 3.4: Ukázka stromové struktury
30
SL_VNÍKOVÝ
SLOVNÍKOVÝ 0 ^ ? / 0L_V0 OLOVO 0 ^ ? / K_L0 KOLO 0 ^ ? / ZL_ ZLO 0 ^ ? / M0L_ MOLO 0 ^ ? / DN_ DNO 0^? / — O
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 n o t e T e x t A l i g n e r .h a implementován v n o t e T e x t A l i g n e r . 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 f r e q . h a implementován v f r e q . 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 2 5 , 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 komma, tedy vyděleny y |IQ. Ostatní kvinty jsou nezmenšené, tzn. v poměru 3 : 2. Vpřevodní 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 h t t p : / / p e r s o n . s o l . l u . s e / M a r c u s U n e s o n / m u s i c / b u r c a s / 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 h t t p : / / c s l u . c s e . o g i . e d u / t t s / r e s e a r c h / s i n g / s i n g . h t m l . 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 - h t t p : / / s p e e c h , b m e . o g i . e d u / t t s / f l i n g e r / 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 h t t p : //www. f r e e b s o f t . o r g / s i n g i n g - c o m p u t e r 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 \ f e s t i v a l nebo \ f e s t i v a l s y l (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 \ i n c l u d e " f e s t i v a l . l y " . 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 l i l y s o n g , 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 e s u skriptu l i l y s o n g nefungovala (zpěv měl anglickou výslovnost), nicméně konkrétní volbou hlasu v o i c e _ c z e c h _ p h 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 h t t p : / / w w w . s i l e x c r e a t i o n s . c o m / m e l i s s a / 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 h t t p : //www. s i l e x c r e a t i o n s . 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 h t t p : //www. v o c a l o i d . 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 V o i c e 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. M O Ž N O S T I D A L Š Í H O
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
pozice v souboru
počet bajtů
0000 0004 0008 0010 0012
4 4 2 2 2 4 4 17
0014 0018 0022
0039
0052
13
34
hodnota HEX ASCII 4d 00 00 00 01 4d 00 00 63 72 74 6b 00 63 74 20 00 47 4c 50 20 30 20 20 20
54 00 01 04 80 54 00 ff 6f 6f 72
68 64 00 06
72 00 03 6e 6c 61
6b 53 Od 74 20 63
f f 01 09 72 65 61 6f 72 3a ff 4e 69 6f 32 2e 20 20 20
01 55 6c 6e 2e 32 20 20
le 20 79 64 31 35 20 20
MThd
MTrk
cont rol trac k crea tor:
GNU LILY Pond 2.1 0.25
* O význam identifikační hlavička SMF délka hlavičky - v ž d y 6 bajtů verze SMF - verze 1 počet stop v s o u b o r u (4) dělení (viz kapitola 2.3.2), z d e 384 P P Q N záhlaví stopy délka stopy, 83 bajty p r v n í tři bajty identifikují meta-event „ná zev s t o p y " (03) v n u l o v é m čase od začátku, následující bajt u d á v á (variabilní délka), že následuje 13 bajtů dat p r v n í tři bajty identifikují meta-event „li b o v o l n ý text" (01) v n u l o v é m čase, jeden bajt variabilní délkou specifikuje, že násle duje 9 bajtů dat jako p ř e d c h o z í událost, ale s délkou dat 31 bajt
B
n> 3 O < JU
3
JLK
C
fc*
JLK
N
fc*
JU
C/5
O O i-í
i-« H*\
O
v >
hrK)
pozice v souboru
počet b aj tů
0086
8
00 f f 58 04 04 02 12 08
0094
7
OO Of 00 4d 00 00 00
0101 0105 0109 0113 0117
4 4 4 4 4
hodnota HEX ASCII
význam
o M
00 81 40
metrum (meta-event 58) v délce 4 bajty dat. První dva určují předznamenání tempa (čtyřčtvrťové), třetí je počet pulsů na jeden úder metronomu, čtvrtý určuje přesnost členění čtvrťových not meta-event 51 - tempo (v nulovém čase), určuje 3 datovými bajty počet mikrosekund ve čtvrťové notě, zde 1 000 000, tj. 1 čtvrťová za sekundu událost konce stopy (v nulovém čase), bez datových bajtů záhlaví další stopy délka stopy je 209 bajtů meta-event názvu stopy, zde ovšem s nulovou délkou dat nulový delta-time, zapnutí noty č. 60 (c1) na prvním kanále (91) s rychlostí 127, tedy plnou hlasitostí posun o 384 pulsy (83 00 je ve formátu variable length bytes, str. 8, odstraníme 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) bez posunu (delta-time je 0), tj. ve stejném čase s vypnutím předchozí noty se zapíná nota č. 64 (e1) po 384 pulsech (1 čtvrťová) se vypne nota č. 64
91 43 7f 00 81 43
bez časového posunu sepne nota 67, g1 po 384 pulsech se vypne nota č. 67
91 00 00 83 40
zapnutí a po jedné vteřině (délka čtvrťové noty) vypnutí noty f1 (č. 65), zároveň se zapíná opět c1 a po vteřině (384 pulsech) opět vypíná
ff 42 ff 54 00 ff 91
51 40 2f 72 00 03 3c
03 00 6b dl 00 7f
0121
5
83 00 81 3c 40
0126
4
00 91 40 7f
0130
5
0135 0139
4 5
0144
18
83 40 00 83 40 00 83 40 7f 3c
41 81 91 00
7f 41 3c 81
MTrk
Z H O Z
>^
c N
> <J->
C/l
O C Cd
O
pozice v souboru
počet bajtů
0162
156
0318 0322 0326 0330
4 4 4 4
hodnota HEX ASCII
význam
00 91 40 7 f 00 91 3c 7f 8300 81 40 40 00 81 3 c 40 00 91 43 7 f 00 91 40 7f 00 91 3c 7 f 8300 81 43 40 00 81 40 40 00 81 3 c 40 00 91 37 7 f 8300 81 37 40 00 91 3c 7 f 00 91 40 7f 8300 81 40 40 00 91 40 7 f 8300 81 3c 40 00 81 40 40 00 91 3e 7 f 00 91 37 7f 8140 81 37 40 00 91 35 7 f 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 7 f 00 91 37 7f 8440 81 37 40 00 91 35 7 f 8140 81 3e 40 00 81 35 40 Ve výše zkráceném v ý p i s u se p o u z e zapínají n e b o vypínají jednotlivé noty. Pro p ř e h l e d n o s t jsou tučně z v ý r a z n ě n y variable length bytes, tedy bajty u d á vající delta-time. V ž d y p r v n í bajt za n i m i určuje p o d l e prvních čtyř bitů z a p n u t í (hexadec. 9) nebo v y p n u t í (hexadec. 8) noty, která je v ž d y n a p r v n í m kanále (protože následující 4 bity jsou v ž d y hexadec. 1). Vyskytují se zde h o d n o t y delta-time: 0 0, tj. událost probíhá ve stejném čase jako předchozí, 8 3 0 0 - z d e odstraníme p r v n í bit z obou bajtů a získáváme dekadicky 384, což je počet p u l z ů v jedné čtvrtce, 81 4 0 - opět o d s t r a n ě n í m prvních bitů získáme dekadicky 192, což je polovina p u l z ů ve čtvrtce a jde t e d y o délku jedné osminky, 8 4 4 0 - dekadicky s o d s t r a n ě n í m 1. bitů je to 576, což jsou tři poloviny délky čtvrťové n o t y a jde tedy o čtvrtku s tečkou. Lze si p o v š i m n o u t vícehlasu - je z a p n u t o několik not zaráz. 00 f f 2f 00 konec stopy 4d 54 72 6b MTrk záhlaví další stopy 00 00 00 37 data ve stopě b u d o u mít 55 bajtů 00 f f 03 00 n á z e v stopy bez datové části, tedy n e u v e d e n
O M H
O
>^
c N
> <J->
Cd
O OJ
hrhr-
pozice v souboru
počet b aj tů
0334
6
0340
0349 0356
0366 0374
hodnota HEX ASCII ff
4f
76
9
83
00
7
04 c 4 8 d c 3 al 83 0 0 f f 0 5
•• •
02
63
69
ci
86
00
ff
05
...
05
c4
8d
74
. .t
76
65
10
8 7
05
02
....
00
Ov ff
05
....
00
ff
05
03
72
c3
al
83
00
ff
05
02
63
69
0381
4
00
ff
2f
0385 0389 0393
4
4d
54
72
6b
4
00
00
00
37
8
00
ff
03
04
5c
6e
65
77
93
3c
7f
.... . r. . .... . ci
00
0401 0405
4
00
5
0410
5
8c 00 8 3 3 c 40 8c 00 93 3 c 7f
o
textový meta-event (05) s dvoubajtovou d a t o v o u částí nesoucí z n a k y „Ov" text p o s u n u t ý o 384 p u l s y (čtvrťová) se čtyřbajtovou d a t o v o u částí, která nese d v a z n a k y v k ó d o v á n í UTF-8 a sice „čá"
M H
O
>^
c
ve
83
význam
MTrk .... .\new
opět o délku čtvrťové n o t y p o s u n u t á textová událost se z n a k y „ci"
N
> delta-time 86 00 p o odstranění p r v n í c h bitů z k a ž d é h o bajtu u d á v á ča sový p o s u n 768 p u l s ů , což je délka p ů l o v é n o t y (dvojnásobný počet p u l s ů než je ve čtvrťové), neboli 2 s e k u n d y Datová část n a pěti bajtech nese v UTF-8 z a k ó d o v a n é z n a k y „čtve". opět o čtvrťovou n o t u p o s u n u t ý text „ r á " o čtvrťovou n o t u p o s u n u t ý text „ci" konec stopy - tato obsahovala jen text, zatímco p ř e d c h o z í jen noty, p r v n í stopa byla systémová, tj. ani text ani n o t y záhlaví poslední stopy data stopy jsou v délce 41 bajt n á z e v stopy se čtyřmi bajty dat nese text „ \ n e w " h n e d n a začátku se sepne n a třetím kanále nota č. 60, tedy c 1 s časovým p o s u n e m 1536 p u l s ů , což je čtyřnásobek čtvrťové neboli celá nota, se tatáž nota v y p n e opět s časovým p o s u n e m celé n o t y oproti p ř e d c h o z í události se zapíná tón c 1 ; jelikož d o této chvíle ž á d n ý tón nezněl, z n a m e n á to, že zde byla p o m l k a v délce celé n o t y
<J->
C/l
O C Cd
O
pozice v souboru
počet bajtů
0415
5
0420 0425 0430
5 5 4
hodnota HEX ASCII 86 00 83 3c 40 8c 00 93 37 7í 86 00 83 37 40 00 f f 2f 00
význam s odstupem půlové noty se znějící nota opět vypíná opět po pomlce v délce celé noty se zapíná tón č. 55 (g malé) a po posunu o půlovou notu se vypíná konec poslední stopy a tím i celého souboru
Uvedený soubor je uložen na přiloženém CD jako Ukazky/ukazkaSMF . m i d i a jeho zdrojová podoba v Lilypondu s extenzí . l y tamtéž. Vygenerovaný notový zápis je následující:
Ovčáci čtveráci lidová
O M
" j J ^ ' i i i - lf ' i S Ov-čá-ci
čtverá-ci
třř-f *r r
H
O
>^
c
N
> 0/5
Ol
Příloha B
Obsah CD Přiložené CD obsahuje Archivy mi s i p . t g z t e x t . tgz Mbrola aplikace
cz2 cz3 Misip do c man
src Doxyf ile f req.C C f req.h chars et. c c main. C C Maker ile
misip
následující soubory a adresáře: Komprimovaný archiv s aplikací Misip a její dokumentací Komprimovaný archiv s textem práce 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 r e a d m e . t x t s licencí. Adresář s difónovou databází českého mužského hlasu cz2. Adresář s difónovou databází českého ženského hlasu cz3 (nedokončená pracovní verze z května 2008). Adresář s předgenerovanou dokumentací aplikace Misip ve formátu HTML. 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. Adresář se zdrojovými kódy a aplikací Misip předkompilovanou pro GNU/Linux i386. Definiční soubor pro generování dokumentace aplikací doxygen. Implementace modifikátoru transkripce frekvencí. Deklarace modifikátoru transkripce frekvencí. Definice tabulky znaků pro převod kódování Latin2, UTF-8 a CP1250 na ASCII před fonetickou traskripcí. Hlavní funkce a jí přidružené funkce programu Misip. 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 m i s i p , dokumentace cílem doc. Objektové soubory smaže cíl c l e a r , Předgenerovaná binárka aplikace pro GNU/Linux na plat formě i386, formát ELF 32-bit LSB, dynamicky linkovaný. 47
B. OBSAH CD
n o t e T e x t Al i g n e r . cc n o t e T e x t Al i g n e r . h parserexcept ions .h p h o e x p o r t e r . cc phoexporter .h p t r e e . cc
ptree.h r e . cc
re.h
s m f p a r s e r . cc smf p a r s e r , h v o i c e . cc voiceexceptions .h voice .h .misip-pravidla
mi s i p - s c r i p t . sh Text
Ukázky
Komplet Vy s 1 e dky
48
Implementace modifikátoru pro přidělení délek not fonémům. Deklarace modifikátoru pro přidělení délek not fonémům. Deklarace výjimek parseru. Implementace exportní třídy pro formát PHO. Deklarace exportní třídy pro formát PHO. Implementace tříd modifikátoru fonetické tran skripce (mj. stromové struktury fenologických pravidel). Deklarace tříd modifikátoru fonetické tran skripce. Implementace tříd pro zpracování řetězce, kte rým se zadávají rozsahy hlasů a slok písní na vstupu aplikace Misip. Deklarace tříd pro zpracování řetězce, kterým se zadávají rozsahy hlasů a slok písní na vstupu aplikace Misip. Implementace parseru SMF. Deklarace parseru SMF. Implementace základní datové struktury jedno hlasého zpěvu V o i c e a podřízených tříd. Deklarace výjimek vyvolávaných při manipu laci s datovou strukturou jednohlasého zpěvu. Deklarace základní datové struktury jednohla sého zpěvu V o i c e a podřízených tříd. 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. Skript pro BASH usnadňující dávkové zpraco vání skladeb. Text práce včetně zdrojové podoby. Lze přeložit příkazem make, vyžaduje aplikace make, Lilypond, pdfcslatex, ps2pdf, bibtex a makeindex. Ukázky syntézy. Zdrojové soubory písní v Lilypondu, PDF s notami, MIDI soubory, vygenero vané PHO soubory a WAV soubory. Všechny soubory (zdrojové, PHO, WAV, PS, PDF). Pouze zesyntetizované ukázky WAV.
Literatura [1] DUTOIT, T.: An Introduction to Text-to-Speech Synthesis. 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 h t t p : / / w w w . b o r g . c o m / ~ j g l a t t / t e c h / m i d i f i l e . h t m [5] van HEESCH, D.: Doxygen. [online], naposledy navštíveno 12. května 2008. URL h t t p : / / w w w . s t a c k . n l / ~ d i m i t r i / d o x y g e n / [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-02000203-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 h t t p : / / t e t s . f p m s . a c . b e / s y n t h e s i s / m b r o l a . h t m l [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 h t t p : / / p e r s o n . s o l . l u . s e / M a r c u s U n e s o n / m u s i c / b u r c a s / p d f / 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 stavový, 5
normalizace, 27
cent, 26 chunks, 7
PHO formát, 26 PPQN, 9 prozódie, 3 pulsy, 9
delta-time, 9 difón, 4 division SMF, 8, 9
RMID, 8 rovnoměrně temperované ladění, 19
foném, 14 fonetická transkripce, 14 fonologická pravidla, 14 frekvence vzorkovací, 5 General MIDI, 7 IFF, 7 Interchange File Format, 7 intonace, 3 IPA, 14
stopa, 8 syntéza v časové oblasti, 4 ve frekvenční oblasti, 5 syntetizér mechanický, 1 SysEx, 8 System exclusive, 8 tón základní hlasivkový, 3 tempo meta-event, 9 text písně meta-event, 13 track, 8
Kempelen, 1 koartikulace, 4 komorní a, 19 kontrolér, 6 Kvinta, 19
variable length bytes, 8 vokodér, 1
ladění, 18
Werckmeister III, 26, 32
melisma, 13 MIDI event, 5 message, 5 51