speech-dispatcher-cs: Základní design

 
 1.2 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.
 
 [image src="figures/architecture.png" alt="Architektura Speech Dispatchera" text=" applications      protocol                    output modules 
             interface      Speech Dispatcher core           synthesizers
                           .-----------------------.
 |Emacspeak|    :s l:  < > |  Speech Dispatcher    | :m  :  |Apollo|
                :h i:  <S> |    - configuration    | :o  :  |Festival|
 |Speakup|      :a b:  <S> | - synchronization     | :d A:  |Flite|
                :r r:  <I> |        - sound icons  | :u P:     .
 |User center|  :e a:  <P> |  - history            | :l I:     .
       .        :d r:  < > |   - punctuation, ...  | :e  :     .
       .        :  y:  < > | [||| priority queues] | :   :     .
       .        :   :  < > |                       | :   :     .
                           `-----------------------'"]
 
    Detailní popis programování klientů i serveru je k dispozici v
 anglickém manuálu.