Syntéza řeči patří mezi zajímavé počítačové problémy s rozmanitým praktickým uplatněním. Vytvořit dobrou syntézu řeči není jednoduché, a tak například v oblasti svobodného softwaru, jinak na zajímavé programy bohaté, příliš velký výběr kvalitních řečových syntetizérů mít nebudete. Nejsofistikovanějším z nich je zřejmě Festival, který si v tomto článku trochu představíme.
Syntéza řeči je jedním z velmi důležitých, byť zatím poměrně málo využívaných, prostředků nabízených počítači. Mezi její nejvýznamnější oblasti využití patří například zpřístupnění počítačů zrakově postiženým, odkázaným na zvukový výstup či jiné alternativní nástroje výstupu, nebo dialogové služby provozované přes telefonní systémy. Smysluplně ji lze využívat ale i na běžné uživatelské úrovni, například pro přečtení článku bez nutnosti namáhat zrak již tak dost unavený celodenním vysedáváním u obrazovky monitoru nebo pro čtení občasných zpráv z IRC bez nutnosti soustavného civění do povětšinou prázdného promptu.
Chcete-li syntetizovat text na svém počítači, máte na výběr mezi hardwarovými zařízeními a softwarovou syntézou. Většina uživatelů dá v dnešní době nepochybně přednost softwarové syntéze, která je provozovatelná bez nutnosti pořizování a zprovozňování specializovaného hardwarového zařízení a stačí pro ni jakákoliv provozuschopná zvuková karta.
Uživatelé svobodných systému jsou na tom ovšem v tomto směru nevalně. Nechtějí-li být odkázáni na tvůrce proprietárních řečových systémů, příliš mnoho výběru jim nezbývá. Z rozumně použitelných systémů syntézy řeči lze pro příklad uvést Festival, Flite a Epos. V tomto článku se budeme věnovat prvnímu z nich, který poskytuje nejširší možnosti.
Festival je kompletní systém syntézy řeči (text-to-speech system neboli TTS system) šířený pod licencí ve stylu BSD. Pod pojmem kompletní myslíme systém, který dokáže zvládnout celý proces syntézy řeči začínající u vstupního textu a končící výsledným zvukovým vzorkem.
Festival je původem z Edinburghské univerzity. Je určen jak pro akademický výzkum syntézy řeči, tak pro její praktické využití. Obsahuje prostředky pro analýzu textu, jeho interpretaci i syntézu výsledného zvuku. A nejen to, celý proces je modulární, takže lze aplikovat pouze některé jeho části nebo některé části nahradit jinými prostředky (například závěrečnou syntézu zvuku lze provést externím programem) nebo si definovat zcela vlastní sekvenci modulů.
Jádro Festivalu je napsáno v C++ a jsou v něm definovány základní systémové funkce, dále funkce, jejichž provádění je výpočetně náročné, a nakonec funkce, které zatím nebyly přepsány do rozšiřujícího jazyka Festivalu. Tím je tzv. SIOD (Scheme In One Defun), což je jednoduchý interpret jazyka podobného lispovému jazyku Scheme. Je to jazyk velmi jednoduchý, přitom však pro programování a úpravy rozšíření velmi dobře použitelný, a je v něm napsána významná část Festivalu. Díky rozšiřujícími interpretovanému jazyku můžete s Festivalem takřka neomezeně experimentovat, snadno a interaktivně cokoliv měnit, a to bez nutnosti modifikace zdrojových kódů Festivalu.
Festival je tedy systém rozšiřitelný a potřebujete-li pro něj napsat například podporu syntézy nového jazyka, vystačíte si pravděpodobně jen se SIOD a předpřipravenými parametrizovatelnými moduly. Celá filozofie systému je tedy podobná a stejně úspěšná jako například v případě populárního prostředí Emacs.
Nebudu vás nudit popisem instalace, Festival si nejspíše nainstalujete
z balíku své oblíbené linuxové distribuce a v případě nutnosti ruční
instalace naleznete pokyny v instalačním návodu zdrojového balíku, který
je ke stažení na stránkách Festivalu. Pouze upozorním, že Festival sám
o sobě žádný řečový výstup nevyprodukuje, musíte k němu ještě mít
nějaký hlas pro daný jazyk a k němu příslušné zvukové vzorky, případně
nějaký jiný software, který umí výsledný zvuk na základě předaného popisu
vyprodukovat. Kvalita zvukových vzorků hlasu je velmi významná pro výsledný
výstup, takže je lepší použít raději lepší vzorky, ze svobodných anglických
jsou to kallpc16k a kdlpc16k, dostupné opět přímo ve
vaší distribuci nebo na stránkách Festivalu. S Festivalem dříve spojované
náročnosti na hardware se bát nemusíte, nebudete-li jej chtít provozovat na
nějakém PDA nebo opravdu starém PC, poběží hladce a spotřeba času procesoru
bude nevýznamná.
Nejjednodušší je seznámit se s Festivalem interaktivně prostřednictvím
jeho příkazové řádky. Dostanete se do ní prostým spuštěním binárky
festival. První věcí, kterou si budete chtít vyzkoušet, bude
nejspíše to, jak Festival mluví. Pro přemluvení zadaného krátkého textu lze
využít funkce SayText:
(SayText "Hello, world!")
Syntézu textu ze souboru provedete voláním
(tts_file "/nějaký/soubor" nil)
Tento způsob syntézy textu lze doporučit pro jakékoliv delší texty nebo texty
obsahující osmibitové znaky, jak se zmíníme později v souvislosti
s češtinou. Na rozdíl od SayText nezačne
tts_file mluvit až po zpracování celého textu, nýbrž jej rozdělí
na menší části, které syntetizuje průběžně.
Potřebujete-li výsledný zvukový vzorek uložit do WAV souboru, můžete to udělat například takto:
(utt.save.wave (SynthText "Hello, world!") "neco.wav" nil)
Můžete se přepínat mezi několika hlasy nebo jazyky, jsou-li instalovány, například:
(voice_kal_diphone)
nebo
(voice_ked_diphone)
Častým požadavkem je změna rychlosti a výšky řeči. Nastavení rychlosti řeči se
provede nastavením parametru Duration_Stretch takto:
(Param.set 'Duration_Stretch VALUE)
kde VALUE je kladná číselná hodnota, přičemž hodnota 1.0 odpovídá
normálnímu tempu, nižší hodnoty poměrně zrychlují (zkracují výsledný vzorek) a
vyšší hodnoty poměrně zpomalují (prodlužují výsledný vzorek).
Nastavení výšky hlasu je trochu složitější, protože bývá častěji závislé na použitém intonačním modelu konkrétního hlasu. Pro základní anglické hlasy lze nastavení výšky hlasu provést voláním
(set! int_lr_params (cons '(target_f0_mean VALUE) (cdr int_lr_params)))
kde VALUE je průměrná výška hlasu v Hz, implicitně nastavená na 105.
Pro automatické provedení žádaných nastavení můžete využít globální startovací
soubor /etc/festival.scm a lokální startovací soubor konkrétního
uživatele ~/.festivalrc, kde můžete provádět stejná volání SIOD
jako na příkazové řádce nebo ve festivalových programech.
Potřebujete-li syntetizovat text bez vstupu do interaktivního promptu, můžete
tak učinit s pomocí volby příkazové řádky --tts:
festival --tts soubor
K Festivalu existuje i emacsové rozhraní umožňující jednoduché přemluvení emacsového bufferu nebo regionu. Více informací o něm naleznete v manuálu Festivalu.
Kromě řádkového rozhraní může Festival fungovat i v serverovém
režimu. Spustíte-li jej s volbou --server, bude čekat,
implicitně na TCP portu 1314, na přicházející spojení. Připojíte-li se
k němu na tento port, můžete mu zasílat požadavky na volání rozšiřujícího
jazyka a číst odpovědi. Festival vždy vrátí výslednou hodnotu daného volání
funkce. Kromě toho lze prostřednictvím volání funkce
send.wave.client na straně serveru poslat klientovi WAV vzorek,
což je užitečné v případě, kdy po serveru chcete provést syntézu textu do
zvukového vzorku bez jeho současného přehrání a výsledný zvuk potom přehrát ve
vlastní režii.
Serverový režim je velmi užitečný při použití Festivalu v aplikacích. Umožňuje stálé spojení na Festival bez nutnosti jeho opakovaného startování a s tím spojenými inicializačními prodlevami a zároveň umožňuje rozumnější způsob komunikace se systémem, než je přesměrování vstupů a výstupů příkazové řádky.
Pokud si festivalový server spustíte a pokusíte se k němu připojit,
pravděpodobně narazíte na častý problém, kterým je nepřítomnost jména lokálního
stroje v proměnné server_access_list. Tato proměnná omezuje
možnost připojení pouze na klienty z vyjmenovaných strojů. Smysl tohoto
opatření je jasný -- bezpečnost není mezi předními cíli Festivalu, takže je
záhodno omezit možnost připojení pouze na důvěryhodné stroje. Chcete-li se
připojit z lokálního stroje, musíte v závislosti na vaší síťové
konfiguraci mnohdy uvést kromě localhost i další jména tohoto
stroje, jinak jej Festival nemusí rozpoznat a spojení odmítne. Například:
(set! server_access_list '(localhost other-host-name))
Festival umožňuje v serverovém režimu povolit spouštění pouze předem
určených funkcí. K jejich nastavení slouží funkce
set_server_safe_functions. Tímto způsobem můžete server
v případě potřeby dále zabezpečit, například proti pokusům číst a
zapisovat libovolné soubory. Ani toto opatření však nemění nic na skutečnosti,
že Festival se na bezpečnost nijak nezaměřuje a je tedy lépe jej v případě
potřeby skutečného zabezpečení spouštět pod uživatelem nobody a
aplikovat další vnější opatření.
Chcete-li změnit implicitní port, na kterém festivalový server sedí, můžete tak
učinit nastavením proměnné server_port, například:
(set! server_port 1315)
Čeština není silnou stránkou Festivalu. Na rovinu řečeno, Festival sám o sobě podporuje pouze angličtinu a ostatní jazyky je nutno doinstalovat. Kompletní řešení pro češtinu přitom neexistuje vůbec. Kromě toho se setkáte i s drobnými nepříjemnostmi jako je nemožnost zadávání osmibitového vstupu na příkazové řádce Festivalu. Pokusíte-li se do ní zapsat jakékoliv osmibitové znaky, ať už přímo nebo nepřímo třeba přesměrováním standardního vstupu, nedopadnete dobře. Toto omezení se však naštěstí týká pouze příkazové řádky, pro textové ani SIOD soubory ani pro serverový režim neplatí, tam můžete používat osmibitové znaky dle libosti.
Čeština ve Festivalu naráží jak na absenci důkladné analýzy textu, tak na nedostupnost českých zvukových vzorků. Druhý problém lze obejít použitím programu Mbrola, který je však nesvobodným softwarem a uživatel je tedy plně závislý na jeho tvůrcích. Syntéza výsledného zvuku je ale jen závěrečnou částí celého procesu syntézy řeči, předchází mu právě analýza vstupního textu a získání kompletního popisu výsledného řečového výstupu. V tomto směru je zatím asi nejdále projekt festival-czech, kromě něho existuje ještě nástroj cz2_mbrola.scm.
Festival je možno hodnotit jako relativně stabilní a každopádně velmi mocný nástroj pro syntézu řeči. Mezi jeho klady bych zařadil zejména řadu modulů určených pro různé fáze procesu syntézy řeči, rozšiřitelný programovací jazyk, slušnou kvalitu anglické syntézy, poměrně podrobnou dokumentaci, svobodnou licenci a serverové rozhraní.
Jako nedostatky naopak vidím občasné pády (na které však narazíte pravděpodobně jen při různých experimentech, nikoliv při běžném provozu), dále místy chybějící části dokumentace, nemožnost zadávání osmibitového vstupu na příkazové řádce a chybějící přímou podporu nějakého multibytového kódování znaků.
Festival je velmi zajímavým svobodným systémem pro syntézu řeči. Bohužel svoboda všech těchto systémů a systémů souvisejících s hlasovým výstupem obecně je ohrožena. Důvody nejsou technické, jsou jimi obchodní zájmy prosazované právními nástroji prostřednictvím patentové legislativy. Nechcete-li, aby syntéza řeči (a zdaleka nejen ona) byla ovládána skupinou majitelů patentů a jejich právníky, věnujte prosím pozornost momentálně velmi aktuální problematice softwarových patentů v Evropské unii. Nepodaří-li se prosadit konečné schválení zákona vylučujícího softwarové patenty, bude ve vývoji softwaru ještě více potlačena otázka technické kvality ve prospěch mocenských zájmů, na kterých se může stát veškerý vývoj softwaru zcela závislým.
Zdroj: Linuxzone.cz
Autor: Milan Zamazal, 16. 12. 2003, 00:00
Sekce: Aplikace, Komentářů: 0
Průměrné hodnocení: 2,9