1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897
|
\input texinfo @c -*-texinfo-*-
@c %**start of header
@documentlanguage cs
@setfilename speech-dispatcher-cs.info
@settitle Speech Dispatcher
@finalout
@c @setchapternewpage odd
@c %**end of header
@syncodeindex pg cp
@syncodeindex fn cp
@syncodeindex vr cp
@tex
\gdef\putwordAppendix{Pøílohy}
@end tex
@include version-2.texi
@dircategory Sound
@dircategory Development
@direntry
* Speech Dispatcher cs: (speechd-cs). Speech Dispatcher (in Czech).
@end direntry
@titlepage
@title Speech Dispatcher
@subtitle Zvládnutí Babylonu TTS'
@subtitle pro Speech Dispatcher @value{VERSION}
@author Tom@'a@v{s} Cerha <@email{cerha@@brailcom.org}>
@author Hynek Hanke <@email{hanke@@volny.cz}>
@author Milan Zamazal <@email{pdm@@brailcom.org}>
@page
@vskip 0pt plus 1filll
Tento manuál se vztahuje ke Speech Dispatcher, verze @value{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 @copyright{} 2001, 2002, 2003, 2006 Brailcom, o.p.s.
@quotation
Dáváme povolení kopírovat, distribuovat a/nebo modifikovat 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''.
@end quotation
@end titlepage
@shortcontents
@contents
@ifnottex
@node Top, Úvod, (dir), (dir)
@top Speech Dispatcher
Tento manuál se vztahuje ke Speech Dispatcher, verze @value{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 @copyright{} 2001, 2002, 2003 Brailcom, o.p.s.
@quotation
Dáváme povolení kopírovat, distribuovat a/nebo modifikovat 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''.
@end quotation
@end ifnottex
@ifhtml
@heading Menu
@end ifhtml
@menu
* Úvod:: Co to je Speech Dispatcher
* Uživatelská dokumentace:: Používání, konfigurace
* Standardní hlasy:: Standardní hlasy
* GNU General Public License:: Podmínky kopírování Speech Dispatcher
* GNU Free Documentation License:: Podmínky kopírování tohoto manuálu
* Index of Concepts::
@end menu
@node Úvod, Uživatelská dokumentace, Top, Top
@chapter Úvod
@menu
* Motivace:: Proč Speech Dispatcher?
* Základní design:: Jak to pracuje?
* Přehled základních rysů:: Co všechno umí?
* Současný stav:: Jaký je současný stav?
@end menu
@node Motivace, Základní design, Úvod, Úvod
@section Motivace
@cindex Hlavní myšlenky, Motivace
@cindex Filosofie
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 ještě dlouhá cesta než se nám
podaří dosáhnout tohoto stavu věcí, ale se Speech Dispatcherem děláme první
krůčky...
@node Základní design, Přehled základních rysů, Motivace, Úvod
@section Základní design
@cindex 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ý @code{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{/usr/share/doc/speech-dispatcher/architecture,155mm,,Architektura Speech Dispatchera}
Detailní popis programování klientů i serveru je k dispozici v anglickém
manuálu.
@node Přehled základních rysů, Současný stav, Základní design, Úvod
@section Přehled základních rysů
Speech Dispatcher z pohledu uživatele:
@itemize @bullet
@item snadná konfigurace různých mluvících aplikací, centrální správa
@item možnost volně rozhodovat, jaká aplikace bude mluvit s jakým syntetizérem
@item méně času věnovaného konfiguraci a ladění různých aplikací využívajících syntézu
@item historie zpráv pro zrakově postižené uživatele
@end itemize
Speech Dispatcher z pohledu programátora aplikace:
@itemize @bullet
@item snadná cesta, jak aplikaci rozmluvit
@item jednotné rozhraní k různým syntetizérům
@item synchronizace zpráv na vyšší úrovni (kategorizace pomocí priorit)
@item možnost nemuset se starat o konfiguraci parametrů hlasu
@end itemize
@node Současný stav, , Přehled základních rysů, Úvod
@section Současný stav
@cindex Syntetizéry
@cindex Ostatní programy
TODO:
@node Uživatelská dokumentace, GNU General Public License, Úvod, Top
@chapter Uživatelská dokumentace
@menu
* Základní funkce:: Detailnější popis všech základních funkcí
* Spouštění:: Volby příkazové řádky
* Konfigurace:: Jak zkonfigurovat Speech Dispatcher
@end menu
@node Základní funkce, Spouštění, Uživatelská dokumentace, Uživatelská dokumentace
@section Základní funkce
V této sekci je detailnější popis základních funkcí Speech Dispatcheru.
@menu
* Model priorit zpráv:: Zpracování současně příchozích zpráv
* Historie zpráv:: Ukládání zpráv pro pozdější nahlédnutí
* Více výstupních modulů:: Interakce s různými syntetizéry
* Autentizace uživatelů:: Autentizace pro přístup k historii
@end menu
@node Model priorit zpráv, Historie zpráv, Základní funkce, Základní funkce
@subsection Model priorit zpráv
@cindex priority
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.
@menu
* Typy priorit::
* Diagram priorit::
* Příklady využití priorit::
@end menu
@node Typy priorit, Diagram priorit, Model priorit zpráv, Model priorit zpráv
@subsubsection 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).
@subsubheading Priorita @code{important}
@cindex 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 @code{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 @code{message} a @code{text}) než již nečekají na přeříkání
žádné zprávy priority @code{important}, nebo jsou zahozeny (priority
@code{notification} a @code{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.
@subsubheading Priorita @code{message}
@cindex Priorita message
Tato zpráva bude přeříkána, pokud již ve frontě nečeká žádná jiná zpráva
priority @code{important} nebo @code{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
@code{message} nezastavuje sama sebe. Když ve frontě čekají zprávy priorit
@code{notification} nebo @code{progress} nebo @code{text} když přijde zpráva
priority @code{message}, jsou zahozeny.
@subsubheading Priorita @code{text}
@cindex Priorita text
Tato zpráva bude přeříkána, když ve frontě nečeká žádná zpráva priority
@code{important} nebo @code{message}. Pokud čeká, tato nová zpráva je
pozdržena dokud nebudou předchozí zprávy přeříkány.
Priorita text přeruš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 @code{notification} nebo @code{progress}
nebo se právě přeříkávají, jsou zahozeny.
@subsubheading Priorita @code{notification}
@cindex Priorita notification
Toto je zpráva nízké priority. Pokud ve frontě čekají zprávy priorit
@code{important}, @code{messages}, @code{text} nebo @code{progress} nebo jsou
právě přeříkávány, tato nová zpráva priority @code{notification} je zrušena.
Tato priorita přerušuje sama sebe, takže když přijde najednou více zpráv s
prioritou @code{notification}, přeříká se pouze poslední z nich.
@subsubheading Priority @code{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ř.@ @code{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 @code{notification} s výjimkou dvou věcí.
@itemize
@item
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.
@item
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 @code{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 @code{message}.
@end itemize
@node Diagram priorit, Příklady využití priorit, Typy priorit, Model priorit zpráv
@subsubsection Diagram priorit
@image{/usr/share/doc/speech-dispatcher/priorities,,,Speech Dispatcher architecture}
@c TODO: Generate a pdf version. (Why? -- Hynek Hanke)
@node Příklady využití priorit, , Diagram priorit, Model priorit zpráv
@subsubsection Příklady využití priorit
Příklady použití priority @code{important} jsou:
@itemize
@item chybové hlášky
@item velmi důležité zprávy
@item ...
@end itemize
Příklady použití priority @code{message} jsou:
@itemize
@item běžné zprávy programu
@item varování
@item ...
@end itemize
Příklady použití priority @code{text} jsou:
@itemize
@item text, na kterém uživatel pracuje
@item předčítaný text
@item položky menu
@item ...
@end itemize
Příklady použití priority @code{notification} jsou:
@itemize
@item méně důležité informace
@item písmenka při vkládání
@item run-time nápověda
@item ...
@end itemize
Příklady použití priority @code{progress} jsou:
@itemize
@item ``dokončeno 15%'', ``dokončeno 16%'', ``dokončeno 17%''
@item ``Načítám zvuky'', ``Načítám grafiku'', ``Načítám ai'', ...
@end itemize
@node Historie zpráv, Více výstupních modulů, Model priorit zpráv, Základní funkce
@subsection Historie zpráv
@cindex history
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řijaty 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.
@menu
* Přístupová práva:: Přístupová práva k historii zpráv
@end menu
@node Přístupová práva, , Historie zpráv, Historie zpráv
@subsubsection Access Rights
@cindex 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:
@itemize @bullet
@item
Všechny zprávy přijaté od určitého klientského spojení jsou tomuto spojení
přístupny i v historii.
@item
Všechny zprávy odeslané určitým uživatelem jsou tomuto uživateli přístupny i v
historii.
@item
@cindex @code{speechd} uživatel
@cindex @code{speechd} skupina
Všechny zprávy zaslané uživatelem @code{speechd} jsou přístupny všem uživatelům
na daném systému, pod kterým běží Speech Dispatcher ve skupině @code{speechd}.
@item
Žádné další zprávy nejsou přístupné.
@end itemize
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 @ref{Autentizace 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é.
@node Více výstupních modulů, Autentizace uživatelů, Historie zpráv, Základní funkce
@subsection Více výstupních modulů
@cindex výstupní modul
@cindex syntezátory
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ýstupního modulu mohou být
ovlivněna v konfiguračním souboru @file{speechd.conf}.
@node Autentizace uživatelů, , Více výstupních modulů, Základní funkce
@subsection Autentizace uživatelů
@cindex Identification Protocol
@cindex identd
@cindex RFC 1413
NOTE: Na implementaci této vlastnosti se pracuje, ale současná verze ji
nepodporuje.
Speech Dispatcher neposkytuje žádný explicitní autentizační mechanismus. K
ověření identity uživatelů používáme Identification Protocol definovaný v RFC
1413.
@cindex mapování uživatelů
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 @ref{Historie zpráv}).
@node Spouštění, Konfigurace, Základní funkce, Uživatelská dokumentace
@section Invoking
@subsection 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:
@itemize
@item
Speech Dispatcher vytváří PID file standardně ve
@file{/var/run/speech-dispatcher.pid}, takže @file{/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
@code{pidpath} při volání skriptu @code{./configure} při kompilaci.
@item
Když je zapnuto logování, výchozí cesta, kam Speech Dispatcher zapisuje svůj
log, je @file{/var/log/speech-dispatcher.log}. To ale může být kdykoliv
přenastaveno v hlavním konfiguračním souboru.
@end itemize
@subsection Volby příkazové řádky
Speech Dispatcher může být spuštěn s těmito volbami:
@code{speech-dispatcher [-@{d|s@}] [-l @{1|2|3|4|5@}] [-p=port] | [-v] | [-h]}
@table @code
@item -d or --run-daemon
Spustí program jako démona (běží v pozadí, odpojí se od terminálu, atd.) Toto
je výchozí chování.
@item -s or --run-single
Spustí program jako běžnou aplikaci běžící na popředí.
@item -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. @xref{Ú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í.
@item -p or --port
Zadá port, na kterém by měl server čekat na klienty. Výchozí je 6560.
@item -v or --version
Vypíše informace o verzi Speech Dispatchera. Také oznámí základní informace o
copyrightu.
@item -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.
@end table
@node Konfigurace, , Spouštění, Uživatelská dokumentace
@section konfigurace
@cindex 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.
@menu
* Syntaxe konfiguračního souboru::
* Volby v konfiguraci::
* Nastavení výstupních modulů::
* Úrovně logování::
@end menu
@node Syntaxe konfiguračního souboru, Volby v konfiguraci, Konfigurace, Konfigurace
@subsection Syntaxe konfiguračního souboru
Pro načítání konfigurace 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 (@code{a}, @code{b}, ...), pomlčky (@code{-}) a podtržítka @code{_}.
Komentáře a dočasně neaktivní volby začínají znakem @code{#}. Pokud chcete
takovu volbu zapnout, stačí smazat znak komentáře a nastavit volbu na
požadovanou hodnotu.
@example
# toto je komentar
# InactiveOption "tato volba je zatim vypnuta komentarem"
@end example
Řetězce jsou uzavřeny v uvozovkách.
@example
LogFile "/var/log/speech-dispatcher.log"
@end example
Čísla jsou zapsána bez uvozovek.
@example
Port 6560
@end example
Přepínače používají On (zapnuto) a Off (vypnuto).
@example
Debug Off
@end example
@node Volby v konfiguraci, Nastavení výstupních modulů, Syntaxe konfiguračního souboru, Konfigurace
@subsection 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 @code{#}.
@node Nastavení výstupních modulů, Úrovně logování, Volby v konfiguraci, Konfigurace
@subsection 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 @file{etc/speechd.conf}. Navíc, každý výstupní modul má
přiřazen vlastní konfigurační soubor.
@menu
* Natahování modulů ve speechd.conf::
* Konfigurační soubory výstupních modulů::
* Konfigurace generického výstupního modulu::
@end menu
@node Natahování modulů ve speechd.conf, Konfigurační soubory výstupních modulů, Nastavení výstupních modulů, Nastavení výstupních modulů
@subsubsection Natahování modulů ve speechd.conf
@anchor{AddModule} Každý modul, který by se měl spustit při startu Speech
Dispatchera, musí být natažen příkazem @code{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ů. @xref{Konfigurace generického
výstupního modulu}.
@example
AddModule "@var{module_name}" "@var{module_binary}" "@var{module_config}"
@end example
@var{module_name} je jméno daného výstupního modulu.
@var{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
@file{bin/speechd-modules/}.
@var{module_config} je soubor s konfigurací pro tento konkrétní výstupní modul.
Cesta může být absolutní i relativní k @file{etc/speech-dispatcher/modules/}.
Tento parametr je volitelný (není třeba jej uvádět).
@node Konfigurační soubory výstupních modulů, Konfigurace generického výstupního modulu, Natahování modulů ve speechd.conf, Nastavení výstupních modulů
@subsubsection 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é.
@table @code
@item AddVoice "@var{language}" "@var{symbolicname}" "@var{name}"
@anchor{AddVoice}
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é syntezátory, např. Festival, podporují symbolická jména
SSIP přímo, takže konfigurace konkrétních hlasů se provádí v syntezátoru
samotném.
Každému definovanému hlasu odpovídá přesně jedna řádka @code{AddVoice}.
@var{language} je ISO kód jazyka tohoto hlasu (en, cs, de, en-US, ...)
@var{symbolicname} je symbolické jméno, pod kterým chcete, aby byl tento hlas
dostupný. @xref{Standardní hlasy}, pro seznam symbolických jmen, která můžete
použít.
@var{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časnosti používáme pro Epos (generic) vypadá
takto:
@example
AddVoice "cs" "male1" "kadlec"
AddVoice "sk" "male1" "bob"
@end example
@item GenericDelimiters "@var{delimiters}", GenericMaxChunkLength @var{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
(@var{delimiters}) by se měl text rozdělit na menší části (pokud jsou
následovány nějakým whitespace znakem). Druhá volba (@var{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 @var{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 @code{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:
@example
FestivalMaxChunkLength 300
FestivalDelimiters ".?!;,:"
@end example
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).
@end table
@node Konfigurace generického výstupního modulu, , Konfigurační soubory výstupních modulů, Nastavení výstupních modulů
@subsubsection 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. @xref{AddModule}.
Klíčová část každého generického výstupního modulu je definice řetězce, který
se má spouštět.
@defvr {Konfigurace generického modulu} GenericExecuteSynth "@var{execution_string}"
@code{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 @code{&&}. 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 @code{play})
V @code{execution_string} můžete využít těchto proměnných, které budou
nahrazeny požadovanými hodnotami, než bude příkaz vykonán.
@itemize
@item @code{$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: @code{\"$DATA\"}).
@item @code{$LANGUAGE}
Identifikační řetězec jazyka (ten je definován pomocí GenericLanguage).
@item @code{$VOICE}
Identifikační řetězec hlasu (ten je definován pomocí AddVoice).
@item @code{$PITCH}
Požadovaná výška hlasu (desetinné číslo definované v GenericPitchAdd a v
GenericPitchMultiply)
@item @code{$RATE}
Požadovaná rychlost hlasu (desetinné číslo definované v GenericRateAdd a v
GenericRateMultiply)
@end itemize
Tady je příklad z @file{etc/speech-dispatcher/modules/epos-generic.conf}
@example
GenericExecuteSynth \
"epos-say -o --language $LANGUAGE --voice $VOICE --init_f $PITCH --init_t $RATE \
\"$DATA\" | sed -e s+unknown.*$++ >/tmp/epos-said.wav && play /tmp/epos-said.wav >/dev/null"
@end example
@end defvr
@defvr {Konfigurace generického modulu} AddVoice "@var{language}" "@var{symbolicname}" "@var{name}"
@xref{AddVoice}.
@end defvr
@defvr {Konfigurace generického modulu} GenericLanguage "iso-code" "string-subst"
Definuje, jaký řetězec @code{string-subst} by měl být nahrazen za @code{$LANGUAGE}
pro daný @code{iso-code} ISO kód jazyka.
Opět příklad z Epos generic:
@example
GenericLanguage "en-US" "english-US"
GenericLanguage "cs" "czech"
GenericLanguage "sk" "slovak"
@end example
@end defvr
@defvr {Konfigurace generického modulu} GenericRateAdd @var{num}
@end defvr
@defvr {Konfigurace generického modulu} GenericRateMultiply @var{num}
@end defvr
@defvr {Konfigurace generického modulu} GenericPitchAdd @var{num}
@end defvr
@defvr {Konfigurace generického modulu} GenericPitchMultiply @var{num}
Tyto parametry nastavují konverzi pro výpočet rychlosti a výšky.
(@code{$RATE} a @code{$PITCH}).
Výsledná rychlost (nebo výška) je dána následujícím vzorcem:
@example
(speechd_rate * GenericRateMultiply) + GenericRateAdd
@end example
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.)
@end defvr
@node Úrovně logování, , Nastavení výstupních modulů, Konfigurace
@subsection Ú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.
@itemize @bullet
@item Úroveň 0
@itemize @bullet
@item Žádné informace
@end itemize
@item Úroveň 1
@itemize @bullet
@item Informace o startu a vypínání.
@end itemize
@item Úroveň 2
@itemize @bullet
@item Informace o chybách, které nastaly.
@item Alokace a uvolňování zdrojů při startu a při exitu.
@end itemize
@item Úroveň 3
@itemize @bullet
@item Informace o přijímání/odepírání/zavírání klientských spojení.
@item Informace o neplatných SSIP příkazech od klientů.
@end itemize
@item Úroveň 4
@itemize @bullet
@item Je vypisován každý přijatý příkaz
@item Informace o zpracovávání vstupu
@item Informace o ukládání zpráv do front
@item Informace o fungování historie, zvukových ikon, atd.
facilities.
@item Informace o práci vlákna speak()
@end itemize
@item Úroveň 5
(Ta slouží pouze pro ladící účely a může vypisovat opravdu *mnoho*
dat. Používejte opatrně.)
@itemize @bullet
@item Všechna obdržená data jsou vypisována (zprávy od klientů)
@item Ladící informace.
@end itemize
@end itemize
@node Standardní hlasy, GNU General Public License, Úrovně logování, Top
@appendix Standardní hlasy
@table @code
@item MALE1
@item MALE2
@item MALE3
@item FEMALE1
@item FEMALE2
@item FEMALE3
@item CHILD_MALE
@item CHILD_FEMALE
@end table
Skutečná dostupnost těchto hlasů není zaručena, ale příkaz @code{SET SELF
VOICE} musí akceptovat jakýkoliv z nich. Pokud není daný hlas dostupný, je
mapován na jiný hlas výstupním modulem.
@node GNU General Public License, GNU Free Documentation License, Uživatelská dokumentace, Top
@appendix GNU General Public License
@center Version 2, June 1991
@cindex GPL, GNU General Public License
@include gpl.texi
@node GNU Free Documentation License, Index of Concepts, GNU General Public License, Top
@appendix GNU Free Documentation License
@center Version 1.2, November 2002
@cindex FDL, GNU Free Documentation License
@include fdl.texi
@node Index of Concepts, , GNU Free Documentation License, Top
@unnumbered Index of Concepts
@cindex tail recursion
@printindex cp
@bye
@c LocalWords: texinfo setfilename speechd settitle finalout syncodeindex pg
@c LocalWords: setchapternewpage cp fn vr texi dircategory direntry titlepage
@c LocalWords: Cerha Hynek Hanke vskip pt filll insertcopying ifnottex dir fd
@c LocalWords: API SSIP cindex printf ISA pindex Flite Odmluva FreeTTS TTS CR
@c LocalWords: src struct gchar gint const OutputModule intl FDSetElement len
@c LocalWords: fdset init flite deffn TFDSetElement var int enum EVoiceType
@c LocalWords: sayf ifinfo verbatiminclude ref UTF ccc ddd pxref LF cs conf
@c LocalWords: su AddModule DefaultModule xref identd printindex Dectalk GTK
@c speechd.texi ends here
@c LocalWords: emph soundcard precision archieved succes
|