
Systém syntézy řeči Festival
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 obecně
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.
Co je Festival
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.
Základy používání Festivalu
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.
Festival jako server
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)
Festival a čeština
Č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.
Praktické zkušenosti
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ů.
Poznámka závěrem
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.
Odkazy
|