Versuch einer kurzen Beschreibung der Sprachbibiliothek
=======================================================

Die Sprachausgabe ist in mehrere Schichten aufgeteilt: Die Anwendung
greift auf die Bibliothek "libspeech.a" zurck, in dieser befinden
sich (momentan) die Module zum einfachen Umgang mit der
Synthesizerbibliothek und zur Vorverarbeitung fr mehrere Sprachen
(Deutsch, Englisch). Die Vorverarbeitung wandelt zum Beispiel Ziffern
in Zahlen um und liest (einstellbar) Satzzeichen mit. Dieser Bereich
ist noch deutlich zu berarbeiten.

Ihre zweite Aufgabe besteht darin, die Synthesizerbibliotheken zu
laden und anzusteuern. Zu einem Zeitpunkt knnen mehrere davon geladen
sein, zwischen ihnen kann umgeschaltet werden. Die Einschrnkung
besteht momentan nur darin, da fr jede Sprache nur eine geladen sein
kann. Eine Bibliothek kann mehrere Sprachen untersttzen, sie wird
dann mehrfach geladen und jeweils anders parametrisiert. Sie ist
trotzdem nur einfach im Speicher, der Referenzzhler verhindern, da
sie beim ersten Schlieen wieder gelscht wird. Ein Modul fr mehrere
Sprachen ist nicht unblich: Hardwaresynthesizer untersttzen meistens
mehrere Sprachen, sie werden dann von nur einem Modul angesteuert.

Momentan sind alle Synthesizerbibliotheken im unfertigen Zustand. Die
Schnittstelle ist bei infovox.c vollstndig, einige Parameter lassen
sich allerdings noch nich einstellen. Bei dolphin.c und softspeech.c
fehlt die Umstellung auf das neue Interface.

Zur Benutzung: Ein primitives Beispielprogramm ist speech_test.c, es
ffnet zwei Sprachmodule und ldt zwei Synthesizermodule. Fr jede
Sprache gibt es eine eigene open-Funktion, z.B. german_open. bergeben
wird der Pfad der Synthesizerbibliothek und ein Parameterstring fr
den Synthesizer. Bei infovox ist dies die benutzte serielle
Schnittstelle und die Sprache (als Index). Alle weitere Funktionen
werden ber Zeiger in der beim ffnen erhaltenen Struktur
angesprochen, auch die direkten Durchgriffe zum Synthesizer. Mit
"speak_string" kann eine Zeichenkette auf den Weg gebracht werden. Die
Synthese beginnt aber erst beim Aufruf von "flush" (sie kann bei
langen Texten oder ganzen Stzen auch frher beginnen, sicher ist es
aber erst bei flush). Zwischen Wrtern lt sich mit "index_set" eine
Indexmarke setzen, sie wird durch einen Integer reprsentiert. Mit
"index_wait" lt sich auf den Index (oder einen frher gesetzten)
warten. Dabei mu ein Timeout angegeben werden (in
Millisekunden). Wird 0 zurckgegeben, gab es einen Timeout, bei 1
wurde der Index erreicht. Der Wertebereich fr andere Parameter
(Lautstrke etc.) ist auf 1000 normiert, d.h. 1000 ist "normal". 

Fragen zur Schnittstelle bitte an mich.

	Roger Butenuth
	butenuth@uni-paderborn.de
