     [file version-2.texi not included]

Tento manuál se vzathuje ke Speech Dispatcher, verze VERSION.  Jedná se však pouze o uživatelskou část dokumentace a upozorňujeme, že tento překlad již není aktuální!  Poskytujeme jej s tím, že možná bude užitečný a to zejména v sekcích, které popisují obecné koncepty a myšlenky projektu, a to těm, kteří si nemohou přečíst anglickou dokumentaci.  Nikdo by nicméně neměl spoléhat na technické detaily zde uvedené, protože mnoho věcí je již dnes jinak.

Copyright © 2001, 2002, 2003 Brailcom, o.p.s.

     Dáváme povolení kopírovat, distribuovat a/nebo modifikovate tento dokument pod podmínkami GNU Free Documentation License, Verze 1.2 nebo jakékoliv novější verze vydané Free Software Foundation; bez jakýchkoliv Invariant Sections (neměnných sekcí), bez Front-Cover Texts (texty na přední straně obálky) a bez Back-Cover Texts (texty na zadní straně obálky).  Kopie této licence je přiložena v sekci nazvané ,,GNU Free Documentation License''.

Úvod
****

Motivace
========

Projekt Speech Dispatcher se snaží poskytnout na zařízení nezávislou vrstvu pro řečovou syntézu.  Měl by poskytovat jednoduché rozhraní pro klientské aplikace (aplikace, které chtějí mluvit), stejně jako pro ovladače konkrétních zařízení (různé řečové syntetizéry).

Vysoce kvalitní řečová syntéza je tu již dlouho a nyní je použitelná i pro běžné uživatele na jejich domácích počítačích.  Občas to přichází jako nutnost, občas je to jen dobrá vlastnost, aby některé programy poskytovaly řečový výstup.  Pro syntézu hlasu je tu široké pole využití od výukového software až po specializované systémy, jako jsou například nemocnice či laboratoře.  Pro zrakově postižené uživatele je to jedna ze dvou základních cest, jak získat výstup z počítače (tou druhou je Braillský řádek).

Existují různé řečové syntetizéry s různými schopnostmi.  Některé z nich jsou hardwarové, některé softwarové.  Některé jsou svobodným software a jsou volně dostupné na internetu.  Programátoři to mají opravdu těžké, když chtějí své programy rozmluvit, protože potřebují nejprve najít nějaký vhodný syntetizér (dlouhé hodiny experimentování a tak dále) a potom jej potřebují nějak zprovoznit s jejich programem.  Často musí psát pro tyto programy či hardwarová zařízení vlastní ovladače a dělají to znovu a znovu.  Snadno si lze představit, že se to celé zhroutí když nevinný uživatel spustí dva programy najednou. Kdyby přesto nastartovaly oba, budou křičet jeden přes druhého.

Tím je pro programátory velmi obtížné implementovat do svých programů podporu řečové syntézy (pro nevidomé uživatele, nebo prostě pro lepší uživatelské rozhraní) a je to jeden z důvodů, proč pořád ještě plně nevyužíváme toho, co řečová syntéza nabízí.

V ideálním světě by programátoři mohli pro řečovou syntézu používat podobné příkazy, jako to dělají pro textový výstup na obrazovku (printf, puts, ...).  V ideálním světě by existovalo nějaké speech_printf(), které by se staralo o to, aby byla zpráva přemluvena ve správný čas bez přerušování ostatních. Programátor by se tak nemusel starat o to, jak je přesně komunikace s řečovým syntetizérem implementována.  V ideálním světě by byl v každé GNU/Linuxové distribuci nějaký řečový syntetizér a nějaké rozhraní starající se o aplikace, které chtějí mluvit, dovolující uživatelům nastavit si parametry řeči a poskytující nějaké jednoduché rozhraní (jako speech_printf()) pomocí nějaké sdílené knihovny pro programátory.  Bude to jěště dlouhá cesta než se nám podaří dosáhnout tohoto stavu věcí, ale se Speech Dispatcherem děláme první krůčky...

Základní design
===============

V komunikaci mezi všemi různými aplikacemi a syntetizéry je obrovský nepořádek. Proto jsme chtěli, aby byl Speech Dispatcher vrstva oddělující aplikace a syntetizéry tak, aby se aplikace nemusely starat o syntetizéry a syntetizéry se nemusely starat o interakci s aplikacemi.

Rozhodli jsme se implementovat Speech Dispatcher jako server, který přijímá od aplikací příkazy přes protokol nazvaný SSIP, zpracovává je a, pokud je to nutné, zavolá příslušnou funkci daného výstupního modulu, který pak komunikuje s některým z různých syntetizátorů.

Každý klient (aplikace, která chce mluvit) otevře socketové spojení na Speech Dispatcher a volá funkce jako say(), stop(), pause() poskytované knihovnou implementující tento protokol.  Tato sdílená knihovna je stále na straně klienta a posílá Speech Dispatcheru SSIP příkazy přes otevřený socket.  Když příkazy dorazí do Dispatchera, ten je zpracuje, přečte text, který by měl být přeříkán a vloží jej do fronty podle jeho priority.  Potom se rozhodne kdy, s jakými parametry (nastavovanými klientským programem i uživatelem) a na jakém syntetizéru zprávu nechá přemluvit.  Tyto požadavky na mluvení jsou pak zpracovávány výstupními moduly (pluginy) pro různé hardwarové a softwarové syntetizéry a přeříkány nahlas.

Architektura Speech Dispatchera

Detailní popis programování klientů i serveru je k dispozici v anglickém manuálu.

Přehled základních rysů
=======================

Speech Dispatcher z pohledu uživatele:

  * snadná konfigurace různých mluvících aplikací, centrální správa

  * možnost volně rozhodovat, jaká aplikace bude mluvit s jakým syntetizérem

  * méně času věnovaného konfiguraci a ladění různých aplikací využívajících syntézu

  * historie zpráv pro zrakově postižené uživatele

Speech Dispatcher z pohledu programátora aplikace:

  * snadná cesta, jak aplikaci rozmluvit

  * jednotné rozhraní k různým syntetizérům

  * synchronizace zpráv na vyšší úrovni (kategorizace pomocí priorit)

  * možnost nemuset se starat o konfiguraci parametrů hlasu

Současný stav
=============

TODO:

Uživatelská dokumentace
***********************

Základní funkce
===============

V této sekci je detailnější popis základních funkcí Speech Dispatcheru.

Model priorit zpráv
-------------------

Speech Dispatcher nemůže syntetizovat všechny zprávy, které do něj přichází z prostého důvodu, že zprávy přicházejí obyčejně rychleji, než je syntetický hlas dokáže číst.  Na obrazovce monitoru je v porovnání s jednokanálovým řečovým výstupem relativně hodně místa.  Z toho důvodu používáme systém několika priorit zaměřených na různé typy zpráv.

Myšlenka je taková, že úlohou programátora klientské aplikace bude pouze určit pro každou zprávu určitou prioritu odpovídající typu dané zprávy.  Veškerá synchronizace a přepínání mezi těmito zprávami (které mohou pocházet od různých klientů) potom bude zajištěno aplikováním určitých pravidel ve Speech Dispatcheru.

Priority Categories
...................

Speech Dispatcher poskytuje systém pěti priorit.  Každá zpráva obsahuje buď explicitní informaci o prioritě, nebo jí je přiřazena výchozí priorita.

Prosím podívejte se také na přiložený diagram (dole).

Priorita important
..................

Tato zpráva bude přeříkána okamžitě, jak dorazí do serveru.  Není nikdy přerušena.  Když server obdrží současně několik různých zpráv této priority, ty jsou uloženy a přeříkány v pořadí, ve kterém přišly.

Když přijde nová zpráva priority important a zrovna se říká nějaká jiná zpráva, tato jiná zpráva je zahozena.  Další zprávy nižších priorit jsou buď pozdrženy (priorita message a text) než již nečekají na přeříkání žádné zprávy priority important, nebo jsou zahozeny (priority notification a progress).

Tyto zprávy by měly být tak krátké, jak je to jen možné, a měly by být používány pouze zřídka, protože blokují výstup všech ostatních zpráv.

Priorita message
................

Tato zpráva bude přeříkána, pokud již ve frontě nečeká žádná jiná zpráva priority important nebo message.  V opačném případě je tato zpráva pozdržena dokud nebudou všechny přeříkány.  To znamená, že priorita message nezastavuje sama sebe.  Když ve frontě čekají zprávy priorit notification nebo progress nebo text když přijde zpráva priority message, jsou zahozeny.

Priorita text
.............

Tato zpráva bude přeříkána, když ve frontě nečeká žádná zpráva priority important nebo message.  Pokud čeká, tato nová zpráva je pozdržena dokud nebudou předchozí zprávy přeříkány.

Priorita text přerqušuje sama sebe.  To znamená, že když přijde několik zpráv priority text, ty nejsou přeříkány v pořadí, ve kterém přišly, ale bude vyřčena pouze poslední z nich a ostatní jsou přerušeny a zahozeny.

Pokud jsou ve frontě zprávy priorit notification nebo progress nebo se právě přeříkávají, jsou zahozeny.

Priorita notification
.....................

Toto je zpráva nízké priority.  Pokud ve frontě čekají zprávy priorit important, messages, text nebo progress nebo jsou právě přeříkávány, tato nová zpráva priority notification je zrušena.

Tato priorita přerušuje sama sebe, takže když přijde najednou více zpráv s prioritou notification, přeříká se pouze poslední z nich.

Priority progress
.................

Toto je speciální priorita pro zprávy, které přicházejí krátce po sobě a nesou informaci o nějaké probíhající činnosti (např. Dokončeno 45%).

Kdyby nové zprávy přerušovaly ostatní (viz. priorita Notification), uživatel by nemusel slyšet ani jednu zprávu do konce.

Tato priorita se chová stejně jako notification s výjimkou dvou věcí.

  * Zprávy této priority nepřerušují jedna druhou.  Místo toho, pokud je zrovna přeříkávána jiná zpráva této priority, nově příchozí zpráva je zahozena.

  * Speech Dispatcher se snaží detekovat poslední zprávu v sérii příchozích zpráv a zaručit její přeříkání (pro uživatele je důležité slyšet zprávu Completed 100%, aby věděl, že proces již skončil).  Vždy, když ve frontě již nečeká žádná nová zpráva této priority a poslední příchozí zpráva ještě nebyla přeříkána, je její přeříkání vynuceno s prioritou message.

Diagram priorit
...............

Speech Dispatcher architecture

Příklady využití priorit
........................

Příklady použití priority important jsou:

  * chybové hlášky

  * velmi důležité zprávy

  * ...

Příklady použití priority message jsou:

  * běžné zprávy programu

  * varování

  * ...

Příklady použití priority text jsou:

  * text, na kterém uživatel pracuje

  * předčítaný text

  * položky menu

  * ...

Příklady použití priority notification jsou:

  * méně důležité informace

  * písmenka při vkládání

  * run-time nápověda

  * ...

Příklady použití priority progress jsou:

  * ``dokončeno 15%'', ``dokončeno 16%'', ``dokončeno 17%''

  * ``Načítám zvuky'', ``Načítám grafiku'', ``Načítám ai'', ...

Historie zpráv
--------------

Pro nevidomé a zrakově postižené je dobrou vlastností, pokud mají možnost nějakým jednoduchým klientem procházet historii vyslovených zpráv.

Některé méně důležité zprávy jsou přijmuty Speech Dispatcherem bez toho, aby byly přeříkány, protože jsou potlačeny důležitějšími informacemi.  To je nedělitelná vlastnost každého řečového rozhraní, protože není možné podat v řečovém výstupu tolik informací, kolik se jich vejde na obrazovku.  To je jeden z hlavních důvodů, proč je výhodné udržovat historii přijatých zpráv, aby se mohl uživatel podívat, zda mu neušlo něco důležitého.

Access Rights
.............

Aby bylo ochráněno soukromí uživatelů, Speech Dispatcher omezuje přístup k historii na určitou podmnožinu přijatých zpráv.  Platí následující pravidla:

  * Všechny zprávy přijaté od určitého klientského spojení jsou tomuto spojení přístupny i v historii.

  * Všechny zprávy odeslané určitým uživatelem jsou tomuto uživateli přístupny i v historii.

  * Všechny zprávy zaslané uživatelem speechd jsou přístupny všem uživatelům na daném systému, pod kterým běží Speech Dispatcher ve skupině speechd.

  * Žádné další zprávy nejsou přístupné.

Dvě zprávy jsou považovány za identické jestliže jejich spojení pocházejí z toho samého počítače, uživatelská jména jsou stejná a jejich identita může být ověřena, jak je popsáno v Autentifikace uživatelů.  Pokud nemůže být uživatelova identita ověřena, tento uživatel je považován za jiného než všichni připojení nebo dříve připojení uživatelé.

Více výstupních modulů
----------------------

Speech Dispatcher podporuje souběžné používání více výstupních modulů.  Pokud tyto moduly poskytují dobrou synchronizaci, lze je při čtení zpráv kombinovat. Pokud např. modul1 mluví anglicky a česky, zatímco modul2 mluví pouze německy, tak pokud přijde nějaká zpráva v němčině, použije se modul2, zatímco pro ostatní jazyky se použije modul1.  Na druhé straně jazyk není jediným kritériem pro takové rozhodnutí.  Přesná pravidla pro výběr výstupího modulu mohou být ovlivněna v konfiguračním souboru speechd.conf.

Autentifikace uživatelů
-----------------------

NOTE: Na implementaci této vlastnosti se pracuje, ale současná verze ji nepodporuje.

Speech Dispatcher neposkytuje žádný explicitní autentifikační mechanismus.  K ověření identity uživatlů používáme Identification Protocol definovaný v RFC 1413.

V konfiguraci je možné specifikovat mapování uživatelů. To umožňuje jednat s určitými uživateli jako s jedním a přidělit jim stejná práva (např. procházet jejich Historie zpráv).

Invoking
========

Potřebná privilegia
-------------------

Speech Dispatcher může být obecně spouštěn pod obyčejným uživatelem.  Snažili jsme se jej zabezpečit, jak jen to bylo možné, ale nejsme odborníky na počítačovou bezpečnost a kód může obsahovat nebezpečné chyby.  Nedoporučujeme jej spouštět jako root nebo pod jiným vysoce privilegovaným uživatelem.

Jediná omezení jsou tyto:

  * Speech Dispatcher vytváří PID file standardně ve /var/run/speech-dispatcher.pid, takže /var/run/ musí být danému uživateli přístupné k zápisu.  To může být změněno nastavením volby pidpath při volání skriptu ./configure při kompilaci.

  * Když je zapnuto logování, výchozí cesta, kam Speech Dispatcher zapisuje svůj log, je /var/log/speech-dispatcher.log.  To ale může být kdykoliv přenastaveno v hlavním konfiguračním souboru.

Volby příkazové řádky
---------------------

Speech Dispatcher může být spuštěn s těmito volbami:

speech-dispatcher [-{d|s}] [-l {1|2|3|4|5}] [-p=port] | [-v] | [-h]

-d or --run-daemon
     Spustí program jako démona (běží v pozadí, odpojí se od terminálu, atd.)  Toto je výchozí chování.

-s or --run-single
     Spustí program jako běžnou aplikaci běžící na popředí.

-l level or --log-level=level
     Vybere požadovaný logovací úroveň. Logovací úroveň je číslo mezi 0 a 5 (0 znamená neloguj nic, 5 znamená zapisuj téměř vše včetně zpracovávaného textu.) Standardní je 3. See Úrovně logování.

     Logovací úroveň 5 by neměla být používána k jiným účelům, než pro hledání chyb a to pouze krátkodobě.  Logy, které produkuje mohou narůst do obrovské velikosti a obsahují text čtený uživateli nezávisle na různých přístupových právech, jak platí pro historii.  Spouštět server s touto úrovní logování tedy může snadno vést k narušení soukromí.

-p or --port
     Zadá port, na kterém by měl server čekat na klienty.  Výchozí je 6560.

-v or --version
     Vypíše informace o verzi Speech Dispatchera.  Také oznámí základní informace o copyrightu.

-h or --help
     Vypíše nápovědu o volbách příkazové řádky, upozornění o copyrightu a emailovou adresu pro zasílání oznámení o chybách.

konfigurace
===========

Speech Dispatcher může být konfigurován na několika různých úrovních.  Jedna z nich je nastavování globálních parametrů přes serverový konfigurační soubor. Je zde i podpora pro konfiguraci specifickou pro určité klienty.

Některé aplikace mají vlastní mechanismus nastavování voleb souvisejících s řečovou syntézou.  Pro detaily o těchto nastaveních se prosím podívejte do dokumentace daného programu.

Následující kapitoly se zabývají pouze konfigurací na straně serveru přes konfigurační soubor.

Syntaxe konfiguračního souboru
------------------------------

Pro načítání configurace založené na textových souborech používáme knihovnu DotConf, takže bude syntaxe nejspíš mnoha uživatelům povědomá.

Každá z řetězcových konstant, pokud není uvedeno jinak, by měla být zakódována v UTF-8.  Jména voleb nepoužívají jiné znaky než standardní ASCII sadu omezenou na znaky (a, b, ...), pomlčky (-) a podtržítka _.

Komentáře a dočasně neaktivní volby začínají znakem #.  Pokud chcete takovu volbu zapnout, stačí smazat znak komentáře a nastavit volbu na požadovanou hodnotu.

     # toto je komentar
     # InactiveOption "tato volba je zatim vypla komentarem"

Řetězce jsou uzavřeny v uvozovkách.

     LogFile  "/var/log/speech-dispatcher.log"

Čísla jsou zapsána bez uvozovek.

     Port 6560

Přepínače používají On (zapnuto) a Off (vypnuto).

     Debug Off

Configuration options
---------------------

Všechny dostupné volby jsou zdokumentovány přímo v konfiguračním souboru a jsou k nim uvedeny i příklady. Většina voleb je nastavena na výchozí hodnotu a zakomentována.  Pokud je chcete změnit, postačí modifikovat jejich hodnotu a smazat symbol komentáře #.

Output Modules Configuration
----------------------------

Každý uživatel by si měl zapnout ve své konfiguraci alespoň jeden výstupní modul, pokud chce, aby Speech Dispatcher produkoval nějaký zvukový výstup. Když není načten žádný výstupní modul, Speech Dispatcher sice nastartuje, bude komunikovat s klienty a logovat zprávy do historie, ale nebude produkovat žádný zvuk.

Každý výstupní modul je třeba do Speech Dispatchera natáhnout jednou řádkou ``AddModule'' v etc/speechd.conf.  Navíc, každý výstupní modul má přiřazen vlastní konfigurační soubor.

Natahování modulů ve speechd.conf
.................................

 Každý modul, který by se měl spustit při startu Speech Dispatchera, musí být natažen příkazem AddModule v konfiguraci. Všimněte si, že lze natáhnout jeden binární modul vícekrát s různými konfiguračními soubory a pod jinými jmény.  To je užitečné hlavně pro natahování generických výstupních modulů.  See Konfigurace generického výstupního modulu.

     AddModule "MODULE_NAME" "MODULE_BINARY" "MODULE_CONFIG"

MODULE_NAME je jméno daného výstupního modulu.

MODULE_BINARY je jméno binárního spustitelného souboru tohoto výstupního modulu.  To může být buď cesta absolutní nebo relativní k bin/speechd-modules/.

MODULE_CONFIG je soubor s konfigurací pro tento konkrétní výstupní modul. Cesta může být absolutní i relativní k etc/speech-dispatcher/modules/. Tento parametr je volitelný (není třeba jej uvádět).

Konfigurační soubory výstupních modulů
......................................

Každý výstupní modul je odlišný a proto má odlišné volby v konfiguraci.  Prosím prostudujte si komentáře v daném konfiguračním souboru.  Zde je popsáno pouze několik voleb, které jsou pro některé výstupní moduly společné.

AddVoice "LANGUAGE" "SYMBOLICNAME" "NAME"

     Každý výstupní modul poskytuje nějaké hlasy a někdy dokonce podporuje různé jazyky.  Z toho důvodu byl zaveden společný mechanismus, kterým můžou být tyto hlasy definovány v konfiguraci.  Žádný modul ovšem není povinen tuto volbu používat.  Některé syntetizátory, např. Festival, podporují symbolická jména SSIP přímo, takže konfigurace konkrétních hlasů se provádí v syntetizátoru samotném.

     Každému definovanému hlasu odpovídá přesně jedna řádka AddVoice.

     LANGUAGE je ISO kód jazyka tohoto hlasu (en, cs, de, ...)

     SYMBOLICNAME je symbolické jméno, pod kterým chcete, aby byl tento hlas dostupný.  See Standardní hlasy, pro seznam symbolických jmen, která můžete použít.

     NAME je jméno specifické pro daný výstupní modul.  Prosím podívejte se na komentáře v příslušném konfiguračním souboru v sekci AddModule pro detailnější informace.

     Např. definice, kterou v součastnosti používáme pro Epos (generic) vypadá takto:

                  AddVoice        "cs"  "male1"   "kadlec"
                  AddVoice        "sk"  "male1"   "bob"

ModuleDelimiters "DELIMITERS", ModuleMaxChunkLength LENGTH

     Často se výstupní modul nesnaží vysyntetizovat celý příchozí text najednou, ale místo toho jej nejprve rozřeže na menší kousky (věty, části vět) a ty potom postupně odesílá na syntézu.  Tento přístup, využívaný některými výstupními moduly, je mnohem rychlejší, ale na druhé straně zase limituje schopnost syntetizéru poskytnout dobrou intonaci.

     Z toho důvodu máte obyčejně možnost zkonfigurovat si na jakých znacích (DELIMITERS) by se měl text rozdělit na menší části (pokud jsou následovány nějakým whitespace znakem).  Druhá volba (LENGTH) udává, po kolika znacích by se měl text násilně rozdělit, pokud nebyl nalezen žádný delimiter.

     Pokud tato dvě pravidla zpřísníte, dostanete lepší rychlost, ale vzdáte se určité části kvality intonace.  Takže například pro pomalejší počítače doporučujeme do DELIMITERS vložit i čárku (,), aby byl text rozdělen i na částech věty, zatímco na rychlejších počítačích je lepší tam čárku nedávat, takže do syntetizéru vždy dorazí celá souvětí.

     To samé platí o MaxChunkLength. Pro rychlejší počítače je lepší nastavit větší hodnotu.

     Například výchozí hodnoty ve výstupním modulu pro Festival jsou:

              FestivalMaxChunkLength  300
              FestivalDelimiters  ".?!;,:"

     Výstupní modul se může také rozhodnout dělit věty na delimiters pouze pokud ty jsou následovány mezerou.  Takže například ``file123.tmp'' by rozděleno nebylo, ale věta ``The horse raced around the fence, that was lately painted green, fell.''  by rozdělena byla (to je mimochodem velmi zajímavá věta).

Konfigurace generického výstupního modulu
.........................................

Generický výstupní modul uživatelům dovoluje jednoduše si napsat vlastní jednoduchý výstupní modul pro syntetizéry, které mají rozhraní ve formě jednoduchého řádkového klienta, pouze modifikací konfiguračního souboru.  Tímto způsobem nemusí psát žádný specifický kód v C a uživatelé si mohou přidávat podporu pro výstupní zařízení i když neumí programovat.  See AddModule.

Klíčová část každého generického výstupního modulu je definice řetězce, který se má spouštět.

 -- Konfigurace generického modulu: GenericExecuteSynth "EXECUTION_STRING"

     execution_string je příkaz, který by měl být zavolán v shellu, když je potřeba něco říct.  Ve skutečnosti to může být více jak jeden příkaz, dohromady zřetězené operátorem &&.  Když bude výstupní modul chtít přeříkávání zprávy zastavit, zašle těmto procesům signál KILL, takže je důležité, aby použité příkazy po obdržení KILL okamžitě přestaly mluvit. (Na většině GNU/Linuxových systémů má tuto vlastnost utilita play)

     V execution_string můžete využít těchto proměnných, které budou nahrazeny pořadovanými hodnotami, než bude příkaz vykonán.

       * $DATA Text, který by měl být přeříkán.  Znaky řetězce, které by nějak interferovali se zpracováním v bashi budou automaticky nahrazeny odpovídajícími escape sekvencemi.  Asi bude ale nutné uvést kolem této proměnné uvozovky (např. takto: \"$DATA\").

       * $LANG Identifikační řetězec jazyka (ten je definován pomocí GenericLanguage).

       * $VOICE Identifikační řetězec hlasu (ten je definován pomocí AddVoice).

       * $PITCH Požadovaná výška hlasu (desetinné číslo definované v GenericPitchAdd a v GenericPitchMultiply)

       * $RATE Požadovaná rychlost hlasu (desetinné číslo definované v GenericRateAdd a v GenericRateMultiply)

     Tady je příklad z etc/speech-dispatcher/modules/epos-generic.conf

          GenericExecuteSynth \
          "epos-say -o --language $LANG --voice $VOICE --init_f $PITCH --init_t $RATE \
          \"$DATA\" | sed -e s+unknown.*$++ >/tmp/epos-said.wav && play /tmp/epos-said.wav >/dev/null"

 -- Konfigurace generického modulu: AddVoice "LANGUAGE" "SYMBOLICNAME" "NAME"
     See AddVoice.

 -- Konfigurace generického modulu: GenericLanguage "iso-code" "string-subst"

     Definuje, jaký řetězec string-subst by měl být nahrazen za $LANG pro daný iso-code ISO kód jazyka.

     Opět příklad z Epos generic:

          GenericLanguage "en" "english"
          GenericLanguage "cs" "czech"
          GenericLanguage "sk" "slovak"

 -- Konfigurace generického modulu: GenericRateAdd NUM

 -- Konfigurace generického modulu: GenericRateMultiply NUM

 -- Konfigurace generického modulu: GenericPitchAdd NUM

 -- Konfigurace generického modulu: GenericPitchMultiply NUM
     Tyto parametry nastavují konverzi pro výpočet rychlosti a výšky. ($RATE a $PITCH).

     Výsledná rychlost (nebo výška) je dána následujícím vzorcem:

             (speechd_rate * GenericRateMultiply) + GenericRateAdd

     kde speechd_rate je hodnota mezi -100 (nejnižší) a +100 (nejvyšší).  Je třeba definovat nějakou rozumnou konverzi pro daný syntetizér.

     (Hodnoty v GenericNěcoMultiply jsou vynásobeny stem, protože stávající verze DotConfu nepodporuje desetinná čísla.  Můžete tedy psát 0.85 jako 85 atd.)

Úrovně logování
---------------

Ve Speech Dispatcheru je 6 různých úrovní logování.  0 znamená žádné logování, zatímco 5 znamená vypisovat téměř všechny dostupné informace.

  * Úroveň 0

       * Žádné informace

  * Úroveň 1

       * Informace o startu a vypínání.

  * Úroveň 2

       * Informace o chybách, které nastaly.

       * Alokace a uvolňování zdrojů při startu a při exitu.

  * Úroveň 3

       * Informace o přijímání/odepírání/zavírání klientských spojení.

       * Informace o neplatných SSIP příkazech od klientů.

  * Úroveň 4

       * Je vypisován každý přijatý příkaz

       * Informace o zpracovávání vstupu

       * Informace o ukládání zpráv do front

       * Informace o fungování historie, zvukových ikon, atd. facilities.

       * Informace o práci vlákna speak()

  * Úroveň 5 (Ta slouží pouze pro ladící účely a může vypisovat opravdu *mnoho* dat. Používejte opatrně.)

       * Všechna obdržená data jsou vypisována (zprávy od klientů)

       * Ladící informace.

Standardní hlasy
****************

MALE1

MALE2

MALE3

FEMALE1

FEMALE2

FEMALE3

CHILD_MALE

CHILD_FEMALE

Skutečná dostupnost těchto hlasů není zaručena, ale příkaz SET SELF VOICE musí akceptovat jakýkoliv z nich.  Pokud není daný hlas dostupný, je mapován na jiný hlas výstupním modulem.

GNU General Public License
**************************

Version 2, June 1991

     [file gpl.texi not included]

GNU Free Documentation License
******************************

Version 1.2, November 2002

     [file fdl.texi not included]