DEFINITION MODULE NarratorDevice;

(* Version 1.2                                                          *)
(* Diese Routinen unterstützen das Narrator-Device. Sie können deutsche *)
(* und englische Texte, sowie Lautschrift sprechen lassen.              *)
(* Die Files NarratorDevice.obj und NarratorDevice.sym, sowie die Files *)
(* Languages.obj und Languages.sym sind Copyright-frei. Sie dürfen      *)
(* auch in kommerziellen Produkten benutzt werden. Diese Files dürfen   *)
(* allerdings nur mit den Sourcecodes und dem Demo weitergegeben werden.*)
(* Jeder Art Änderungen am Sourcecode oder am Definitionsfile ohne      *)
(* meine ausdrückliche Genehmigung sind verboten. Eine Außnahme besteht *)
(* bei dem Languages-Modul, da dieses für die private Nutzung erweiter- *)
(* bar ist. Es dürfen allerdings in diesem Paket nur die unver-         *)
(* änderten Languages-Codes weitergegeben werden. Das Definitionsfile   *)
(* und der Sourcecode, sowie Teile daraus, sind Copyrightgeschützt!     *)
(*                      © 1993 by Andre Wiethoff                        *)
(*                                                                      *)
(* Bei Verbesserungsvorschlägen, Fehlern oder bei Fragen:               *)
(* Andre Wiethoff                                                       *)
(* Höhenweg 2                                                           *)
(* D-57392 Schmallenberg / Germany                                      *)


(* Mögliche Sprachtypen für den Befehl 'Say' :                          *)
(*   'raw'           : Der Text wird als Lautschrift interpretiert.     *)
(*                     Sehen Sie für Beispiele in das Basic-Handbuch.   *)
(*   'englisch'      : Der Text wird in englischer Sprache gesprochen.  *)
(*   'givenLanguage' : Der Text wird in einer anderen Sprache           *)
(*                     gesprochen, wovon die Umsetzungsvorschriften     *)
(*                     angegebenen werden müssen.                       *)

TYPE SayModes = (raw,english,givenLanguage);


(* 'TranslationPhonems' werden benutzt um andere Sprachen als Englisch  *)
(* sprechen zu können. Sehen sie im Modul Languages nach um ein         *)
(* Beispiel dafür zu sehen.                                             *)

TYPE TranslationPhonemsPtr = POINTER TO TranslationPhonems;
     TranslationPhonems    = RECORD
       number              : ARRAY[65..90] OF CARDINAL;
       offset              : ARRAY[65..90] OF CARDINAL;
       codes               : ARRAY[0..1023] OF ARRAY[0..7] OF CHAR;
     END;




(* 'OpenNarrator' muß einmal vor Benutzung der folgenden Befehle        *)
(* aufgerufen werden. Ohne vorherigen Aufruf führt das Programm keine   *)
(* der anderen Befehle aus! Wenn das Device erfolgreich geöffnet werden *)
(* konnte, gibt die Funktion ein TRUE zurück, ansonsten FALSE.          *)

PROCEDURE OpenNarrator() : BOOLEAN;



(* 'ResetNarrator' setzt das Narratordevice zurück auf die              *)
(* Voreinstellung des Systems. Dies schließt auch die Parameter des     *)
(* Befehls 'SetNarrator' mit ein.                                       *)

PROCEDURE ResetNarrator;



(* 'SetNarrator' stellt die Parameter der Stimme ein. Zuerst kommt      *)
(* Rate, dann Pitch, Mode, Sex, Volume und Frequenz. Entnehmen Sie die  *)
(* möglichen Werte aus dem Basic-Handbuch oder aus dem ModulaII-        *)
(* Handbuch, Kapitel Narrator. Wird bei Rate 0 angegeben, werden        *)
(* die vom System voreingestellten Werte gesetzt.                       *)

PROCEDURE SetNarrator(rat,pitc,mod,sexx,vol,frq : CARDINAL);



(* 'Finished' fragt ab, ob das Device schon fertig mit dem Sprechen     *)
(* ist. Wenn der nächste Satz ausgegeben werden kann, wird TRUE         *)
(* zurückgegeben, wenn allerdings noch gesprochen wird, FALSE.          *)

PROCEDURE Finished() : BOOLEAN;



(* 'WaitNarrator' wartet Multitaskinggerecht auf das Ende eines zu      *)
(* sprechenden Textes.                                                  *)

PROCEDURE WaitNarrator;



(* 'StopSpeaking' benutzt man um den Computer beim Sprechen zu unter-   *)
(* brechen oder um zu verhindern daß weitere Sätze gesprochen werden.   *)
(* Der Satz kann, wenn er mit diesem Befehl unterbrochen wurde,         *)
(* mittels 'StartSpeaking' weitergeführt werden.                        *)

PROCEDURE StopSpeaking;



(* 'StartSpeaking' läßt einen mittels 'StopSpeaking' unterbrochenden    *)
(* Text weiter ausgeben.                                                *)

PROCEDURE StartSpeaking;



(* 'FlushBuffers' stoppt den momentan sprechenden Text und löscht ihn   *)
(* aus dem Buffer. Der Text kann nicht zuende gesprochen werden.        *)

PROCEDURE FlushBuffers;



(* 'Say' erlaubt es beliebige Texte oder Laute aus dem Lautsprecher     *)
(* auszugeben. 'text' ist der auszugebenden Text und 'mode' den         *)
(* Ausgabemodus. 'raw' bedeutet Lautschrift, 'english' Englisch und     *)
(* bei 'givenLanguage' muß in der Variable 'language' eine Sprach-      *)
(* umsetzvorschrift erstellt werden. In dem Modul Languages existiert   *)
(* eine einfache Deutschumsetzvorschrift. Sie kann beliebig erweitert   *)
(* oder verbessert werden. Auch können dort weitere Aussprachen         *)
(* eingeführt werden. Die Routine springt sofort zum Hauptprogramm      *)
(* zurück und läßt den Text nebenher sprechen. Wenn der Computer gerade *)
(* noch einen anderen Text spricht, wird dieser abgebrochen und der     *)
(* neue begonnen.                                                       *)

PROCEDURE Say(text     : ARRAY OF CHAR;
	      mode     : SayModes;
	      language : TranslationPhonemsPtr);



(* 'GetMouth' holt sich die aktuelle Breite und Höhe des imaginären     *)
(* Mundes, die der Computer aus den ausgegeben Lauten berechnet. Die    *)
(* Werte liegen in dem Bereich von 0-16. Wenn der Computer im Moment    *)
(* keinen Text spricht, wird ein FALSE zurückgegeben, ansonsten TRUE.   *)

PROCEDURE GetMouth(VAR w,h : INTEGER) : BOOLEAN;



(* 'CloseNarrator' beendet alle noch laufenden Funktionen, schließt das *)
(* Device und gibt alle Resourcen wieder frei. Dieser Befehl wird auch  *)
(* am Ende des Programms automatisch aufgerufen.                        *)

PROCEDURE CloseNarrator;


END NarratorDevice.
