Hlavní navigace

Jak rozmluvit počítač

Hynek Hanke 26. 11. 2003

V rámci projektu Free(b)Soft organizace Brailcom byly vyvinuty dva programy: Speech Dispatcher, démon implementující jednotné rozhraní k řečové syntéze, a speechd-el, klient pro Emacs, poskytující řečové funkce, a to nejen zrakově postiženým.

Proč je potřeba Speech Dispatcher?

Když jsme chtěli vyvíjet programy pro slepé a zrakově postižené, opakovaně jsme narazili na problém, jak do nich implementovat řečový výstup. Jednou z aplikací, které již řečový výstup poskytovaly, byl Emacspeak. Ten podporoval celou sadu různých řečových zařízení, nicméně podpora pro tato zařízení do něj byla příliš zadrátována, než aby ji bylo možno použít jinde. Pak tu byl také Speakup, avšak jeho podpora zařízení byla zadrátovaná zase do jádra a vázaná na tu konkrétní aplikaci. Řečovou syntézu ještě používá i několik dalších programů, ale většinou jsou vázány na jeden konkrétní syntetizér.

Také jsme narazili na problém, jak synchronizovat výstup zpráv, protože na obrazovce se často dělo více, než dokázal jednokanálový řečový výstup pojmout, což se muselo všude ošklivě ošetřovat posíláním příkazů stop na syntetizér. Přes veškerou snahu však uživatel stejně často potřebnou hlášku neslyšel, protože se místo ní začala říkat nějaká jiná, méně podstatná.

Proto jsme se rozhodli tuto funkcionalitu do aplikací již dále nedrátovat a raději nejprve poskytnout samostatnou vrstvu, která by se o syntézu starala.

Jak funguje Speech Dispatcher?

Speech Dispatcher je implementován jako démon, který poslouchá na TCP/IP socketu a vyřizuje požadavky jednoho či více klientů. Mezi takové požadavky může patřit přeříkání zprávy, změna parametrů hlasu, vyvolání zvukové ikony (obecné události, která může být mapována i na .wav soubor), požadavek na přeříkání starší zprávy a tak podobně. Speech Dispatcher poté požadavek zpracuje a ve vhodnou chvíli předá příslušnému výstupnímu modulu pro konkrétní syntetizér.

Speech Synthesis Independent Protocol (SSIP), jak jsme jej nazvali, přiřazuje všem typickým funkcím syntetizérů symbolická jména, a tak se klientská aplikace vůbec nemusí starat o to, s jakým syntetizérem a jakou konfigurací si ji uživatel spustí.

Komunikace přes SSIP může vypadat třeba takto:

SET SELF CLIENT_NAME joe:vi:default
208 OK CLIENT NAME SET

SET SELF RATE 20
203 OK RATE SET

SET SELF VOICE MALE2
209 OK VOICE SET

SET SELF PRIORITY MESSAGE
202 OK PRIORITY SET

SOUND_ICON new-mail
225 OK MESSAGE QUEUED

SPEAK
230 OK RECEIVING DATA
Hello, I'm a Speech Dispatcher communication example!
How are you?
.
225 OK MESSAGE QUEUED

SET SELF PRIORITY NOTIFICATION

SPEAK
230 OK RECEIVING DATA
This is a less interesting message.
.

Jak si možná pozorní čtenáři všimli, klient v ukázkovém spojení nejprve nastavuje prioritu zprávy a až poté zasílá její text. S využitím modelu priorit zpráv, jak jsme jej vytvořili, se klientský program téměř nemusí starat o interakci mezi současně vznikajícími zprávami pomocí zasílání nějakého stop. Postačí, pokud klient zprávám přiděluje jednu z pěti pevně definovaných priorit, a o jejich vzájemné „pozabíjení“ nebo zase „přebití“ se postará Speech Dispatcher tak, aby byla říkána v každém okamžiku pouze jedna zpráva, a to ta pokud možno nejdůležitější. Například text „This is a less interesting message.“ v uvedeném příkladu se řekne pouze tehdy, pokud mezitím již byla přeříkána předchozí zpráva vyšší priority.

Priority zpráv bychom mohli shrnout do tří základních skupin:

  • important: Řeknou se za jakýchkoliv okolností a mají přednost před všemi ostatními. Pokud je jich více, řeknou se postupně.
  • message, text: Řeknou se vždy, pokud nepřijde priorita important. Když jich přijde více, message se řeknou postupně, zatímco z text se přeříká pouze ta nejnovější.
  • progress, notification: Většinou jsou potlačeny a ke slovu se dostanou pouze tehdy, když není k přeříkávání nic podstatnějšího. V prioritě progress je navíc ale považována poslední přijatá hláška za důležitou v tom, že jí je přiřazena vyšší priorita (uživatel tak třeba neslyšel všechny detaily o tom, jak probíhá nějaký proces, ale určitě se něco dozví, až bude proces dokončen).

(toto je pouze schematický popis, podrobný popis vizdokumentace)

Výstupní moduly a klientské knihovny

Jako backend pro Speech Dispatcher slouží výstupní moduly, které se starají o komunikaci s konkrétními syntetizéry. Veškerá specifická komunikace s tím či oním syntetizérem je odsunuta až na samý konec. Mimo čistého designu a oproštění aplikací od potřeby podporovat různá zařízení jsme tím také dosáhli toho, že můžeme ve výstupních modulech emulovat určité funkce, které některé syntetizéry nepodporují (například stopování či pauzu). V součastnosti je podporován Festival, svobodný velmi kvalitní a rozšiřitelný Text-to-Speech systém podporující několik jazyků (včetně češtiny),Flite, lehká a rychlá verze Festivalu, která však zatím pracuje pouze s angličtinou, a Epos, jednoduchá česká a slovenská syntéza. Pokud Festival některý z jazyků nepodporuje, lze s ním použít také volně dostupné hlasy syntetizéru MBROLA, nicméně ten není svobodným software.

Jako frontend pro Speech Dispatcher vystupují klientské knihovny, které obalují zasílání SSIP příkazů do jednoduše použitelných funkcí daného programovacího jazyka. V součastnosti je k dispozici knihovna pro C/C++ a pro Emacs Lisp (součást speechd-el).

Programátor v C tak již konečně může pro svou aplikaci používat jednoduché funkce jako například:

int spd_open(char* client_name, char* connection_name, char* user_name);
int spd_sayf(int connection, SPDPriority priority, char* format, ...);
int spd_wchar(int connection, SPDPriority priority, wchar_t wcharacter);
int spd_set_punctuation(int connection, SPDPunctuation type);


Obdobné je to v Emacs Lispu.

Co to je speechd-el?

speechd-el je aplikace, která využívá Speech Dispatcher k tomu, aby poskytla řečový výstup uživatelům Emacsu. Je zaměřená především na nevidomé uživatele, pro které je nějaká forma řečového výstupu nutností, ale může být užitečná i vidícím lidem. speechd-el dovoluje uživateli pracovat s Emacsem, aniž by se díval na obrazovku.

Narozdíl od Emacspeaku, což je jiná aplikace pro řečový výstup Emacsu, poskytuje speechd-el automatické mluvení všech zpráv a akcí založené na modelu priorit a navíc používá strategii automatické identifikace akcí Emacsu bez nutnosti psát zvláštní kód pro každou emacsovou knihovnu a samovolně nemění standardní chování Emacsu způsobem, jaký si uživatel nežádal.

Tato malá, ale výkonná aplikace se snaží do Emacsu přidat možnost řečového výstupu a poskytnout uživateli co nejvíce možností k přizpůsobení konfigurace. Je to příležitost pro zkušenější uživatele, kteří ale nejsou programátory, aby si upravili mluvení v Emacsu podle svých potřeb, a tímto způsobem mohou pokročilejší uživatelé pomáhat jiným méně zkušeným. Díky rozšiřitelnosti Emacsu není nutná jeho modifikace, pouze se doinstalují příslušné elispové knihovny.

Jelikož speechd-el spoléhá v zajištění všech výstupních funkcí na Speech Dispatcher, lze jej v součastnosti používat pouze se softwarovou syntézou přes Festival a Flite. Na druhé straně softwarová syntéza je právě ta věc, se kterou se mnoho současných uživatelů Emacsu potýká a která jim v dostatečně jednoduché a funkční podobě chybí.

Shrnutí

Doufáme, že Speech Dispatcher vyplní mezeru v designu aplikací, které chtějí poskytnout uživateli řečovou syntézu, a především, že tvorbu a život takových aplikací usnadní tak, aby jich v budoucnu mohlo vznikat více a měly více uživatelů.

speechd-el by měl pomoci těm, kteří chtějí či potřebují využívat řečovou syntézu v praktickém životě, především na softwarových syntetizátorech, a preferují vlastní uzpůsobení si aplikace před rozsáhlými předdefinovanými volbami, kterým je obtížné se vyhnout nebo je změnit.

Jsme přesvědčeni, že speechd-el je praktickým důkazem toho, že cesta, kterou razíme, je schůdná.

Linky

Free(b)Soft
Brailcom

Autor článku je spoluautorem projektu Speech Dispatcher, dalšími vývojáři jsou Jan Buchal, Tomáš Cerha a Milan Zamazal.

Našli jste v článku chybu?

2. 12. 2003 12:25

H.P. (neregistrovaný)

Akorat je celkem sranda premluvit interaktivni rozhrani Festivalu (pri vyvoji Scheme se asi nepocitalo s tim, ze by neanglicke zeme mohly vubec pouzivat pocitac...), aby skouslo take ceske znaky...

28. 11. 2003 12:58

binary_runner (neregistrovaný)

Tleskam teto nanejvys prospesne iniciative, ktera by mohla, pokud ji poskytneme patricnou publicitu, vyplnit zejici propast v systemovych API na ruznych operacnich systemech.

Doufejme, ze az se uchyti GAP (http://developer.gnome.org/projects/gap/), tak spolecne s timhle a Festivalem to spokytne nejen nevidomym vyrazne vyssi komfort.



DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Podnikatel.cz: Vládu obejde, kvůli EET rovnou do sněmovny

Vládu obejde, kvůli EET rovnou do sněmovny

120na80.cz: Bojíte se encefalitidy?

Bojíte se encefalitidy?

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Lupa.cz: Babiš: E-shopů se EET možná nebude týkat

Babiš: E-shopů se EET možná nebude týkat

Lupa.cz: Avast po spojení s AVG propustí 700 lidí

Avast po spojení s AVG propustí 700 lidí

Lupa.cz: Není sleva jako sleva. Jak obchodům nenaletět?

Není sleva jako sleva. Jak obchodům nenaletět?

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?