MASARYKOVA UNIVERZITA F}w¡¢£¤¥¦§¨  AKULTA INFORMATIKY !"#$%&'()+,-./012345

Využití FreeTTS pro VoiceXML

BAKALÁRSKÁPRÁCEˇ

VojtˇechZavˇrel

Brno, podzim 2006 Prohlášení

Prohlašuji, že tato bakaláˇrskápráce je mým p ˚uvodnímautorským dílem, které jsem vypra- coval samostatnˇe.Všechny zdroje, prameny a literaturu, které jsem pˇrivypracování použí- val nebo z nich ˇcerpal,v práci ˇrádnˇecituji s uvedením úplného odkazu na pˇríslušnýzdroj.

Vedoucí práce: Mgr. Pavel Cenek

ii Podˇekování

Pˇredevšímbych chtˇelpodˇekovatvedoucímu práce Mgr. Pavlu Cenkovi za ochotné a kon- struktivní konzultace, dále HanˇeDvoˇráˇckovéa Tat’ánˇeZavˇrelovéza jazykové korektury a také všem ostatním, kteˇrímˇepodpoˇrilipˇritvorbˇetéto práce.

iii Shrnutí

FreeTTS je ˇreˇcovýsyntetizér napsaný v jazyce . Je zajímavý pˇredevšímdíky snadné pˇrenositelnostimezi r ˚uznýmioperaˇcnímisystémy. Jedno z dnešních nejˇcastˇejšíchvyužití ˇreˇcovýchsyntetizér ˚ujsou VoiceXML platformy, kde se syntetizéry uplatˇnujípˇrigenerování ˇreˇcovéhovýstupu. Bohužel FreeTTS nelze s VoiceXML platformami pˇrímoˇcaˇreintegrovat, protože nepodporuje potˇrebnéstandardy, zejména SSML a MRCP. Tato práce demostruje, že taková integrace pˇrestomožná je, za použití proprietárních technologií a urˇcitýchfunkˇcních ústupk ˚u.Pro integraci byla zvolena VoiceXML platforma OptimTalk. V práci je pˇredstavena technická realizace a podrobnˇediskutovány možnosti a limity navrženého ˇrešení.

iv Klíˇcováslova text-to-speech, FreeTTS, MBrolla, Flite, OptimTalk, JNI, VoiceXML, SSML, syntéza ˇreˇci

v Obsah

1 Úvod ...... 1 2 Syntéza ˇreˇci ...... 2 2.1 Historie ...... 2 2.2 Postupy pˇrisyntéze ˇreˇci ...... 2 2.2.1 Syntéza ˇreˇciv ˇcasovéoblasti ...... 3 2.2.1.1 Výbˇersegment ˚u ...... 3 2.2.1.2 Difónová/trifónová syntéza ˇreˇci...... 4 2.2.1.3 Doménovˇespecifická syntéza ˇreˇci ...... 4 2.2.2 Syntéza ˇreˇcive frekvenˇcníoblasti ...... 4 2.2.3 Artikulaˇcnísyntéza ˇreˇci ...... 5 2.3 Ovlivˇnovánívýstupu ˇreˇcovésyntézy ...... 5 2.4 Využití syntézy ˇreˇci ...... 5 3 Reˇcovésyntetizéryˇ ...... 7 3.1 Standardy pro ˇreˇcovésyntetizéry ...... 7 3.1.1 SSML ( Markup Language) ...... 7 3.1.2 Komunikaˇcníprotokoly klient/server ...... 8 3.1.2.1 MRCP (Media Resource Control Protocol) ...... 8 3.1.2.2 TTSCP (Text-to-Speech Control Protocol) ...... 9 3.2 OpenSource TTS systémy ...... 9 3.2.1 MBROLA ...... 9 3.2.2 Festival TTS ...... 10 3.2.3 FreeTTS ...... 10 3.2.4 Další systémy ...... 10 3.2.4.1 Epos ...... 10 3.2.4.2 ...... 11 3.3 KomerˇcníTTS systémy ...... 11 3.3.1 TTS spoleˇcnostiNuance ...... 11 3.3.2 TTS Acapela Group ...... 11 3.3.3 TTS spoleˇcnostiLoquendo ...... 12 3.3.4 TTS spoleˇcnostiSpeechTech ...... 12 3.4 Vlastnosti FreeTTS ...... 12 3.4.1 Hlasy podporované FreeTTS ...... 13 3.4.2 Standardy podporované FreeTTS ...... 14 3.4.2.1 JSAPI (Java Speech Application Programming Interface) . . . 14 3.4.2.2 SSML a jazyky pro ovlivˇnovánívýstupu ...... 14 3.4.2.3 Klient/server komunikaˇcníprotokol ...... 15 3.4.3 Výkonnost FreeTTS vs. Flite ...... 15 4 W3C Speech Interface Framework a platforma OptimTalk ...... 17 4.1 VoiceXML 2.0 (Voice eXtensible Markup Language) ...... 18 4.1.1 ProˇcVoiceXML ...... 19

vi 4.1.2 Struktura VoiceXML dokumentu ...... 19 4.2 SSML (Speech Synthesis Markup Language) ...... 20 4.3 Další jazyky z rodiny W3C Speech Interface Framework ...... 23 4.3.1 CCXML (Call Control eXtensible Markup Language) ...... 23 4.3.2 SRGS (Speech Recognition Grammar Specification) ...... 23 4.3.3 SISR (Semantic Interpretation for Speech Recognition) ...... 23 4.4 Platforma OptimTalk ...... 23 4.4.1 Životní cyklus výstupní komponenty ...... 24 5 Integrace FreeTTS s platformou OptimTalk ...... 25 5.1 JNI (Java Native Interface) ...... 25 5.1.1 Schéma aplikace využívající JNI ...... 26 5.2 Možné varianty integrace ...... 27 5.2.1 Jednosmˇernáintegrace ...... 27 5.2.2 Obousmˇernáintegrace pomocí JNI ...... 28 5.2.2.1 Rešeníˇ pomocí doˇcasnýchsoubor ˚u ...... 28 5.2.2.2 Rešeníˇ pomocí audio stream ˚u ...... 28 5.2.3 Obousmˇernéintegrace pomocí socket ˚u ...... 29 5.2.4 Srovnání integraˇcníchpostup ˚u ...... 29 5.3 Praktická realizace ...... 29 5.3.1 Výstupní komponenta free_tts_ouput ...... 30 5.3.2 Knihovna OptimTalkFreeTTSComponent ...... 31 5.3.3 Nastavení free_tts_output komponenty ...... 32 6 Závˇer ...... 34 Literatura ...... 35 A Výkonnost FreeTTS vs. Flite ...... 36

vii Kapitola 1 Úvod

V dobˇe,kdy informaˇcnítechnologie jsou stále pokroˇcilejšía osobní poˇcítaˇcevýkonnˇejší,se s jejich pomocí snažíme docílit dˇrívenemyslitelných úkon ˚u.Pár let zpˇetbyla možnost, že by poˇcítaˇcpromlouval v kvalitˇesrovnatelné s ˇclovˇekem,jen obtížnˇepˇredstavitelná. V poslední dobˇese situace znaˇcnˇezlepšila a stroje jsou schopné psaný text interpretovat natolik kva- litnˇe,že témˇeˇrnepoznáme rozdíl mezi automatem a živou osobou. S ohledem na rozšiˇrující se dostupnost informaˇcníchzroj ˚u,používání elektronických knih a mnoho dalších oblastí se rozšiˇrujímožnosti použití kvalitní syntézy ˇreˇci.Tahounem sektoru jsou komerˇcníaplikace (automatizované telefonní služby, statistické a reklamní systémy, naviganˇcnípˇrístroje atd). Velký užitek z tˇechtostále zdokonalovaných technologií mají také slabozrací a nevidomí, pro které je hlasová syntéza dalším prostˇredkem,jak se zapojit do bˇežnéhoživota. Stranou zájmu však nez ˚ustavajíani bˇežníuživatelé. Témˇeˇrkaždý operaˇcnísystém již má integrován nˇekterýˇreˇcovýsyntetizér a pˇrestožek velké rozšíˇrenostijejich používání zatím nedošlo, je možné to v budoucnu oˇcekávat. Cílem této práce je prozkoumat stav na poli ˇreˇcovýchsyntetizér ˚u,pˇredevšímpak mul- tiplatformního ˇreˇcovéhosyntetizéru FreeTTS a prozkoumat možnost spolupráce FreeTTS s VoiceXML. FreeTTS je syntetizér výjimeˇcnýpˇredevšímdíky použitému programovacímu jazyku Java a tím snadné pˇrenositelnosti a široké použitelnosti. FreeTTS bohužel není možné pˇrímovyužít pro jedno z nejˇcastˇejšíchvyužití ˇreˇcovýchsyntetizér ˚u,integraci s VoiceXML platformami, protože nepodporuje patˇriˇcnéstandardy, zejména SSML a MRCP. Tato práce demonstruje, že taková integrace pˇrestomožná je za použití proprietárních technologií a urˇcitýchfunkˇcníchústupk ˚u.Pro integraci byla zvolena VoiceXML platforma OptimTalk. Zbytek práce je organizován následujícím zp ˚usobem.V kapitole 2 se dozvíme nˇecomálo o historii, projdeme techniky používané pˇriˇreˇcovésyntéze a zdiskutujeme možnosti pou- žití ˇreˇcovýchsyntetizér ˚u.V další kapitole 3 pˇredstavímenˇekteréznámé text-to-speech sys- témy a také si ˇreknˇemenˇecoo vlastnostech systému FreeTTS. Následující ˇcást 4 se zabývá standardy z rodiny "" Activity a také pˇredstavía zˇcástipopíše platformu Op- timTalk, na které bude v poslední ˇcásti 5 ukázána možnost integrace FreeTTS s platformou podporující VoiceXML.

1 Kapitola 2 Syntéza ˇreˇci

Syntézou ˇreˇcinazýváme poˇcítaˇcovouprodukci mluveného slova. Automaty, které se syté- zou ˇreˇcizabývají, nazýváme ˇreˇcovýmisyntetizéry. Mnohdy je možné se setkat s anglickým výrazem text-to-speech, odkud pochází zkratka TTS. P ˚uvodnˇetext-to-speech znamenalo komplexnˇejšísystém, který umožˇnujepˇrevodybˇežnéhopsaného textu do mluvené podoby, zatímco ˇreˇcovésyntetizéry tuto vlastnost nemˇely. V tomto textu však budeme oba výrazy chápat jako synonyma. Text-to-speech systémy se obvykle skládají ze dvou ˇcástí.Front-end a back-end. Front- end má za úkol pˇrevéstvšechny symbolické znaˇcky, ˇcíslaapod. na jejich psaný ekvivalent (napˇr.9 na "nine"). Tato ˇcástse zjednodušenˇeoznaˇcujejako pˇredzpracování(pre-processing), normalizace a rozdˇeleníkorpusu na slova (tokenizace) textu. Následuje fonetický pˇrepis každého slova, segmentace (fráze, vˇety),identifikace pauz, intonace apod. Back-end se na- proti tomu stará o samotnou zvukovou syntézu. Pˇripravenýtext pˇrevededo zvukové po- doby na základˇesymbolického zápisu, který je produktem front-endu. [11, 3, 4]

2.1 Historie

V minulosti se lidé ˇcastopokoušeli vyrobit mluvící stroj, ale s ohledem na ˇcistˇemechanické možnosti byla kvalita výstupu a rozsah promluvy znaˇcnˇeomezené. Vˇedcise snažili pˇrede- vším napodobit fungování lidského vokálního ústrojí na mechanické úrovni. V roce 1939 byl na výstavˇev New Yorku pˇredstavenVODER, který srozumitelnˇepˇred- ˇcítaltexty zadané na klávesnici. V druhé polovinˇepadesátých let 20. století se zrodil první poˇcítaˇcovýˇreˇcovýsyntetizér. Pˇribližnˇeo 10 let pozdˇejisvˇetlosvˇetaspatˇriltaké první kom- pletní text-to-speech systém. Od té doby se syntetizaˇcnítechniky výraznˇevylepšily a dnes se k nim používá témˇeˇr výhradnˇepoˇcítaˇcovátechnika. [11]

2.2 Postupy pˇrisyntéze ˇreˇci

V souˇcasnédobˇerozeznáváme tˇrizákladní postupy pˇrisyntéze ˇreˇci. Konkatenativní neboli ˇcasovásyntéza se zakládá na skládání promluvy z malých ˇcástí slov. Tyto ˇcásti(segmenty) jsou namluvené ˇclovˇekema zaznamenané do databáze. Databáze segment ˚ubývají také nazývány hlasy. Castoˇ se databáze skládá z foném ˚u,difón ˚uapod., po- kud se jedná o tzv. obecnou doménu (general domain), resp. z vˇetšíchcelk ˚u(slov, ˇcástívˇet),

2 2.2. POSTUPY PRISYNTÉZEˇ REˇ CIˇ pokud se jedná o omezenou doménu (limited domain). Pokud hlasy podporují obecnou do- ménu, je možné pˇrijejich využití syntetizovat libovolný text. Pokud však podporují pouze omezenou doménu, tato vlastnost splnˇenanení. Limitem u omezené domény je rozsah na- hraných vzork ˚u,který se vztahuje k jedné konkrétní ohraniˇcenéoblasti. Více se konkatena- tivní syntéze vˇenujemev ˇcásti 2.2.1. Frekvenˇcnísyntéza (formant synthesis) se zakládá na zcela odlišném principu. Snaží se o kompletnˇesyntetický pˇrístup,kde nebudou zapotˇrebížádné ˇclovˇekemnahrané fragmenty, ale bude využito akustického modelu. Další podrobnosti jsou uvedeny v kapitole 2.2.2. Artikulaˇcnísyntéza () se pokouší syntetizovat promluvu pomocí simulace lidského vokálního ústrojí. Více informací je uvedeno v ˇcásti 2.2.3. Nejhojnˇejizastoupena, jak v komerˇcníoblasti tak v prostˇredísvobodného software, je syntéza v ˇcasovéoblasti. I ostatní metody jsou r ˚uznýmiprodukty používány, ale co se ˇcet- nosti týˇceménˇea kvalita produkovaného výstupu bývá horší.

2.2.1 Syntéza ˇreˇciv ˇcasovéoblasti

Syntéza v ˇcasovéoblasti, neboli také konkatenativní syntéza (), je založena na spojování pˇredemnahraných kousk ˚uˇreˇci,takzvané hlasové databázi. Tento zp ˚usobsyntézy produkuje nejpˇrirozenˇejšívýstup, ale zároveˇnse stává, že jsou ve výsledku slyšitelná pˇrerušení a chyby vzniklé nepˇresnýmnebo nevhodným navázáním segment ˚u. Kvalita syntézy ˇreˇcije znaˇcnˇerozdílná pro r ˚uznéjazyky. Na nejvyšší úrovni je syntéza do angliˇctinya dalších svˇetovýchjazyk ˚u(španˇelština,francouština, nˇemˇcinaapod.). Synte- tizéry produkující ˇceskýaudio výstup jsou kvalitou výstupu mírnˇepozadu. Existují tˇrizákladní subtypy konkatenativní syntézy.

2.2.1.1 Výbˇersegment ˚u

Syntéza s použitím výbˇeru segment ˚u(unit selection) používá rozsáhlé databáze nahraných vzork ˚u.Nahrané kusy se rozdˇelína jednotlivé fonémy, slabiky, slova a pˇrípadnˇevýjimeˇcnˇe vˇetšícelky. Toto rozdˇelenízpravidla probíhá pomocí ˇreˇcovýchrozpoznávaˇc˚unastavených do speciálního módu. Rozhodování o nelepším vzorku v pr ˚ubˇehusyntézy ˇreˇcise ˇcastodˇelá pomocí vážených rozhodovacích strom ˚u.Díky tomu, že je možné vybírat z velkého množ- ství vzork ˚u(ne jen z jednoho výskytu jako v pˇrípadˇedifón ˚u),je výsledek velmi pˇrirozený a kvalitní. To je dáno také tím, že dochází jen k malému využívání DSP (digital signal proces- sing), které vždy zkresluje. Dnes jsou databáze pro výbˇersegment ˚utak rozsáhlé, že ˇcasto není témˇeˇrpoznat rozdíl mezi ˇclovˇekema poˇcítaˇcovousyntézou. [4] Velký rozsah databází však m ˚užebýt i nevýhodou. Databáze ˇcastoobsahují gigabajty dat a jsou proto nevhodné na nˇekterápoužití. Také pˇrípravatakové databáze trvá pomˇernˇe dlouhou dobu a bývá velice nákladná. V telekomunikaˇcnímsektoru, kde jsou k dispozici velké kapacity datových úložišt’, se jedná o nejpoužívanˇejšímetodu právˇedíky kvalitˇe.Po- užití napˇríkladna osobních poˇcítaˇcíchnebo dokonce pˇrenosnýchzaˇrízeních,je v souˇcasné dobˇeménˇeˇcasténejen z d ˚uvoduvˇetšíchnárok ˚una diskové kapacity a výkon, ale také z d ˚u-

3 2.2. POSTUPY PRISYNTÉZEˇ REˇ CIˇ vodu velké cennosti pracnˇea draze vytvoˇrenýchdatabází.

2.2.1.2 Difónová/trifónová syntéza ˇreˇci Používají se speciální segmenty difóny, což jsou segmenty zaˇcínajícíuprostˇredfónu v jeho stabilním stavu a konˇcícíuprostˇredfónu následujícího, popˇrípadˇetrifóny, které jsou analo- gií difónu s tím, že mezi p ˚ulfónyobsahují jeden další celý fón. Tím, že u tohoto typu syntézy dochází ke spojení ve stabilní cásti fónu je velká šance, že se DSP modulu podaˇrípˇrechod vyhladit, aniž by došlo ke slyšitelnému artefaktu. Výhodou je malá velikost databáze, v nej- horším pˇrípadˇerovna kvadrátu poˇctufónu pˇríslušnéhojazyka, u trifónové databáze, poˇctu fónu na tˇretí.[2, 4] Pro ilustraci španˇelština má okolo 800 difón ˚u,angliˇctinapˇres1500 a nˇemˇcinajich má asi 2500. Kvalita výstupu je horší než v pˇrípadˇepˇredchozímetody, ale pˇrestoje kvalitativnˇepˇred frekvenˇcnísyntézou. V souˇcasnédobˇese jedná pravdˇepodobnˇeo nejrozšíˇrenˇejší metodu, co se menších a jednodušších projekt ˚utýˇce,pro doménovˇenespecifický zp ˚usobsyntézy. Je hojnˇepoužívána jak v komerˇcníchtak v OpenSource projektech, pˇredevšímdíky snadné dostupnosti a ne tak rozsáhlé databázi. U velkých systém ˚upak pˇrevažujesyntéza s výbˇerem segment ˚u.

2.2.1.3 Doménovˇespecifická syntéza ˇreˇci Jedná se o syntézu, která využívá databázi vˇetšíchkus ˚utextu (typicky celá slova, ˇcástivˇeti celé vˇety).Využívá se tam, kde je možné patˇriˇcnˇeomezit doménu promluvy. Je v souˇcasné chvíli syntézou, se kterou se setkává nejvíce lidí v bˇežnémživotˇe.Setkáváme se s ní dennˇe u mluvících hodin, kalkulaˇcek,na vlakových nádražích, ve vozech hromadné dopravy, na hracích automatech atd. Díky limitovanosti domény je možné dosáhnout výstup ˚us vyni- kající kvalitou za cenu pomˇernˇemalého úložného prostoru a nižšího nároku na výkon. Na druhou stranu je možné ji využít pouze v nˇekterýchoblastech a pouze v syntéze s omezenou doménou.

2.2.2 Syntéza ˇreˇcive frekvenˇcníoblasti Syntéza ve frekvenˇcníoblasti, jinak také formantová syntéza (formant synthesis), používá akustický model a nevyužívá žádných pˇredemnahraných vzork ˚u.Generuje pr ˚ubˇehsignálu na základˇeˇcasovˇepromˇennýchparametr ˚u(základní frekvence, znˇelost,úroveˇnhlasitosti atd.). Další možné oznaˇcenítéto metody je pravidlovˇeˇrízenásyntéza. Protože ne vždy je nejd ˚uležitˇejšínaprosto pˇrirozené znˇenísyntetizované ˇreˇci,m ˚uženajít uplatnˇeníi tato me- toda, která jinak subjektivnˇepodává horší výsledky. Velkou výhodou frekvenˇcnísyntézy je, že netrpí neduhy ˇcasovésyntézy jako, je nesrozumitelnost pˇrivysoké rychlosti promluvy, pˇrípadnˇenevznikají chyby a pˇrerušení, když na sebe segmenty dostateˇcnˇepˇresnˇenenava- zují. [11, 2] Frekvenˇcnísyntetizéry obvykle bývají menší programy, než syntetizéry používající me- todu konkatenativní syntézy, protože nemusí obsahovat databázi vzork ˚u.Z tohoto d ˚uvodu

4 2.3. OVLIVNOVÁN͡ VÝSTUPU REˇ COVÉSYNTÉZYˇ byly až do nedávna vhodnˇejšínapˇr.pro jednoˇcipovémikroprocesory. I když v poslední dobˇese tato jejich výhoda vinou levné pamˇetizaˇcínástírat, stále mají uplatnˇenív pˇrenos- ných zaˇrízeníchnebo na místech, kde není kladen takový d ˚urazna kvalitu syntetizovaného výstupu.

2.2.3 Artikulaˇcnísyntéza ˇreˇci

Artikulaˇcnísyntéza se vrací zpˇetke koˇren˚um,kdy byla snaha syntetizovat ˇreˇcza pomoci matematicko-fyzikálního modelu lidského ˇreˇcovéhoaparátu. Metoda byla vyvinuta v Bello- vých laboratoˇríchv 60. a 70. letech 20. století. Jedná se o teoreticky nejˇcistšíˇreˇcovousyn- tézu, která však pro svou velkou výpoˇcetnínároˇcnostv praxi není pˇríliš používána. V sou- ˇcasnédobˇese používá praktiky jen pro výzkumné úˇcely. Nicménˇei pˇrestoexistuje nˇekolik systém ˚u,které model artikulaˇcnísyntézy používají. Jedním z nich je opensource projekt gnuspeech, který vznikl p ˚uvodnˇejako software pro operaˇcnísystém NeXT.

2.3 Ovliv ˇnovánívýstupu ˇreˇcové syntézy

Pro pˇrirozenˇejiznˇejícívýstup se do psaného textu pˇridávajíznaˇcky, které ovlivˇnujívýstup ˇreˇcovéhosyntetizéru. Aˇckoliv minulosti bylo vytvoˇrenovelké množství znaˇckovacíchja- zyk ˚upro ovlivˇnovánívýstupu text-to-speech systém ˚u,v souˇcasnédobˇeje nejvíce prefero- vaný jazyk SSML (Speech Synthesis Markup Language)1 Více o tomto jazyku se dozvíme v kapitole 3.1.1. KromˇeSSML existují starší jazyky jako JSML (Java Speech Markup Langu- age)2 nebo SABLE3. Znaˇckyz tˇechtojazyk ˚use pˇridávajído bˇežnéhotextu a TTS systém je interpretuje. Pokud ˇreˇcovýsyntetizér nepodporuje pˇrímonˇekterýze znaˇckovacíchjazyk ˚u,je možné, že podporuje nˇekteréz API, které zajišt’ují stejnou nebo podobnou funkˇcnost.Zavoláním patˇriˇcnémetody rozhraní se syntetizér pˇrepnedo stavu odpovídajícího volané metodˇea poté je zase nutné jej pˇrepnoutzpˇet.V závislosti na tom, jak nároˇcnéje pˇrepnutícelého TTS systému, je nutné poˇcítats ˇcasovouprodlevou pˇripˇrepínánía tím i s vˇetšímiprodlevami ve výstupu. API se obvykle nepˇrepínána úrovni slov, ale spíše na úrovni vˇetšíchcelk ˚u(vˇety, odstavce). Castýmˇ použitím pˇrepínáníAPI je pˇrepnutído jiného výstupního jazyka. Text- to-speech systémy podporující standardní znaˇckovacíjazyky obvykle podporují také API.

2.4 Využití syntézy ˇreˇci

Vzorky (v pˇrípadˇekonkatenativní syntézy) bývají nahrávány ve vysoké kvalitˇe,ale da- tabáze pro jednotlivé hlasy se pˇripravujíjiž optimalizované pro každou kvalitu výstupu. Výstup ze všech typ ˚usyntéz je produkován ve frekvencích 8kHz, nebo 16kHz, pˇrípadnˇe

1. http://www.w3.org/TR/speech-synthesis. 2. http://www.w3.org/TR/jsml 3. http://www.bell-labs.com/project/tts/sable.html

5 2.4. VYUŽITÍ SYNTÉZY REˇ CIˇ

22kHz až 48kHz. Nejnižší kvalita výstupu bývá používána v telefonních systémech. D ˚u- vodem pro použití nižší kvality 8kHz je pˇredevšímto, že telefonní pásmo má šírku 8kHz. Proto by širší pásmo nemˇelovyužití. Výjimkou je VoiceIP telefonie, kde se bˇežnˇepoužívá vyšších frekvencí. Pro multimediální použití (napˇríkladv desktopových aplikacích, výuko- vých programech atd.) se produkuje výstup se vzorkovací frekvencí 16kHz, 22kHz, nˇekdy dokonce 48kHz. Kromˇevˇedeckýchoblastí se syntéza využívá napˇr.v tˇechtooblastech:

• Pomoc postiženým lidem:

– Pomoc v orientaci a zaˇcleˇnovánínevidomých lidí – U nˇemýchmožnost použití syntézy místo využívání znakové ˇreˇci

• Nekomerˇcnívyužití:

– Výuka cizích jazyk ˚u – Komunikace s poˇcítaˇci(doplnˇenáo ˇreˇcovýrozpoznávaˇc) – Cteníˇ elektronických knih – Automatický systém výstrahy

• Komerˇcnívyužití:

– Automatizované (samoobslužné) telefonní služby – Systémy zákaznické podpory – Automatické statistické pr ˚uzkumy – Informaˇcnía rezervaˇcnísystémy ∗ informace v dopravˇe ∗ zjišt’ování dopravních spojení ∗ rezervaˇcnísystémy – Navigaˇcnípˇrístroje

6 Kapitola 3 Reˇcovésyntetizéryˇ

V následující kapitole ukážeme pˇrehlednˇekterýchvolnˇedostupných ˇreˇcovýchsyntetizér ˚u a také pˇredstavímeˇcástz komerˇcníchsystém ˚u.Navzdory existujícím metodikám pro re- lativnˇeobjektivní srovnání kvality syntetizovaného výstupu nejsou dostupné kvalitní stu- die napˇríˇccelým portfoliem text-to-speech systém ˚u.V oblasti konkatenativní syntézy platí, že ˇcímkvalitnˇejšímáte databázi a ˇcímkvalitnˇejšímáte DSP modul pro vyhlazování pˇre- chod ˚umezi segmenty, tím máte kvalitnˇejšívýstup. Protože tvorba databáze segment ˚uje nároˇcná(jak ˇcasovˇe,tak finanˇcnˇe),je bˇežné,že komerˇcníaplikace jsou kvalitnˇejší,než volnˇe dostupné. Ostatní druhy syntézy ˇreˇcijsou, co se týká porovnatelnosti výstupu s lidskou ˇreˇci, ještˇevíce pozadu.

3.1 Standardy pro ˇreˇcovésyntetizéry

Vzhledem k existenci nejednoho TTS systému bylo zapotˇrebívytvoˇritstandardy, které by usnadnily integraci syntetizér ˚udo rozsáhlých aplikací a které by umožnily standardizova- ným zp ˚usobemovlivˇnovatvýstup ˇreˇcovýchsyntetizér ˚u. V souˇcasnédobˇeje nejvíce preferovaným jazykem pro ovlivˇnovánívýstupu ˇreˇcových syntetizér ˚ujazyk SSML.

3.1.1 SSML (Speech Synthesis Markup Language) SSML (Speech Synthesis Markup Language)1 je standard pro ˇreˇcovésyntetizéry schválený konsorciem W3C. Je urˇcenýpro popis výstupu syntetizéru. Jedním z možných použití je i napojení na VoiceXML (viz. kapitola 4), stejnˇedobˇreje možné jej používat i samostatnˇepro standardní desktopové aplikace, pˇrivytváˇreníaudio knih atd. [8] SSML znaˇckyjsou mimo jiné používané také ve specifikaci SALT (Speech Application Language Tags)2, což je rozšíˇreníjazyka HTML a dalších znaˇckovacíchjazyk ˚upro prezentaci na internetu (cHTML, XHTML, WML atd.), které pˇridáváhlasovou a telefonní podporu pro webové aplikace a služby. Jedná se o sadu XML tag ˚u,které je možné zakomponovat do bˇežnéHTML stránky a využít tak výhod webového aplikaˇcníhomodelu. SSML je založeno na JSML jazyku od spoleˇcnostiSun Microsystems. SSML v dnešní dobˇe pˇrevážnˇenahrazuje nˇektˇeréstarší znaˇckovacíjazyky pro ˇreˇcovésyntetizéry. Z tˇechnejzná-

1. http://www.w3.org/TR/speech-synthesis/ 2. http://saltforum.org

7 3.1. STANDARDY PRO REˇ COVÉSYNTETIZÉRYˇ mˇejšíby se patˇrilouvést alespoˇnMicrosoft SAPI TTS, Apple embedded speech commands JSML a SABLE.

3.1.2 Komunikaˇcníprotokoly klient/server Pro aplikace typu klient/server, kdy text-to-speech systémy bˇežína vzdáleném serveru, je nutné, aby existovaly komunikaˇcníprotokoly, které popisují vzájemnou interakci klienta a serveru. Existují dva standardní komunikaˇcníprotokoly pro komunikaci typu klient/server využitelné pro TTS systémy.

3.1.2.1 MRCP (Media Resource Control Protocol) MRCP (Media Resource Control Protocol)3 je specifikace, která popisuje standardní rozhraní pro poskytování ˇreˇcovýchslužeb mezi serverem a klientem. Typické využití je takové, že na serveru bˇežíˇreˇcovýsyntetizér (ˇreˇcovýrozpoznávaˇc,aplikace pro identifikování a verifikaci mluvˇcíhoapod.). Uživatel zasílá MRCP zprávy skrze svého klienta a zpˇetdostává synteti- zovaný výstup a zprávy od serveru. [7]

MRCP existuje ve dvou verzích, pˇriˇcemžstarší verze 1.0 je v souˇcasnéchvíli rozšíˇrenˇejší. Komunikace v MRCP 1.0 probíhá ve dvou kanálech (ˇrídícíkanál a kanál RTP (Real-Time Protokol) po kterém se pˇrenášípˇredevšímmédia), zatímco MRCP 2.0 pˇridáváještˇetˇretíka- nál SIP (Session Initiation Protocol), který slouží pˇredevšímk ustavení sezení mezi klientem a serverem. Pro protokol MRCP platí, že je podobný protokolu HTTP a mnoha jiným protokol ˚um pro komunikaci typu klient/server. Každá zpráva se skládá ze tˇríˇcástí: • identifikace typu zprávy ˇríkáo jaký typ zprávy se jedná a jaké jsou návratové hodnoty pro zprávu • hlaviˇcky obsahuje mimo jiné informaci o délce tˇelazprávy • tˇelazprávy nese vlastní data v daném formátu

3. http://www.ietf.org/internet-drafts/draft-ietf-speechsc-mrcpv2-11.txt

8 3.2. OPENSOURCE TTS SYSTÉMY

3.1.2.2 TTSCP (Text-to-Speech Control Protocol) KromˇeMRCP standardu existuje další standardní protokol TTSCP (Text-to-Speech Control Protocol). TTSCP byl vytvoˇrenv rámci Epos Speech System. [6] TTSCP sezení se sestává ze sekvence pˇríkaz˚ua vrácených odpovˇedí,dialog mezi klien- tem a serverem pˇripomínáSMTP protokol. TTSCP spoken here protocol: 0 extensions: server: Epos release: 2.4.6 handle: O29-m2UZ user [email protected] 452 user not found setl some_option on 200 OK strm $zC-4EEl0:raw:rules:diphs:synth:/dev/dsp 200 OK appl 34 112 started 122 total bytes 3622 123 written bytes 3622 200 OK done 600 goodbye

Pˇríklad3.1.1: TTSCP protokol klient/server

3.2 OpenSource TTS systémy

Nabídka software s otevˇrenýmkódem je stále bohatší, a tak zde nechybí ani text-to-speech systémy. Vznikají jako práce student ˚u,nadšenc ˚ui placených programátor ˚uv rámci rozvoje té ˇcioné platformy. Budeme se vˇenovatvybraným reprezentativním zástupc ˚umz ˇradtˇech nejznámˇejších.Pokud není uvedeno jinak, tak systémy zde pˇredstavenépracují na principu konkatenativní syntézy.

3.2.1 MBROLA MBROLA4 je volnˇek dispozici pro nekomerˇcnía nevojenské použití. V souˇcasnédobˇesys- tém MBROLA zahrnuje 35 jazyk ˚ua 67 hlas ˚u(mezi nimi i dva ˇceské).MBROLA není skuteˇc- ným text-to-speech systémem, ale slouží pouze jako back-end (viz. kapitola 2), nebot’ jako

4. http://tcts.fpms.ac.be/synthesis/mbrola.html 9 3.2. OPENSOURCE TTS SYSTÉMY vstup neakceptuje ˇrádkovýtext. V TTS systémech (i menších komerˇcních)bývá však ˇcasto použit jako syntetizér. Syntetizér je založen na ˇretˇezenídifón ˚u.Výstupem jsou 16 bitové ˇreˇcovévzorky se stejnou vzorkovací frekvencí jako má použitá databáze difón ˚u,obvykle 16 kHz.

3.2.2 Festival TTS

Festival TTS5 systém byl vyvinut na Universitˇev Edinburghu. Je napsán v jazyce C++ a podporuje databázi segment ˚uMBROLA. Jako vstupních soubor ˚ulze použít standardních PCM soubor ˚u.Systém je volnˇedostupný pro vzdˇelávací,vˇedeckéi individuální použití. Je vhodný jako jednoduchý text-to-speech systém, pro experimenty se syntézou ˇreˇci(r ˚uzné hlasy, specifické fráze, typické dialogy), pˇrípadnˇepro vývoj a testování nových metod syn- tézy ˇreˇci.

3.2.3 FreeTTS

FreeTTS6 je systém syntézy ˇreˇcinapsaný v jazyce Java. Vychází ze systému Flite, vyvinutého na univerzitˇeCarnegie Mellon, který je napsán v jazyce C++. Podporuje hlasy ze systém ˚u FestVox a MBROLA. Umožˇnujepoužití obecné i limitované domény hlas ˚u.FreeTTS podpo- ruje syntetizaˇcníˇcástJSAPI (Java Speech API) 1.07. FreeTTS se dá používat jako JSAPI 1.0 syntetizér, vzdálený TTS server, desktopový text- to-speech engine nebo aplikace Java Web Start8 (takovou aplikaci je možné spustit pouhým kliknutím na odkaz ve webovém prohlížeˇci).Použití jako Java Web Start aplikace je jednou z výhod vytvoˇreníFreeTTS v jazyce Java. FreeTTS je podrobnˇejipopsán v kapitole 3.4.

3.2.4 Další systémy

Zde vybrané systémy jsou zástupci jiných postup ˚unež konkatenativní syntézy (i když Epos umožˇnujepracovat i v ˇcasovéoblasti).

3.2.4.1 Epos

Epos9 je text-to-speech systém zdarma pro nekomerˇcníúˇcely. Umožˇnujepoužívat syntézu jak ve frekvenˇcnítak v ˇcasovéoblasti. Epos vyvíjí Akademie vˇedve spolupráci s Univerzi- tou Karlovou a umožˇnujerelativnˇekvalitní syntézu ˇceskéhoa slovenského jazyka (srovnání s anglickými syntetizéry však zatím nesnese). Je nezávislý na jazyce a k modelování proso- die používá pravidel, prosodických model ˚ui umˇelýchneuronových sítí [1].

5. http://www.cstr.ed.ac.uk/projects/festival/ 6. http://freetts.sourceforge.net 7. http://java.sun.com/products/java-media/speech/ 8. http://java.sun.com/products/javawebstart 9. http://epos.ure.cas.cz

10 3.3. KOMERCNÍTTSSYSTÉMYˇ

3.2.4.2 GNUSpeech Jedná se o jednoho ze zástupc ˚uartikulaˇcnísyntézy. Projekt GNUSpeech10 je uvolnˇenýpod licencí GNU a slouží pˇredevšímpro psycho-akustický a lingvistický výzkum. Jak je u zá- stupce artikulaˇcnísyntézy oˇcekáváno,modeluje ˇreˇcovýaparát ˇclovˇeka.Je možné jej použí- vat s angliˇctinoua ˇcásteˇcnˇetaké s francouzštinou.

3.3 KomerˇcníTTS systémy

Stejnˇejako OpenSource software i komerˇcnísystémy jsou, díky možnosti poskytnout vyso- kou kvalitu výstupu, založené pˇredevšímna konkatenativní syntéze. Ze všech dostupných produkt ˚use seznámíme s výbˇerem ze známých firem. V komerˇcníoblasti je samozˇrejmé, že se spoleˇcnostinespecializují na jeden jazyk, ale naopak jich podporují široké spektrum, stejnˇejako mívají k dispozici více r ˚uznýchhlas ˚upro jednotlivé jazyky.

3.3.1 TTS spoleˇcnostiNuance Nuance11 je spoleˇcnostvzniklá akvizicí nˇekolikar ˚uznýchspoleˇcnostía v souˇcasnédobˇena- bízí jedno z nejširších portfolií produkt ˚una trhu. Hlavním produktem v oblasti syntézy ˇreˇci je ˇradaprogram ˚uRealSpeak. Radaˇ zahrnuje mimo jiné následující produkty: RealSpeak Te- lecom (pro telekomunikaˇcníspoleˇcnostia sít’ové produkty), RealSpeak Solo (automobilový pr ˚umysl,osobní poˇcítaˇce),RealSpeak Word (výukové programy), RealSpeak Mobile (pro mobilní telefony a jiná pˇrenosnázaˇrízení).Podporují více jazyk ˚u(celkovˇecca 25 pro velké systémy a 16 pro mobilní). Všechny produkty ˇradyRealSpeak jsou založeny na principu syntézy v ˇcasovéoblasti. Na stránkách spoleˇcnostije možné si poslechnout demonstraˇcní výstupy ze syntetizéru. Produkty spoleˇcnostiNuance podporují velké množství standar ˚u (SSML (VoiceXML 2.0), MRCP 1.0, SOAP (Simple Object Access Protocol) atd.), z nichž nˇe- které pomáhá také vytváˇret.

3.3.2 TTS Acapela Group Také Acapela Group12 nabízí široké spektrum produkt ˚u.Mezi nimi jsou: Acapela telecom (pro telekomunikaˇcníspoleˇcnosti),Acapela multimedia (pro osobní poˇcítaˇce),Acapela on- board (pro automobilový pr ˚umysla embeded zaˇrízení)a Acapela mobility (pro mobilní telefony a jiná pˇrenosnázaˇrízení). Spoleˇcnostpodporuje oficiálnˇe18 jazyk ˚u(mezi nimi i ˇceštinu),u nˇekterýchnabízí na výbˇernˇekolikhlas ˚uv r ˚uznýchkvalitách. Jejich systémy jsou naprogramované v jazycích C a C++. Používá opˇetkonkatenativní syntézu na principu vý- bˇeru segment ˚ua difón ˚u.Acapela nabízí na své webové prezentaci možnost poslechu ukáz- kových syntetizovaných text ˚u.TTS systémy Acapela Group podporují standardy jako SSML (VoiceXML 2.0), MRCP 1.0, JSML, JSAPI 1.0.

10. http://www.gnu.org/software/gnuspeech 11. http://www.nuance.com 12. http://www.acapela-group.com

11 3.4. VLASTNOSTI FREETTS

3.3.3 TTS spoleˇcnostiLoquendo

Loquendo13 je další spoleˇcností,která má široký zábˇer, co se TTS týˇce.Podporuje opˇet syn- tézu v telekomunikaˇcníoblasti, osobních poˇcítaˇcích,embeded zaˇrízeních,automobilovém pr ˚umyslumobilních zaˇrízeníchatd. Je také ochotná prozradit, že její produkty podporují standardy W3C (SSML (VoiceXML 2.0), CCXML, MRCP 2.0). Výstupy mohou mít až 48kHz vzorkování. Ve svých produktech používá samozˇrejmˇekonkatenativní syntézu. Produkty Nuance podporují pˇribližnˇe18 jazyk ˚ua u vˇetšinyz nich je možnost vybírat z více hlas ˚u. Interaktivní demo spoleˇcnostiLoquendo je velmi impozantní, nebot’ TTS dodávaný touto firmou má krom bˇežnˇedostupných segment ˚u,také segmenty pro smích, pokašlávání, zadr- hávání ˇreˇciapod.

3.3.4 TTS spoleˇcnostiSpeechTech

SpeechTech s.r.o.14 je ˇceskáfirma, která vznikla pˇriZápadoˇceskéuniverzitˇev Plzni. Hlavní produkt SpeechTechu je ERIS (Engine for Recognition, Identification and Synthesis). TTS ˇcástsystému ERIS podporuje ˇceštinu,slovenštinu a nˇemˇcinu.V pˇrípravˇejsou francouzština, angliˇctinaa ruština. ERIS TTS podporuje Microsoft SAPI4 a proprietální rozhraní. O pod- poˇrejiných technologií, nebo standard ˚use internetová prezentace firmy nezmiˇnuje. Kvalita výstupu v pˇripravovanéverzi, která se má na trh dostat zaˇcátkemroku 2007, je subjektivnˇehodnocená jako velmi dobrá. Základem produktu ERIS TTS je Artic15. Ceskýˇ TTS systém vyvíjený v Oddˇeleníumˇeléinteligence na Katedˇrekybernetiky Západoˇceské univerzity v Plzni.

3.4 Vlastnosti FreeTTS

FreeTTS je systém syntézy ˇreˇcinapsaný pˇrímov jazyce Java, což mu dává jisté možnosti (snadná pˇrenositelnost,možnost použití jako aplet), ale také bohužel jistá omezení (horší výkonnost, nutnost použití JVM (Java Virtual Machine)). Navíc se jedná o OpenSource pro- dukt, který vznikl v laboratoˇrispoleˇcnostiSun Microsystems16, ale není urˇcenýpro kon- krétní aplikaci. Pro použití FreeTTS je zapotˇrebíJava (TM) 2 SDK, Standard Edition, 1.4, nebo vyšší. Jazyk Java je zajímavý díky volné pˇrenositelnostimezi platformami a tuto vlastnost spl- ˇnujei FreeTTS. FreeTTS je knihovna ve formátu jar, která je pomˇernˇemalá. Souˇcástídistri- buce je i nˇekolikukázkových aplikací, které názornˇedemonstrují možnosti použití FreeTTS. Mezi nˇepatˇrítaké:

• pˇríkladypoužití FreeTTS s JSAPI syntetizaˇcnímrozhraním.

13. http://www.loquendo.com 14. http://www.speechtech.cz 15. http://ui.zcu.cz/projects/tts 16. http://www.sun.com

12 3.4. VLASTNOSTI FREETTS

• pˇríkladypoužití FreeTTS pˇrímos FreeTTS API bez standardizovaných rozhraní. • pˇríkladypro vytvoˇreníJava Web Start aplikace. Tato forma aplikace je zajímavá pˇre- devším díky možné spustitelnosti a použitelnosti pˇrímove webovém prohlížeˇci. • pˇríkladyaplikace typu klient/server s implementovaným klientem v jazyce Java a v jazyce C. Server je souˇcástídistribuˇcníknihovny FreeTTS.

3.4.1 Hlasy podporované FreeTTS FreeTTS podporuje jak hlasy pro omezenou doménu, tak pro doménou obecnou. Stejnˇejako FestVox také FreeTTS m ˚užepoužívat dva druhy konkatenativní syntézy. Difónovou syntézu a syntézu za použití výbˇeru segment ˚u.[3] FreeTTS podporuje r ˚uznéhlasy. Standardnˇeje možné využívat 3 hlasy, které jsou sou- ˇcástíknihovny a tˇrisamostatnˇestáhnutelné hlasy ze systému MBROLA: • 8kHz, difónový anglický hlas zvaný kevin Hlas má pouze nízkou (telefonní) kvalitu, jedná se o objemovˇemalou databázi di- fón ˚us použitelností v obecné doménˇe. • 16kHz, difónový anglický hlas zvaný kevin16 Stˇrednˇekvalitní hlas pro obecnou doménou. Databáze je stejnˇerozsáhlá jako v pˇrí- padˇehlasu kevin, pouze vzorky jsou uloženy ve vyšší kvalitˇe. • 16kHz cluster unit anglický hlas pojmenovaný alan Tento hlas je založen na trochu odlišném principu. Databáze není složená z difón ˚u a hlas nepodporuje obecnou doménu, ale podporuje pouze ˇcasovéinformace. Z d ˚u- vodu užší specializace domény však dosahuje vysoké kvality. • jeden 16kHz anglický ženský hlas pro obecnou doménu Jeden z MBROLA hlas ˚uje díky objemnˇejšídatabázi difón ˚ukvalitnˇejší,než ty, které jsou souˇcástíFreeTTS. Jedná se souˇcasnˇeo jediný ženský hlas, který je bez nutnosti dalších úprav možno používat s FreeTTS. • dva 16kHz anglické mužské hlasy pro obecnou doménu Volnˇestáhnutelné MBROLA hlasy jsou díky objemnˇejšídatabázi difón ˚ukvalitnˇejší, než ty, které jsou souˇcástíFreeTTS. FreeTTS používá bˇežnýformát hlas ˚u, není problém pˇridatdalší hlasy ze systému MBROLA, bohužel v souˇcasnéchvíli pouze anglické. D ˚uvodemproˇcnení možné využívat jiné jazyky, než angliˇctinuje, že FreeTTS neobsahuje seznam foném ˚ua statistická data v jiných jazy- cích než v angliˇctinˇe.Rozšíˇrenípro další jazyky je možné doplnit a tato možnost je dobˇre popsaná. V souˇcasnédobˇeje ve vývoji také podpora španˇelštiny. Stejnˇetak je možné im- portovat hlasy ze systému FestVox. FreeTTS umožˇnujei další jazyky pˇreveditelnéz formátu FestVox.

13 3.4. VLASTNOSTI FREETTS

3.4.2 Standardy podporované FreeTTS V kapilole 3.1 jsme si pˇredstavilinˇekteréstandardy pro TTS systémy. FreeTTS bohužel žádné z nich s výjimkou JSAPI nepodporuje. Nicménˇeje možné (a žádnoucí) ukázat, že alespoˇn nˇekteréz tˇechtostandard ˚uje reálné ve spolupráci s FreeTTS využít.

3.4.2.1 JSAPI (Java Speech Application Programming Interface) JSAPI (Java Speech Application Programming Interface)17 je rozhraní schválené JCP (Java Comunity Process). Jedná se o rozhraní, které by mˇelyimplemetovat všechny TTS systémy napsané v jazyce Java, aby bylo možné jednotlivé implementace tohoto rozhraní vymˇeˇno- vat bez nutnosti mˇenitkód aplikace, která TTS systém využívá. Cásteˇcnoureferenˇcníimple-ˇ mentaci JSAPI FreeTTS nabízí. Ve spolupráci s jiným OpenSource projektem Sphinx418, což je ˇreˇcovýrozpoznávaˇc(speech recognizer) napsaný v jazyce Java, dává k dispozici témˇeˇr kompletní implementaci specifikace JSAPI. FreeTTS standardnˇenepodporuje SSML. P ˚uvodnˇemˇelobsahovat podporu staršího znaˇc- kovacího jazyka JSML, ale ani ta nebyla z d ˚uvodupˇresunuvývojáˇr˚una jiný projekt do- konˇcena. Cásteˇcnˇevšakˇ podporuje JSAPI resp. podporuje specifikaci javax.speech.synthesis. Podpora JSAPI 1.0 ve FreeTTS má následující omezení: [3] • JSML znaˇckyjsou ignorovány. FreeTTS JSML znaˇckysice zpracuje, ale nijak neapli- kuje jejich význam na obsažený text. • FreeTTS negeneruje události WORD_STARTED a MARKER_REACHED. • Práce s databází segment ˚unení podporována. • Metoda Synthesizer.phoneme() není implementovaná.

3.4.2.2 SSML a jazyky pro ovlivˇnovánívýstupu FreeTTS bohužel nepodporuje žádný jazyk pro ovlivˇnovánívýstupu, nicménˇenabízí API s kvalitními možnostmi. FreeTTS umožˇnujepˇresFreeTTS API, které rozšiˇrujeJSAPI, ovliv- ˇnovatnásledující parametry výstupu: • hlas (voice) Možnost používat relativnˇeširoké spektrum hlas ˚u(viz. kapitola 3.4.1). Hlasy je možné mˇenitza bˇehuaplikace. U hlas ˚uumožˇnujenastavit název, vˇek,pohlaví a jazyk. • rychlost ˇreˇci(speeking rate) FreeTTS umožˇnujezmˇenitrychlost mluvení. Na rychlost syntézy nemá tento param- ter žádný vliv.

17. http://java.sun.com/products/java-media/speech 18. http://cmusphinx.sourceforge.net/sphinx4

14 3.4. VLASTNOSTI FREETTS

• výšku hlasu (pitch)

• hlasitost (volume) Stejnˇejako výšku hlasu je možné mˇeniti hlasitost. Pˇripˇrílišvysoké hlasitosti se však syntetizovaný text stává špatnˇesrozumitelným.

3.4.2.3 Klient/server komunikaˇcníprotokol Bohužel FreeTTS nepodporuje standardní komunikaˇcníprotokoly a místo toho zavádí sv ˚uj vlastní protokol. Ten je pomˇernˇejednoduchý a je popsán v distribuci FreeTTS. Souˇcástídis- tribuce je i ukázkový pˇríkladaplikace klient/server. Tento pˇríkladobsahuje implementaci serveru v jazyce Java. Klienti jsou implementováni v jazycích Java a C. [3]

Klient Server ------1. Cekáníˇ na spojení. 2. Ustavení spojení se serverem. 3. Akceptace spojovacího požadavku. 4. <--- Zaslání retˇ ezceˇ "READY\n". 5. Zaslání retˇ ezceˇ "TTS\n". ---> 6. Zaslání "\n". ---> 7. Zaslání "\n". ---> 8. Provedení syntézy TTS. 9. <--- Zaslání "\n". 10. <--- Zaslání syntetizovaného audia. 11. <--- Zaslání "-1\n" pro "žádná další data". Nebo zaslání "-2\n" pro oznaceníˇ chyby. 12. Pro další syntézu, zpetˇ na krok 5. 13. Zaslání retˇ ezceˇ "DONE\n". ---> 14. Uzavreníˇ spojení.

Pˇríklad3.4.1: Protokol klient/server u FreeTTS

3.4.3 Výkonnost FreeTTS vs. Flite Protože se bavíme o systémech rozpoznávajících ˇreˇc,m ˚užese naskytnout otázka, zda Java, jakožto jazyk, který není kompilován do nativního kódu, ale je spouštˇenprostˇrednictvím JVM (Java Virtual Machine), není pˇrílišpomalá. Studie provedená Sunem [3] na systému FreeTTS ukazuje, že FreeTTS je oproti Flite pomalejší. V této studii vychází FreeTTS jako horší s pomˇerem celkové vykonnosti 1:1,9 (konkrétní výsledky viz. pˇríloha A). Ovšem je nutné podotknout, že studie pochází z roku 2002. Poslední roky se Java a pˇre- devším jednotlivé implementace JVM dramaticky vyvíjejí, takže je silnˇepravdˇepodobné,

15 3.4. VLASTNOSTI FREETTS

že výkonnost bude v dnešní dobˇejiž témˇeˇrsrovnatelná. To ukazuje i srovnání ze stránek FreeTTS [3], které je o dva roky novˇejší.

Jeden CPU 296MHz SPARC v9 Flite FreeTTS Nahrávací ˇcaspro text ’Alice’ 0,0s 4,1s Casˇ zpracování textu ’Alice’ 43,7s 24,1s Nahrávací ˇcaspro text ’Journey’ 0,0s 7,0s Casˇ zpracování textu ’Journey’ 1019,2s 341,0s Casˇ do prvního vzorku (vˇetao 10 slovech) 195ms 41ms

Tabulka 3.1: Srovnání výkonnosti FreeTTS a Flite (2004)

16 Kapitola 4 W3C Speech Interface Framework a platforma OptimTalk

W3C Speech Interface Framework1 je sada znaˇckovacíchjazyk ˚upro vývoj hlasových apli- kací. Má za cíl popsat oblast hlasových dialog ˚u,syntézy ˇreˇci,rozpoznávání ˇreˇci,telefonní interakce a další ˇcástihlasových aplikací. Mezi jazyky W3C Speech Interface Frameworku patˇrí:[10]

• VoiceXML 2.0

• Speech Recognition Grammar Specification (SRGS)

• Speech Synthesis Markup Language (SSML)

• Semantic Interpretation for Speech Recognition (SISR)

• Call Control (CCXML)

Typickým použitím W3C Speech Interface Frameworku je provoz nˇekteré z následujících aplikací ˇciˇrešení:

• telefonní a rezervaˇcnílinky

• call centra

• automatická operátorka

• automatické telefonní systémy - využití pro telemarketing, získávání informací od klient ˚uatd.

• hlasové ovládání vzdálených zaˇrízení

Zjednodušený bˇežnýscénáˇr: Uživatel zavolá do systému. CCXML interpret rozhodne (dle popisu v aktuálnˇeinterpretovaném CCXML dokumentu), jak se s hovorem naloží. Jednou z možností je, že hovor pˇrijmea propojí ho s dialogem. Uživatelské vstupy zpracovává roz- poznávaˇcˇreˇci.Tomu je za použití SRGS gramatiky ˇreˇceno,co má rozpoznávat. Rozpoznané fráze se zašlou sémantickému interpretu, který z nich, za použití SRGS gramatiky rozšíˇrené o SISR tagy, extrahuje formálnˇereprezentovanou sémantiku. Tato sémantika je pˇredánado

1. http://www.w3.org/TR/voice-intro

17 4.1. VOICEXML 2.0 (VOICE EXTENSIBLE MARKUP LANGUAGE) dialogového manažeru, jehož chování je popsáno pomocí jazyka VoiceXML. Dialogový ma- nažer (VoiceXML interpret) v pˇrípadˇepotˇrebyodešle data na dokumentový server a udˇelá další potˇrebnéakce. Poté zaˇradíelementy do fronty, aby mohl být proveden další krok dialogu. Obsah element ˚u, které jsou pˇrehráványzpˇetsmˇerem k uživateli ˇreˇcovýmsyntetizérem, je popsán v jazyce SSML.

V následujících kapitolách se budeme vˇenovattˇemˇcástemW3C Speech Interface Fra- meworku, které jsou z hlediska této práce zajímavé nebo d ˚uležité.

4.1 VoiceXML 2.0 (Voice eXtensible Markup Language)

Jazyk VoiceXML 2.0 (Voice eXtensible Markup Language) byl vytvoˇrenkonsorciem W3C v rámci "Voice Browser" aktivity. První verze VoiceXML (ze které verze 2.0 vychází) však byla vytvoˇrenaVoiceXML fórem založeným firmami AT&T, IBM, Lucent a Motorola. Fó- rum bylo založeno pro vývoj a podporu jazyka VoiceXML. Nového poˇcítaˇcovéhojazyka urˇcenéhopro zpˇrístupnˇeníobsahu a informací z internetu pˇrestelefon. [9] VoiceXML je jazyk urˇcenýpro popis dialog ˚umezi ˇclovˇekema strojem, který podporuje:

• pˇrehrávánísyntetizované ˇreˇciuživateli (text-to-speech)

• pˇrehráváníaudio soubor ˚u

• rozpoznávání mluvené ˇreˇci

• zadávání vstupu pomocí tónové volby

18 4.1. VOICEXML 2.0 (VOICE EXTENSIBLE MARKUP LANGUAGE)

• nahrávání a ukládání mluveného vstupu

• nˇekterételefonní operace jako napˇríkladpˇrepojeníhovoru a zavˇešení

4.1.1 ProˇcVoiceXML Hlavním smyslem vytvoˇreníVoiceXML je snaha o zjednodušení vývoje aplikací pˇrístup- ných pˇrestelefon a ovládaných hlasem. Jedná se o standard využívající tˇrívrstvouarchitek- turu. Pˇripoužití VoiceXML jsou autoˇriVoiceXML aplikací odstínˇeniod nízkoúrovˇnového programování. Vývojáˇritakových aplikací, pouze pomocí VoiceXML navrhnou dialogy, po- mocí kterých má aplikace s uživatelem komunikovat. Vývoj za pomoci VoiceXML jazyka je levný (zmˇenyovlivní pouze prezentaˇcní vrstvu) a rychlý (jedná se o interpretovaný jazyk). VoiceXML zajišt’uje interoperabilitu mezi jednotlivými implementacemi Speech Interface Frameworku. Hlasové služby jsou ve VoiceXML vedeny jako sekvence dialog ˚umezi uživatelem a apli- kací. Dialogy jsou aplikaci poskytovány dokumentovými servery (document servers), které by mˇelybýt od samotné aplikace oddˇelené.Mohou to být napˇríkladWWW servery. Servery provádˇejíveškerou aplikaˇcnílogiku, pˇristupujído databáze, zajišt’ují kontrolu pˇrístupových práv k dat ˚uma jako výsledek vracejí dialogy ve formátu VoiceXML.

4.1.2 Struktura VoiceXML dokumentu Každý VoiceXML dokument se skládá z element ˚u,které nazýváme dialogy. Jedním typem dialog ˚ujsou formuláˇre.Ty, krom jiných ˇcástí,mohou obsahovat také sadu tzv. položek for- muláˇre.Položky formuláˇrejsou postupnˇeinterpretovány algoritmem FIA (Form Interpre- tation Algorithm), který je popsán ve specifikaci VoiceXML. Každá položka m ˚užeobsahovat jeden nebo více element ˚u. je pro práci klíˇcovýmelementem, protože ˇrídívýstup pro syntetizér (a také umožˇnujepˇrehrávatpˇredpˇripravenéaudio). Jednotlivé prompty se okamžitˇeˇradído fronty pro syntézu (pˇrehrání)a jsou postupnˇepˇrehrávány. V tˇelˇeelementu jsou obsaženy znaˇckyjazyka SSML. Vítejte v obchodeˇ s pocítaˇ ci.ˇ

Pˇríklad4.1.1: Pˇríkladelementu

Položky formuláˇremohou obsahovat následující elementy: [9]

• <field> - pole formuláˇre- elementy se pˇrehrávajía souˇcasnˇese rozpo- znává uživatelský vstup.

19 4.2. SSML (SPEECH SYNTHESIS MARKUP LANGUAGE)

- nejdˇrívese pˇrehrajíelementy a poté se zaˇcnenahrávat.

- nejdˇrívese pˇrehrajíelementy a poté se zaˇcnehovor pˇrepojo- vat jinam.

- pˇrehráváelementy a potom nebo i souˇcasnˇevykonává platfor- movˇezávislou ˇcinnost.

- element pro tvorbu znovupoužitelných dialog ˚ua hlasových aplikací

- obsahuje spustitelný obsah. Jednotlivé pˇríkazyspustitelného obsahy se vykonávají jeden po druhém. Jednou ze spustitelných položek je i element

- pˇrehráváelementy a souˇcasnˇeˇcekána vstup od uživatele stejnˇe jako <field>. Slouží pro tvorbu dialog ˚use smíšenou iniciativou.

Ahoj svete!ˇ

Pˇríklad4.1.2: Pˇríkladjednoduchého VoiceXML dokumentu

4.2 SSML (Speech Synthesis Markup Language)

Jak již bylo ˇreˇcenov kapitole 3.1 SSML je jazyk urˇcenýpro popis výstupu syntetizéru a pro zvýšení kvality výstupu. SSML je nejˇcastˇejipoužíváno ve spojení s VoiceXML automatic- kými telefonními systémy, kde se používá v elementu , ale stejnˇedobˇreje možné jej používat i samostatnˇe. SSML umožˇnujeovlivˇnovatnásledující parametry ˇreˇci:

– explicitní urˇcenítypu dat

Toto je datum definované W3C: 4/6. ????0604.

Pˇríklad4.2.1: Pˇríkladelementu

20 4.2. SSML (SPEECH SYNTHESIS MARKUP LANGUAGE)

Element umožˇnujeexplicitní urˇcenítypu dat, která jsou poté v závislosti na konkrétním typu syntetizována. Klíˇcovýje v tomto pˇrípadˇeatribut „interpret-as“, který m ˚uženabývat následujících hodnot: „date“, „time“, „telephone“, „characters“, „cardinal“, „ordinal“, „currency“.

– fonetický pˇrepistextu

– zmˇenahlasu Marie má peknéhoˇ psa, jeho srst je bílá jako sníh. Chci být jako Mike.

Pˇríklad4.2.2: Pˇríkladelementu

K dispozici jsou následující atributy:

– xml:lang - jazyk ve kterém má být hlas použit – „name“ - jméno hlasu, který se má použít – „gender“ - jaké má být pohlaví použitého hlasu – „variant“ - varianta hlasu, kterou chceme využít – „age“ - preferovaný vˇek

– pˇridáníresp. odebrání d ˚urazu

– vložení pauzy, nebo naopak její zákaz

– ovlivnˇeníprozodie Dostupnými atributy elementu jsou:

– „pitch“ - výška hlasu – „contour“ - kontura – „rate“ - rychlost – „volume“ - hlasitost – „duration“ - doba trvání – „range“ - rozsah hlasu

Cena XYZ $45

Pˇríklad4.2.3: pˇríkladelementu

21 4.2. SSML (SPEECH SYNTHESIS MARKUP LANGUAGE)

- identifikuje obklopený text jako odstavec. Umožˇnujemˇenitjazyk.

- oznaˇcujeobklopený text jako jednu vˇetu.Umožˇnujemˇenitjazyk.

- definuje jak psanou tak mluvenou variantu textu

W3C

Pˇríklad4.2.4: Pˇríkladelementu

Pˇríklad4.2.5: Pˇríkladelementu

SSML také umožˇnujespojovat pˇredempˇripravenéˇcástiaudio výstupu s textem k syntéze.

Telephone Menu: Level 1

For English, press one. Para espanol, oprima el dos.

Pˇríklad4.2.6: Pˇríkladkombinovaného SSML dokumentu

22 4.3. DALŠÍ JAZYKY Z RODINY W3C SPEECH INTERFACE FRAMEWORK

4.3 Další jazyky z rodiny W3C Speech Interface Framework

Ostatní jazyky z W3C Speech Interface Frameworku nejsou pro další práci klíˇcové,takže se jim nebudeme vˇenovatpodrobnˇe,ale protože se v dalším textu mohou objevit, alespoˇn v nástinu je popíšeme.

4.3.1 CCXML (Call Control eXtensible Markup Language) Call Control eXtensible Markup Language (CCXML) je XML standard, který byl navržený k popisu telefonní interakce. Opˇet,jako ve všech pˇrípadech,se jedná o samostatný jazyk. [10] CCXML je možné si jednoduše pˇredstavitjako stavový automat který, podle stavu ve kterém se právˇenachází, udává možné pˇrechody. Pˇríkladyudálostí, které tvoˇrípˇrechody mezi stavy mohou být:

• pˇríchozíhovor

• zvednutí hovoru

• ...

• ukonˇceníhovoru

4.3.2 SRGS (Speech Recognition Grammar Specification) Speech Recognition Grammar Specification (SRSGS) je standard W3C, které definuje syntaxi XML gramatik používaných pro ˇreˇcovérozpoznávaˇce.[10]

4.3.3 SISR (Semantic Interpretation for Speech Recognition) Semantic Interpretation for Speech Recognition (SISR) zatím není dokonˇcenoa je v poslední fázi standardizace. SISR se snaží o popis strojovˇezpracovatelné sémantiky. Jazyk popisuje jak provést výpoˇcetsémantiky promluvy nad derivaˇcnímstromem této promluvy. [10]

4.4 Platforma OptimTalk

OptimTalk je platforma pro provoz hlasových aplikací založená na Speech Interface Fra- meworku. Jedná se vlastnˇeo jednu z implementací tohoto frameworku. OptimTalk posky- tuje nezbytná rozhraní pro vývoj hlasových aplikací nezávislých na konkrétních implemen- tacích. Pro vývojáˇrese k OptimTalku dodává SDK (Software Developement Kit), který usnad- ˇnujerealizaci nových komponent a integraci text-to-speech systém ˚u,ˇreˇcovýchrozpozná- vaˇc˚uapod. K dispozici je i kvalitní vývojáˇrskádokumentace, která popisuje principy fun- govaní komponent a jejich rozhraní.

23 4.4. PLATFORMA OPTIMTALK

OptimTalk se dá oznaˇcitza modulární systém, který umožˇnujeintegraci s libovolnými rozpoznávaˇcia syntetizéry ˇreˇci,systémy gramatik a sémantickými interprety. OptimTalk je možno rovnˇežvyužít k vytváˇrení multimodálních aplikací ˇcihlasem ovládaných desktopo- vých aplikací. Pˇripoužití OptimTalku je jednoduché vytváˇrethlasové a telefonní aplikace pˇredevšímproto, že má všechny výhody VoiceXML platformy a odstiˇnujeprogramátora od nízkoúrovˇnovéhoprogramování. Také šetˇríˇcaspotˇrebnýpro integraci nových kompo- nent tím, že obsahuje mnohé funkˇcnosti,které by jinak musel každý programátor vytváˇret. Napˇríkladpˇriintegraci nového TTS systému OptimTalk sám o sobˇeinterpretuje element , zpracovává pˇrímoelementy

4.4.1 Životní cyklus výstupní komponenty Na zaˇcátkudialogu VoiceXML interpret inicializuje výstupní komponentu. Metodami out- put* (output, outputSub, outputSayAs) dochází k pˇredáváníjednotlivých text ˚uobsažených v elementu . Prostým zˇretˇezenímtˇechtotext ˚ubychom dostali obsah elementu bez jakýchkoli SSML znaˇcek. Výstupní komponenta však m ˚užeimplementovat metody pro ovlivnˇenívýstupu. Takovými metodami jsou napˇr.voiceBegin(), voiceEnd(), emphasisBegin(), breakElem(). Tyto metody reprezentují rozhraní, které je voláno pˇrizpra- covávání SSML znaˇcekuvnitˇrelementu . Tento postup je opakován, dokud není dialog ukonˇcen.Na konci je zavolán destruktor.

24 Kapitola 5 Integrace FreeTTS s platformou OptimTalk

Stˇežejnípraktickou ˇcástípráce je propojení systému FreeTTS s VoiceXML platformou Op- timTalk. Jako souˇcástintegrace naimplementujeme novou výstupní komponentu. Protože výstupní komponenta je v jazyce C++, zatímco FreeTTS je v jazyce Java, byla komponenta free_tts_output pomocí JNI napojena na jednoduchou knihovnu napsanou v jazyce Java. Ta zajišt’uje pˇrístupk potˇrebnýmfunkcím JSAPI (resp. FreeTTS API).

5.1 JNI (Java Native Interface)

JNI (Java Native Interface) je technologie, která umožˇnujeintegrovat nativní kód psaný v C (resp. C++) s kódem napsaným v jazyce Java. JNI je rozhraní mezi jazykem Java a nativním kódem. Je souˇcástíjavovského balíku JDK a samotné Java Virtual Machine (JVM) a bylo vyvinuto spoleˇcností ˇcásteˇcnˇena základˇeJRI (Java Runtime Interface) spoleˇcnostiNetscape. JNI je navrženo tak, aby byla zajištˇenapˇrenositelnostaplikací mezi platformami. Jediné, co je tˇrebapˇriportování na jinou platformu udˇelat,je dodat ˇcásti,které jsou specifické pro dané prostˇredí(nativní ˇcásti).Programátoˇrivyužívají JNI pro psaní tzv. nativních metod v tˇechsituacích, kdy není možné celou aplikaci napsat v Javˇe.Jedná se zejména o tyto pˇrí- pady: [5]

• Vykonání platformˇezávislé funkˇcnosti Standardní knihovna Javy JDK obsahuje pouze tu funkˇcnost,která je spoleˇcnávšem platformám. Ze své podstaty nepodporuje takové záležitosti, které jsou závislé na konkrétní platformˇe,jako jsou napˇr.funkce pro práci s registry ve Windows, které nemají obdobu tˇrebav Unixu. Pro zajištˇenípˇrístupuk registr ˚umWindows je tˇreba napsat vlastní nativní metody (napsané pod Windows napˇr.v C), které se pomocí JNI volají z Javy.

• Využívání existujících knihoven ˇciaplikací Nˇekdyje tˇrebavyužívat z Javy již existujících knihoven nebo spolupracovat s jinými aplikacemi, které nejsou napsány v Javˇe.Napˇr.pokud potˇrebujemeˇrešitˇcástapli- kaˇcnílogiky v Prologu, který není z Javy jinak dosažitelný, lze toho docílit užitím JNI.

25 5.1. JNI (JAVA NATIVE INTERFACE)

• Implementace ˇcasovˇekritických operací Kód Javy, který je interpretovaný virtuálním strojem, nemusí vždy dosahovat opti- málního výkonu. V nˇekterýchpˇrípadechm ˚užemevýkon aplikace zvýšit tím, že vý- konnostnˇekritické ˇcástiimplementujeme v nativním kódu a tuto funkˇcnostbudeme volat z Javy pomocí JNI.

5.1.1 Schéma aplikace využívající JNI

Aplikace sestává ze dvou nesourodých ˇcástí - Java ˇcásta nativní ˇcást.JNI slouží jako pojítko mezi nativní ˇcástía Java ˇcástí:

Existují dva zp ˚usobyspolupráce Javy a nativního kódu:

• vyvolání funkˇcnostiv nativním jazyce z prostˇredíJavy Spoˇcíváv implementaci tzv. nativních metod. JNI framework umožˇnuje,aby se na- tivní metody chovaly jako plnohodnotné metody v Javˇe,což zahrnuje následující vlastnosti: mohou být volány z Javy, mohou volat další metody objektu k nˇemuž náleží, mohou ˇcísta modifikovat atributy objektu k nˇemužnáleží, mohou pracovat se statickými atributy a volat statické metody jiných tˇríd,mohou pˇrijímatreference na jiné objekty ˇcipole nebo je vytváˇret(respektuje garbage collector JVM), mohou vracet reference na objekty v návratových hodnotách. Také lze využít standardních možností synchronizovaného pˇrístupuk metodám z více vláken, možnosti pˇristupo- vat k JVM nebo nahrávat další tˇrídypomocí Java Reflexion. JNI zaruˇcujeprovˇeˇrování správnosti typ ˚upromˇennýchza bˇehu,ˇrešízachytávání a vyvolávání výjimek, které mohou být šíˇrenymimo hranice nativní metody.

• vyvolání funkˇcnostiJavy z prostˇredínativní aplikace

26 5.2. MOŽNÉ VARIANTY INTEGRACE

JNI slouží pˇredevšímpro volání nativních metod z Javy, ale je podporován i tento obrácený zp ˚usob- použití podmnožiny JNI - tzv. Invocation API. V pˇrípadˇe,že naší výchozí aplikací je nejavovská aplikace, m ˚užemese pˇripojitk prostˇredíJavy (spustit JVM) a vytváˇreta používat tˇrídyJavy. Lze volat metody JDK, využívat naše vlastní tˇrídynebo využívat standardní funkce JVM. Narozdíl od první možnosti (v pˇrípadˇe této varianty) musíme vytvoˇrit a následnˇeˇríditaplikaci z prostˇredínativního jazyka, což m ˚užepˇrinášetkomplikace v podobˇeztížené práce. Navíc není možné použí- vat nˇekterépomocné nástroje. Klasickým pˇríklademvyužití Java Invocation Api je program java.exe, který je nativní aplikací s prostým úkolem: nastartovat JVM, ana- lyzovat parametry pˇríkazovéˇrádkya zavolat na pˇríslušnétˇrídˇestatickou metodu main.

5.2 Možné varianty integrace

FreeTTS je velmi dobˇredostupný syntetizér, je zdarma, platformovˇenezávislý, má velkou podporu r ˚uznýchhlas ˚ua je možné jej používat v modelu klient/server. Má proto potenciál být nadpr ˚umˇernýmtext-to-speech systémem. Systém lze integrovat s VoiceXML platformou OptimTalk nˇekolikazp ˚usoby:

5.2.1 Jednosmˇernáintegrace Jedná se o zp ˚usobpropojení, kdy je JVM vytváˇrenaze strany platformy OptimTalk. Metody v Javˇejsou volané pomocí JNI z prostˇredíOptimTalku. Jako vstupní bod pro toto propojení slouží výstupní komponenta platformy OptimTalk. Mezi výstupní komponentu a FreeTTS je vložena jednoduchá knihovna, která zajišt’uje inicializaci FreeTTS, nastavení výchozích parametr ˚u,výbˇerjazyka a volání API ovlivˇnujícíhovýstup (FreeTTS API, JSAPI). Syntetizovaný výstup však není vracen zpˇetdo OptimTalku, ale je pˇrímoposílán na vý- stup audio systému operaˇcníhosystému. Toto ˇrešenísamozˇrejmˇeneumožˇnujevyužít výhod systému OptimTalk, protože nezasílá zpˇetdo platformy OptimTalk syntetizované audio. Není jej napˇríkladmožné napojit jako souˇcásttelefonního systému. Je zajímavý pˇredevším svou jednoduchostí a možností použití výstupu pˇreswebový prohlížeˇca Java aplet. Pokud by tato možnost nebyla, jednalo by se o nepˇrílišzajímavé ˇrešení.

27 5.2. MOŽNÉ VARIANTY INTEGRACE

5.2.2 Obousmˇernáintegrace pomocí JNI

Stejnˇejako v pˇredchozímpˇrípadˇeje i pˇripoužití tohoto zp ˚usobunapojení využíváno JNI. Výstupní komponenta i knihovna na stranˇeJavy bude stejná jako v pˇredchozímpˇrípadˇe, ale navíc bude obsahovat ˇcástpro zaslání syntetizovaného audia zpˇetdo OptimTalku. Jde o plnohodnotný zp ˚usobpropojení, takže je možné využívat všechny výhody VoiceXML plat- formy OptimTalk, jako je napˇr.napojení na telefonní systém apod. Návrat syntetizovaného audia zpˇetdo OptimTalku je možno ˇrešitr ˚uznýmizp ˚usoby:

5.2.2.1 Rešeníˇ pomocí doˇcasnýchsoubor ˚u

Syntetizovaný text v audio formˇeje uložen do doˇcasnéhosouboru. Pˇredemje definováno umístˇení,kam se doˇcasnésoubory budou ukládat. TTS systém syntetizuje a uloží audio soubor vždy, když je dokonˇcenapromluva. OptimTalk si následnˇesoubor vyzvedne a dále s ním pracuje.

5.2.2.2 Rešeníˇ pomocí audio stream ˚u

Rozdíl oproti metodˇepopsané v kapitole 5.2.2.1 je ten, že pˇrenossyntetizovaného audia z knihovny v Javˇezpˇetdo výstupní komponenty neprobíhá skrze souborový systém, ale pˇrenosprobíhá pomocí stramu opˇetpˇresJNI. Ten je pak zpracováván naprosto identicky jako v pˇredchozímpˇrípadˇe.

28 5.3. PRAKTICKÁ REALIZACE

5.2.3 Obousmˇernéintegrace pomocí socket ˚u

Další možností je použít propojení typu klient/server. SouˇcástíFreeTTS je server a do vý- stupní komponenty OptimTalku je možné implementovat klienta. Distribuce FreeTTS obsa- huje klienta napsaného v jazyce Java a v jazyce C. Výhodou tohoto zp ˚usobunapojení je, že není použito JNI a OptimTalk s TTS systémem je možné provozovat na fyzicky odlišném provozním prostˇredí,což umožˇnujelépe rozložit zátˇežsystému. Tento zp ˚usobzajišt’uje dostateˇcnouškálovatelnost (je možné pˇridatdalší servery), a také se zjednodušuje instalace na klientské stanice. Je zapotˇrebísi uvˇedomitnˇekteréz možných nevýhod. Vˇetšinaz nich nebude v typickém prostˇredírelevantní, protože typickým prostˇredímbude intranet, ale pokud obˇeˇcástinepro- vozujeme na jednom poˇcítaˇci,je nutné zajistit stálé propojení mezi OptimTalkem a FreeTTS, zajistit nízké latence, dostupnost a povolení na zabezpeˇcovacíchprvcích. Navíc pˇripoužití bˇežnýchpˇrenosovýchprotokol ˚unebudeme mít informace z logování na jednom místˇe.

5.2.4 Srovnání integraˇcníchpostup ˚u

Z hlediska výkonu by bylo vhodné použít poslednˇejmenovaný zp ˚usobpropojení pomocí socket ˚u.Bohužel FreeTTS zavedlo sv ˚ujvlastní komunikaˇcníprotokol, který není standardi- zovaný, což m ˚užebýt znaˇcnounevýhodou. Výhodou propojení pˇresJNI je tˇesnˇejšíintegrace komponenty do platformy OptimTalku, není nutné zajišt’ovat bˇežícíserver a je možné jednodušše využít Java Web Start aplikace. Tento zp ˚usobintegrace je vhodnˇejšípokud není oˇcekávánopˇrílišnévytížení systému.

5.3 Praktická realizace

Pro praktickou realizaci byla zvolena kombinace postupu popsaného v kapitole 5.2.1 a v ka- pitole 5.2.2.1, která kombinuje všechny výhody obou postup ˚u.

29 5.3. PRAKTICKÁ REALIZACE

Realizace v obou pˇrípadechznamená vytvoˇrenínové výstupní komponenty na stranˇe OptimTalku. Vzhledem k podobnostem obou zp ˚usob˚uintegrace je možné slouˇcitfunkcio- nalitu obou komponent do jedné. Výslednou komponentu jsme pojmenovali free_tts_ouput. Mezi jednosmˇernoua obousmˇernouintegrací m ˚užemepˇrepínatv konfiguraci komponenty. Kód komponenty se skládá z implementovaných metod rozhraní pro výstupní komponenty OptimTalku. V jazyce Java jsme implementovali tˇríduFreeTTSOutput, která je ekvivalentem výstupní komponenty OptimTalku a realizuje samotné napojení na FreeTTS API. Knihovnu jejíž je souˇcástíjsme nazvali OptimTalkFreeTTSComponent.

5.3.1 Výstupní komponenta free_tts_ouput

Výstupní komponenta free_tts_output obsahuje následující klíˇcovémetody: FreeTtsOutput() konstruktor - inicializuje komponentu free_tts_output. VytvoˇríJVM a instanci Java tˇrídyFreeTTSOutput. Ta provede patˇriˇcnánastavení na syntetizéru. Iniciali- zace JVM a vytvoˇrenímostu mezi tˇrídamibohužel trvá delší dobu, ale provádí se pouze jedinkrát pˇrivytvoˇreníkomponenty. Pokud by se vyskytla neošetˇrenávýjimka ve FreeTTS, která by vedla k pádu JVM (bˇežnávýjimka pád JVM nezp ˚usobí),muselo by dojít k opˇetov- nému vytvoˇreníkomponenty. Opakem je destruktor, který se stará o destrukci JVM a také o zrušení komponenty free_tts_output. output() zašle text na syntézu do FreeTTS, které text syntetizuje a okamžitˇejej zpˇrístup- ˇnujepro Java Web Start aplikaci, v pˇrípadˇeobousmˇernéhopˇrístupujej ukládá do vyrov- návací pamˇetia ˇcekána zavolání metody endOfSegment(). Stejným zp ˚usobemfungují i metody outputSayAs() a outputSub(). outputSayAs() jedná se o metodu reprezentující element . K dispozici jsou ná- sledující možnosti:

• vxml:digits jednotlivé ˇcíslicejsou postupnˇezasílány na výstup.

• vxml:phone na výstup jsou posílány jednotlivé ˇcíslicetelefonního ˇcísla.

• vxml:date - podporovaný formát yyyymmdd datum je pˇrevádˇenona text s použitím lokálních zón Javy.

• vxml:currency pˇreˇctese jako ˇcísloa doplní se mˇenaz lokálních zón Javy

• vxml:number podpora stejného rozsahu ˇcíseljako FreeTTS prostˇredníctvímJSAPI.

30 5.3. PRAKTICKÁ REALIZACE

• vxml:time - podporovaný formát hhmmx pro syntézu ˇcasuse používá rozhraní FreeTTS API. Bylo by možné používat také omezenou doménu v ˇcasovéoblasti. Samotný syntetizovaný ˇcasby znˇelvýraznˇe pˇrirozenˇeji,ale nevýhodou by bylo, že by existoval slyšitelný rozdíl mezi ˇcasema zbytkem syntetizovaného textu. outputSub() náhradní text (alias) z elementu se zašle na syntézu do FreeTTS. Alias je syntetizován bez jakéhokoli dodateˇcnéhozpracování. S p ˚uvodnímtextem se nijak dále nepracuje. voiceBegin(), voiceEnd() atributy „gender“, „age“, „variant“, „name“ elementu jsou podporovány ve FreeTTS API. Z hlediska integrace šlo vždy o alokaci nového hlasu, aby bylo možné starý rychle využívat. Pokud by byl požadavek využívat velké množ- ství hlas ˚u(ˇrádovˇestovky), musela by být ˇrešenaeventuální pamˇet’ová nároˇcnost.Atribut „name“ je možné nastavovat ze všech dostupných hlas ˚upro FreeTTS, vˇcetnˇeMBROLA hlas ˚u,které jsou souˇcástíkomponenty free_tts_output. emphasisBegin(), emphasisEnd() FreeTTS bohužel nepodporuje pˇridání, ubrání d ˚urazu - element . Ke zd ˚uraznˇenídochází formou zesílení (zeslabení) a malé pauzy pˇreda po pˇreˇctenémtextu. breakElem() pauza (element ) v textu není implementována pˇrílišelegantnˇe. Re-ˇ šení spoˇcíváv uspání hlavního syntetizaˇcníhovlákna na dobu urˇcenouelementem . pitchBegin(), pitchEnd() FreeTTS pˇrímopˇresJSAPI umožˇnujemˇenitvýšku hlasu. rateBegin(), rateEnd() možnost ovlivˇnovatrychlost promluvy je souˇcástíJSAPI. Ovliv- ˇnovánítéto vlastnosti proto probíhá pˇrestoto rozhraní. volumeBegin(), volumeEnd() zvyšování a snižování hlasistosti není pro FreeTTS pro- blém. Je ˇrešenovoláním patˇriˇcnýchmetod JSAPI. endOfSegment() pokud VoiceXML interpret oznámí konec segmentu, je vygenerováno jméno doˇcasnéhosouboru a tato skuteˇcnostje oznámena knihovnˇeOptimTalkFreeTTSCom- ponent, která zajistí zapsání syntetizovaného audia do doˇcasnéhosouboru a pˇredáˇrízení zpˇetdo komponenty OptimTalku. outputPhonemeStr(), pitchContourBegin(), pitchContourEnd(), rangeBegin(), range- End(), durationBegin(), durationEnd() následující metody nebylo možné implementovat. Pokud je nˇekteráz tˇechtometod volána, je návratovou hodnotou „unsupported operation“. Element není implementován ve FreeTTS, a tak nebylo možné jej implemento- vat ani v této integraci. Stejnˇetak atributy elementu „contour“, „range“ a „du- ration“, nejsou nijak v syntetizovaném textu zohledˇnovány. Není podporován také atribut „lang“ elementu . Je to pˇredevším tím, že v souˇcasnédobˇeje FreeTTS použitelný pouze pro angliˇctinu.

5.3.2 Knihovna OptimTalkFreeTTSComponent

Knihovna OptimTalkFreeTTSComponent poskytuje ekvivalenty metod pro output kompo- nentu plaformy OptimTalk. Ty jsou mapované na metody implementované v knihovnˇe.

31 5.3. PRAKTICKÁ REALIZACE

Knihovna naopak obsahuje abstraktní metody, jejichž ekvivalenty jsou implementované na stranˇekomponenty free_tts_ouput. Je tedy zˇrejmé,že obsahuje ekvivalenty všech metod urˇcenýchk ovlivnˇenísyntézy v komponentˇefree_tts_output. Pˇreloženáknihovna OptimTalkFreeTTSComponent je souˇcástífree_tts_output kompo- nenty stejnˇejako všechny dostupné hlasy pro FreeTTS. Dále komponenta obsahuje knihovny a hlaviˇckovésoubory pro podporu JNI. Pro provoz je zapotˇrebímít nainstalovanou JVM. Testování i vývoj probíhalo na JVM od Sun Microsystems ve verzi J2SE 5.0. Pˇriintegraci se vyskytly potíže, které bylo nutné ˇrešit.Jednou ze vzniklých potíží byla nutnost zajistit synchronizaci metod v jazyce C++ s metodami v jazyce Java. JNI to sice umožˇnuje,ale zajištˇenísynchronizace je jednou z obtížnˇejšíchˇcástípˇri ˇrešenípropojení po- mocí JNI. Také bylo zapotˇrebímít na pamˇeti,že jednotlivé elementy mohou být libovolnˇe vnoˇreny, což byl zajímavý implementaˇcníproblém. Souˇcástíknihovny je také logovací nástroj ve formˇetˇrídyLogger.java, která implemen- tuje rozhraní Log z balíku org.apache.commons.logging a je možno ji snadno nahradit za jiný logovací nástroj implementující stejné rozhraní. Logger.java sv ˚ujvýstup zapisuje zpˇet do logovacích soubor ˚uprostˇredíOptimTalku metodami zpˇrístupnˇenýmina komponentˇe v OptimTalku. V závislosti na nastavení je možné logovat také samostatnˇe,napˇr.s využitím knihovny log4j.

5.3.3 Nastavení free_tts_output komponenty Komponenta neumožˇnujerozsáhlé nastavení parametr ˚u,ale alespoˇnnˇekteréparametry jsou ovlivnitelné. Nastavování probíhá pomocí konfiguraˇcníhosouboru pro VoiceXML in- terpret ot_vxml_interpreter.cfg. Základní parametry: parametry, které jsou nutné z d ˚uvoduvytváˇreníJVM, nebo

• com.optimtalk.free_tts_output.oneSide urˇcuje,zda bude syntetizovaný výstup pˇredávánzpˇetdo platformy OptimTalk. Možné hodnoty no/yes

• com.optimtalk.free_tts_output.classPath udává cestu ke knihovnˇeOptimTalkFreeTTSComponent

• com.optimtalk.free_tts_output.libraryPath obsajuje umístˇeníke knihovnám JNI, pˇrípadnˇek dalším knihovnám (napˇr.externí logger)

Logování: tˇrída,která bude využívána pro logování. Cesta k této tˇrídˇemusí být uvedena v promˇennéclasspath pˇriinicializaci JVM.

• com.optimtalk.free_tts_output.logger - tˇrídapoužitá pro logování výchozí hodnota: optimtalkfreettscomponent.utils.Logger

32 5.3. PRAKTICKÁ REALIZACE

Kvalita výstupu: parametry, které ovlivˇnujíkvalitu výstupu

• audio.sample_rate - výstupní frekvence možné hodnoty: 8000, 16000

• audio.data_format - výstupní formát možné hodnoty: pcm16bit, pcm8bit

• com.optimtalk.free_tts_output.voice - výchozí hlas možné hodnoty: kevin, kevin16, mbrola_us1, mbrola_us2, mbrola_us3

33 Kapitola 6 Závˇer

Cílem práce bylo prozkoumat možnosti systému FreeTTS a zanalyzovat potˇrebypro využití FreeTTS v souvislosti s VoiceXML. Prakticky jsme integrovali FreeTTS s platformou Optim- Talk a ukázali tak možnost integrace s VoiceXML platformou. Realizaci integrace bylo možno vytvoˇritnˇekolikazp ˚usoby. Zvolili jsme dva implemen- taˇcnˇepodobné zp ˚usoby, z nichž jeden umožˇnujenapojení na webový prohlížeˇcformou Java Web Start aplikace. Java Web Start aplikace však není souˇcástírealizace. Díky druhé (obou- smˇerné)integraci bylo možno využít všech výhod platformy OptimTalk. Další možnost propojení pomocí socket ˚urealizována nebyla, ale její implementace by byla díky existenci FreeTTS serveru a ukázkového klienta v jazyce C možná a pomˇernˇesnadná. Nˇekteréznaˇckyjsou i po integraci ignorovány, protože FreeTTS by nebylo schopné ani pˇresJSAPI ani pˇresFreeTTS API jejich zohlednˇenído syntetizovaného výstupu. Do bu- doucna by bylo možné rozšíˇritFreeTTS pˇrímoo SSML parser, který by mapoval znaˇcky tohoto jazyka na FreeTTS API. Aby mohlo být toto ˇrešeníplnˇefunkˇcní,musela by být také doplnˇenapodpora o nˇekteréfunkce, které jsou v tuto chvíli zajišt’ovány platformou Optim- Talk.

34 Literatura

[1] Cmejla,ˇ R.: FORMANTOVÁ ANALÝZA A SYNTÉZA, 2005, . 3.2.4.1

[2] Holˇcík,M.: Implementace modulu syntézy ˇreˇcipro TTS systém BOSS, Masarykova Univerzita - Fakulta Informatiky, 2006. 2.2.1.2, 2.2.2

[3] Inc., S.: FreeTTS 1.2 - A speech synthesizer written entirely in the JavaTM program- ming language, Sun Microsystems, Inc., 2005, . 2, 3.4.1, 3.4.2.1, 3.4.2.3, 3.4.3

[4] Dutoit, T.: An introduction to text-to-speech synthesis, Dordrecht : Kluwer Academic Publishers, 1997, 0-7923-4498-7. 2, 2.2.1.1, 2.2.1.2

[5] Sheng, L.: The JavaTMNative Interface Programmer’s Guide and Specification, ADDISON-WESLEY, 1999. 5.1

[6] K ˚urka,M.: Syntéza a rozpoznávání ˇreˇci, 2005, . 3.1.2.2

[7] Wahbe, A.: MRCP: a Standard Interface between VoiceXML Platforms and Speech Resources, 2006, . 3.1.2.1

[8] Burnett et. al., D.: Speech Synthesis Markup Language (SSML) Version 1.0, W3C, 2004, . 3.1.1

[9] McGlashan et. al., S.: Voice Extensible Markup Language (VoiceXML) Version 2.0, W3C, 2004, . 4.1, 4.1.2

[10] Larson et. al., J.: Introduction and Overview of W3C Speech Interface Framework, W3C, 2000, . 4, 4.3.1, 4.3.2, 4.3.3

[11] Wikipedia contributors, .: Speech synthesis, Wikipedia, The Free Encyclope- dia., 2006, . 2, 2.1, 2.2.2

35 PˇrílohaA Výkonnost FreeTTS vs. Flite

Studie byla pˇrevzataz prezentace FreeTTS. Jedná se o studii z roku 2002, takže novˇejší výsledky by pravdˇepodobnˇevyznˇelylépe pro FreeTTS (ne nutnˇeabsolutnˇe,ale ve srov- nání s výsledky této studie). Oba systémy mohly být relativnˇesnadno porovnány, protože FreeTTS vychází ze systému Flite a základní algoritmy i architektura by mˇelybýt podobné. Ze všeho nejvíce tak máme srovnání, jak byla Java rychlá resp. pomalá v roce 2002 oproti jazyku C, resp. jak kvalitnˇese podaˇrilopˇrevéstFlite do jazyka Java.

Processor Flite (s) FreeTTS (s) FreeTTS:Flite (pomˇer) Tokenization 0.216 0.393 1.819 Normalization 0.260 0.801 3.081 Phrasing 0.537 0.371 0.691 Segmentation 2.592 1.349 0.520 Pause Identification 0.060 0.083 1.383 Intonation 7.704 10.401 1.350 Post Lexical Analysis 0.838 0.777 0.927 Duration 7.749 6.860 1.350 F0 Contour 10.350 11.119 1.074 Unit Selection 1.058 1.576 1.490 Wave Synthesis 11.206 47.399 4.230 Total 42.570 81.129 1.906

Tabulka A.1: Porovnání výkonu FreeTTS a Flite (2002)

36