Programm SPRICH =============== 0. Inhalt --------- 1. Hinweise zur Neuauflage des Programms SPRICH 2. Die Bedienung des Programms SPRICH 3. Die Dateien im ZIP-Archiv 4. Anhang mit Zusatzhinweisen und weiterführenden Links 1. Hinweise zur Neuauflage des Programms SPRICH ----------------------------------------------- Das Programm SPRICH heißt so, weil es Textdateien mit einer speziellen Lautschrift "vorlesen" oder die eingetippte Lautschrift direkt "sprechen" kann. Das akustische Ergebnis klingt sehr monoton und ziemlich "ungehobelt" oder - wie es einmal eine Besucherin meiner Homepage (und "Kraftwerk"-Fan) liebevoll nannte - so schön "trashig". Durch das Programm erfolgt keine phonetische Transkription wie bei einem modernen TTS-System (Text-to-Speech), d.h. es kann nicht einfach normaler Text eingegeben werden, sondern nur Lautschrift. Dies gelingt aber nach etwas Übung ganz gut und man hat viel mehr Kontrolle über das akustische Ergebnis als wenn dies vollkommen automatisch erfolgen würde. Außerdem macht es auch Spaß, damit zu experimentieren. Die "Ur-Version" von SPRICH ist ein DOS-Programm, das ich 1993 auf einem PC mit 80286er-CPU geschrieben habe, um mit phonembasierter Sprachsynthese zu experimentieren. Da der PC über keine Soundkarte verfügte, benutzte ich stattdessen ein selbstgebasteltes Audio-Interface, den "DOS- Digitizer" [2], zu dem es in der Ausgabe 10/1990 der Zeitschrift "DOS International", die ich damals abonniert hatte, eine Bauanleitung inklusive Platinen-Layout gab (ja, damals wurde noch richtig gebastelt, nicht nur vorgefertigte Komponenten zusammengesteckt!). Dieser Digitizer kommunizierte mit dem PC über die parallele Druckerschnittstelle - USB war ja noch nicht erfunden - und konnte Audiosignale mit einer Auflösung von 8 Bit sampeln - dies immerhin bei einer Sample-Frequenz von über 44 kHz, was ja durchaus noch heutigem Standard entspricht. Die Audio-Datei, in der die von mir selbst aufgenommenen Phoneme der deutschen Sprache (65 an der Zahl; siehe [8]) enthalten sind, hatte ein selbstkreiertes Format und war daher zu nichts kompatibel außer zu den damals von mir selbstgeschriebenen Programmen. Hierzu gehörte auch AUDIG, ein einfacher Audio-Editor zum manuellen Schneiden und Abspeichern einzelner Segmente (z.B. Phoneme) aus einem Audiosignal [1]. Das 1993 für DOS entwickelte Programm SPRICH [1] wurde 2017 noch einmal aktualisiert, so dass es nun auch unter Windows lauffähig ist und mit normalen Soundkarten funktioniert - wobei inzwischen der Begriff "Soundkarte" auch schon wieder fast ein Anachronismus ist - fast wie "Schallplatte" -, denn mittlerweile ist dafür keine Erweiterungsplatine ("Karte") mehr erforderlich, die man in den Rechner steckt, sondern dies ist bereits alles auf der Hauptplatine des Rechners oder sogar im SOC ("System-on-a-Chip" bzw. "Ein-Chip-System") integriert. Aus dem Rechnergehäuse gucken dann nur noch ein paar unscheinbare Buchsen für Mikrofon und Headset oder Lautsprecherboxen, und keiner weiß mehr, was eigentlich alles an Technik dahintersteckt... Anstelle der alten Phonem-Audiodatei PHONEME.PHO und der dazugehörigen Phonem-Definitionsdatei PHONEME.DEF verwendet das "neue" SPRICH nun eine standardkonforme WAV-Datei mit eingebetteter Cue-Liste. Diese enthält Angaben zu jedem einzelnen Phonem wie das Lautschrift-Zeichen (z.B. "a"), eine optionale Bemerkung oder Beschreibung, etwa zur Aussprache (z.B.: "Beispiel: Mnn"), und natürlich Position und Länge der Aufnahme des Phonems innerhalb der WAV-Datei. Das Programm selbst ist ganz "dumm" weiß nichts von irgendwelchen "Phonemen" - es liest einfach nur irgendwelche Zeichen von der Tastatur oder aus einer Textdatei ein und spielt die dazugehörigen Samples aus der WAV-Datei ab. Dies bedeutet, dass man dem Programm "ganz einfach" - d.h. ohne selbst programmieren zu müssen - eine andere Stimme, eine abweichende Lautschrift oder sogar eine neue Sprache beibringen kann. Hierzu muss man lediglich mit einem geeigneten Audio-Editor neue Phoneme aufnehmen und diese in der Cue-Liste entsprechend benennen. Die Aufnahmen der einzelnen Phoneme müssen dazu noch nicht einmal nahtlos nebeneinanderliegen, sondern können durchaus auch kreuz und quer irgendwo mitten in der Datei liegen - Hauptsache, sie sind sauber eingegrenzt und eindeutig benannt. Vorher sollte man sich natürlich genau überlegen, welche Phoneme man benötigt, und wie die dazugehörigen Lautschrift- Zeichen aussehen sollen. Anschließend speichert man das Ganze als WAV-Datei ab - vorzugsweise unter dem Dateinamen "phoneme.wav". Zur Bearbeitung von WAV-Dateien mit Cue-Liste eignen sich vielen Audio-Editoren (z.B. Adobe Audition; leider nicht Audacity). Am Programm selbst wurden folgende Änderungen vorgenommen: 1.) Die Sound-Ausgabe erfolgt über ein auswählbares Wiedergabegerät (Soundkarte) statt über den an die parallele Druckerschnittstelle anzuschließenden "DOS-Digitizer" [2]. 2.) Verwendung einer WAV-Datei mit eingebetteter Cue-Liste anstelle der alten Phonem-Audiodatei PHONEME.PHO und der dazugehörigen Phonem-Definitionsdatei PHONEME.DEF. 3.) Wegfall der folgenden Kommandos bzw. Funktionen im interaktiven Modus: - "random" zum Erzeugen von zufallsgesteuertem "Phonemsalat" mittels Pseudozufallszahlen. - "extern" zum Erzeugen von zufallsgesteuertem "Phonemsalat" durch Einlesen eines 8-Bit-Wertes von der parallelen Druckerschnittstelle (die heute so leider in keinem PC mehr vorhanden ist). - "proto" zum Offnen/Schließen einer Textdatei, in der während der Wiedergabe des zufallsgesteuerten "Phonemsalats" die Phoneme mitprotokolliert wurden. Diese Textdatei konnte dann später durch das Programm erneut "vorgelesen" werden. Für die zufallsgesteuerte Phonem-Wiedergabe zwecks experimenteller Untersuchungen auf mögliche "paranormale" Inhalte kann seit dem Jahr 2000 das Programm "EVPmaker" benutzt werden (siehe [3]). Eine entsprechend hierfür angepasste Version der Phonemdatei ist ebenfalls erhältlich (siehe [4]). 4.) Umbenennung folgender Kommandos im interaktiven Modus: - "lies" statt "lese" - "schreibe" statt "schr" - "liste" statt "list" 5.) Erweiterung um folgende neue Kommandos im interaktiven Modus: - "lade" - "wav" - "wavcue" - "wavplay" - "zeile" - "gerät" Eine Beschreibung der einzelnen Funktionen befindet sich weiter unten im Abschnitt "2. Die Bedienung des Programms SPRICH". 6.) Änderung einiger Phonembezeichnungen in der Datei PHONEME.DEF. Folgende Phoneme erhielten eine kürzere Schreibweise: - "dj" wurde zu "J" - "ng" wurde zu "N" - "sch" wurde zu "S" - "tsch" wurde zu "tS" - "psch" wurde zu "pS" - "ksch" wurde zu "kS" Auch für die Pausen gibt es neue Zeichen. Bisher entsprach die Phonembezeichnung der Pausendauer in Millisekunden - nun gibt es hierfür kurze Symbole: - "50" wurde zu "|" (senkrechter Strich bzw. "Pipe"-Symbol) - "100" wurde zu " " (1 Leerzeichen) - "200" wurde zu " " (2 Leerzeichen) - "500" wurde zu "." (Punkt) - "1000" wurde zu "#" (Doppelkreuz bzw. Raute oder "Hash"-Symbol) 7.) Wegfall der Notwendigkeit, im phonetischen Text Leerzeichen zwischen jedes Phonem einzufügen. Bisher dienten Leerzeichen innerhalb eines in Phonemschrift geschriebenen Textes dazu, die einzelnen Phoneme voneinander zu trennen. Dies war dem simplen Algorithmus in dem Programm "SPRICH" geschuldet. In der überarbeiteten Version wurde diese Einschränkung beseitigt. Leerzeichen dienen jetzt zum Einfügen von Pausen - jedes Leerzeichen entspricht dabei einer Pause von ca. 100 ms Dauer. Durch die Verkürzung einiger Phonemzeichen und den Wegfall von Leerzeichen als Trenner zwischen den Phonemen wird ein in Phonemschrift geschriebener Text kompakter, ist leichter zu lesen und auch schneller zu schreiben. Zum Vergleich hier ein Phonemtext nach dem alten Format: m i t 100 h i l f 3 100 d i: s 3 z 100 p r o g r a m 3 z 100 k 3 n 3 n 100 s i: 100 i0 r 3 m 100 r ä c n 0 100 d a z 100 sch p r ä c 3 n 100 b ai b r i ng 3 n 500 Und hier dasselbe im neuen Format: mit hilf3 di:s3z program3z k3n3n si: i0r3m räcn0 daz Spräc3n baibriN3n. 8.) Überarbeitung des Quelltextes: Im Zuge der Programmänderungen wurde auch der gesamte C-Quelltext einer "Generalüberholung" unterzogen. Unter DOS-Zeiten mit einer Bildschirmauflösung von 25 Zeilen mit je 80 Zeichen im "Textmodus" war es nicht unüblich, beim Programmieren wertvollen Platz zu sparen und deswegen möglichst kurze Variablennamen und möglichst wenige "überflüssige" Leerzeichen und Kommentare zu verwenden. Heute ist eine gute Lesbarkeit des Quelltextes wichtiger, daher werden aussagekräftige Variablennamen verwendet, an deren Bezeichnung man schon erkennen kann, welchen Datentyp sie haben und ob sie lokal oder global definiert sind. Der Quelltext besteht aus nur einer einzigen C-Datei (sprich.c) und kann mit gcc [6] kompiliert werden. Der dazu erforderliche Aufruf lautet: gcc -Wall -O3 -o sprich sprich.c riff.c winmm.lib Die Option -O3 ist die höchste Optimizer-Stufe und erzeugt den schnellsten Code. Die Option -Wall schaltet alle Compiler-Warnungen an. Unverändert geblieben bei SPRICH ist, dass es sich um ein Kommandozeilen-Programm für die Konsole ohne grafische Benutzeroberfläche handelt. Aus "nostalgischen Gründen" habe ich den im Hilfetext ausgegebenen Programmtitel auch unverändert bei "SPRICH V1.0 Copyright (c) 1993 Stefan Bion" belassen. :-) 2. Die Bedienung des Programms SPRICH ------------------------------------- SPRICH ist ein Kommandozeilen-Programm für die Konsole ohne grafische Benutzeroberfläche, d.h. es wird über die Windows-Eingabeaufforderung (cmd.exe) aufgerufen und benutzt. Zur Windows-Konsole (Eingabeaufforderung) vorab ein paar wichtige bzw. nützliche Hinweise: Falls nach dem Programmstart die Umlaute nicht korrekt angezeigt werden, liegt das daran, dass das Konsolen-Fenster einen DOS-Zeichensatz verwendet. Um das zu beheben, muss ein Windows-Zeichensatz eingestellt werden. Dies geht durch Klicken auf das Symbol ganz links in der Titelleiste des Konsolen-Fensters. In dem daraufhin geöffneten Menü wählt man "Eigenschaften", und in dem daraufhin wiederum geöffneten "Eigenschaften"-Fenster klickt man man den Reiter "Schriftart" und wählt dort eine andere Schriftart aus, z.B. "Lucida Console". Und wenn man schon einmal dabei ist, kann man auch gleich noch die Zwischenablage-Funktion der Konsole aktivieren: Reiter "Optionen", Häkchen bei "QuickEdit-Modus" setzen. Man kann dann mittels Rechtsklick in das Konsolen-Fenster Texte aus der Zwischenablage an der aktuellen Cursorposition einfügen, oder umgekehrt mit der Maus markierte Texte mittels Rechtsklick aus dem Konsolen-Fenster in die Zwischenablage einfügen. Dies ist ganz nützlich, wenn man Phonemtexte in einem separaten Text-Editor vorschreibt und dann Zeilenweise an SPRICH übergeben will, um mal schnell auszuprobieren, wie sich das anhört. Es gibt auch noch weitere sinnvolle oder nützliche Einstellmöglichkeiten, etwa die Fenstergröße und die Fensterpuffergröße im Reiter "Layout". Den Wert "Höhe" unter "Fensterpuffergröße" setze ich immer auf den Maximalwert von 9999 - so kann man bei Bedarf auch mal etwas weiter hochscrollen. Auch die Schrift- und Hintergrundfarben lassen sich nach eigenen Wünschen anpassen. Damit man diese mühevoll geamchten Einstellungen nich jedemal erneut vornehmen muss, kann man diese auch dauerhaft speichern, indem man nach Klick auf "OK" bei "Eigenschaften übernehmen" auswählt: "Eigenschaften gelten für alle Fenster mit gleichem Namen" oder "Verknüpfung, die dieses Fenster aufruft, ändern" (so zumindest lautet das bei Windows XP - bei anderen Windows-Versionen kann das anders heißen). Eine andere Möglickeit SPRICH kann im Batchmodus oder im interaktiven Modus betrieben werden. Im Batchmodus kann beim Aufruf der Pfad zu einer Textdatei mit Phonemschrift mit angegeben werden, die dann direkt "vorgelesen" wird. Anschließend beendet sich das Programm wieder. Das Vorlesen kann auch durch Drücken einer beliebigen Taste vorzeitig beendet werden. Beispiel für den Aufruf im Batch-Modus: D:\>sprich demo.txt Lese Textdatei "demo.txt" vor - zum Beenden beliebige Taste drücken ... 1: ******************************************************************************* 2: * Allerlei "Quatschtext" zum Ausprobieren. 3: * Transkribiert am 15.05.1993. 4: ******************************************************************************* 5: 6: halo: li:b3 k0mpju:t0|fr0ind3. 7: mit hilf3 di:s3z program3z 8: k3n3n si: i0r3m räcn0 daz 9: Spräc3n baibriN3n. (usw.) Während des Vorlesens werden die Zeilen aus der Datei mit vorangestellter Zeilennummer ausgegeben. So kann man während des Vorlesens "mitlesen". Im interaktiven Modus (ohne Angabe einer vorzulesenden Textdatei) erscheint nach dem Aufruf ein kurzer Hilfetext, in dem die Programmfunktionen kurz beschrieben werden: D:\>sprich SPRICH V1.0 Copyright (c) 1993 Stefan Bion (Build: Jan 31 2017, 22:59:33) Sie können beim Aufruf des Programmes SPRICH folgende Optionen angeben: -p[.wav] Phonemdatei (WAV-Datei mit Cue-List) [phoneme.wav] -o0 oder -o1 Audiogerät während Wiedergabe geöffnet halten [0] Diese Textdatei (Phonemschrift) wird sofort vorgelesen Im interaktiven Modus stehen folgende Kommandos zur Verfügung: lade [[.txt]] Lädt die Textdatei [] lies [[.txt]] Liest die Textdatei vor schreibe [[.txt]] Hängt den zuletzt eingegebenen Satz an die Textdatei an wav [[.wav]] Erzeugt aus der geladenen Textdatei eine WAV-Datei wavcue [[.wav]] Wie 'wav', jedoch zusätzlich mit Cue-Liste der Phoneme wavplay [[.wav]] Wie 'wav', jedoch komprimiert mit Play-Liste zur Wiedergabe zeile [von][-][bis] Setzt Von-/Bis-Zeile für 'lies' und 'wav...' [-] liste Listet alle Phoneme mit Länge und Beschreibung auf gerät [n] Auswahl des Audio-Wiedergabegerätes [WAVE_MAPPER] hilfe Zeigt diesen Hilfstext an ende Beendet das Programm SPRICH Ansonsten könnnen Sie direkt Phonemschrift eingeben, die das Programm sofort nachpricht. Eine leere Eingabe (nur RETURN) wiederholt die letzte Wiedergabe. Es sind 71 Phoneme definiert. Sprich>_ Normalerweise verwendet SPRICH als Phonemdatei die Datei "phoneme.wav" im selben Verzeichnis, in dem auch die Programmdatei "sprich.exe" liegt. Wenn SPRICH einen anderen Phonemsatz verwenden soll, dann kann dessen Dateiname oder -pfad beim Aufruf des Programms hinter der Option -p angegeben werden. Beispiel: D:\>sprich -p"Meine Phoneme" In diesem Fall würde statt der normalerweise verwendeten Phonemdatei "phoneme.wav" die Datei "Meine Phoneme.wav" geladen werden. Die Endung ".wav" braucht nicht unbedingt mit angegeben zu werden. Falls der Dateiname Leerzeichen enthält, muss der Name in Anführungszeichen gesetzt werden. Zwischen der Option -p und dem Dateinamen darf sich allerdings kein Leerzeichen befinden! Mit der Option -o kann man angeben, ob das Audiogerät während des "Vorlesens" einer Textdatei geöffnet bleiben soll (-o1), oder ob es für jede vorzulesende Zeile geöffnet und anschließend wieder geschlossen werden soll (-o0). Dies dient dazu, die leider unvermeidlichen kurzen Pausen zwischen den einzelnen Zeilen möglichst zu minimieren. Auf Windows-Versionen ab Vista ist es günstiger, das Gerät immer geöffnet zu halten, daher wird diese Einstellung dort auch automatisch vorgenommen. Auf Windows XP dagegen sind die Pausen kürzer, wenn das Gerät nicht ständig geöffnet ist. Daher ist diese Option dort standardmäßig ausgeschaltet. Durch Angabe der Option -o kann diess automatische Verhalten übersteuert werden. Unterhalb des Hilfetextes wird die Eingabeaufforderung "Sprich>" angezeigt. Dort können die angegebenen Kommandos eingetippt werden. Die Angaben zwischen den eckigen Klammern hinter den einzelnen Kommandos, wie z.B. [[.txt]], sind optionale Parameter, die ggf. auch weggelassen werden können. Bei den Dateinamen brauchen keine Dateiendungen angegeben zu werden; fehlt diese, dann wird die in eckigen Klammern angegebene Dateiendung verwendet Wird z.B. das Kommando "lies demo" angegeben, dann wird die Datei "demo.txt" geladen und vorgelesen. Nachfolgend eine ausführliche Beschreibung der einzelnen Kommandos: - "lade" - Lädt eine existierende Textdatei mit Phonemschrift, ohne sie vorzulesen. Durch die Funktion "lade" wird die Textdatei noch nicht geöffnet und auf Existenz überprüft, sondern das Programm merkt sich zunächst nur den Pfad bzw. den Namen der Datei zur späteren Verwendung. Nachdem eine Datei geladen wurde, kann das Vorlesen über das Kommando "lies" ohne Angabe eines Dateinamens gestartet werden. Es kann auch die Funktion "pcm" aufgerufen werden, um daraus eine Audiodatei im PCM-Format zu erzeugen. Der Name der aktuell geladenen Textdatei wird in den eckigen Klammern [] hinter dem Beschreibungstext zum Kommando "lade" angezeigt (nach erneutem Aufruf des Hilfetextes mittels des Kommandos "hilfe"). Ebenso wird der Name der aktuell geladenen Textdatei ausgegeben, wenn der Befehl "lade" ohne weitere Parameter eingegeben wird. - "lies" - Liest eine Textdatei mit Phonemschrift vor. Wenn als Parameter der Name einer Textdatei mit angegeben wird, dann wird diese Datei geladen und vorgelesen. Ohne Angabe eines Dateinamens wird die zuletzt mittels "lade", "lies" oder "schreibe" geladene Textdatei erneut vorgelesen. Ein Tastendruck bricht das Vorlesen vorzeitig ab. Die vorzulesenden Textdateien können außer der Phonemschrift auch Leerzeilen oder Kommentarzeilen enthalten - diese werden beim Vorlesen ignoriert. Als Kommentarzeilen gelten Zeilen, die mit einem Sternchen beginnen. Die ZIP-Datei, in der unter anderem das Programm SPRICH enthalten ist, enthält einige Beispiel-Textdateien mit Phonemschrift, die mit der Funktion "lies" vorgelesen werden können (siehe Kapitel "3. Die Dateien im ZIP-Archiv"). - "schreibe" - Schreibt die zuletzt manuell eingegebenen und gesprochenen Phoneme in die aktuell (mittels "lade", "lies" oder "schreibe") geladene Textdatei. Die Phoneme werden dazu als neue Textzeile an das Ende der Datei angehängt. Falls die Datei noch nicht existiert, wird sie neu angelegt. Diese Funktion war ursprünglich (d.h. in der DOS-Version des Programms) dazu gedacht, neue Textdateien mit Phonemschrift zu erstellen oder zu erweitern, indem man erst einen Satz in Phonemschrift eingab und sprechen ließ, ggf. korrigierte, und dann mittels "schreibe" zur Textdatei hinzufügte. Unter Windows, wo im Gegensatz zu DOS mit mehreren Programmen parallell gearbeitet werden kann, ist diese Vorgehensweise eigentlich nicht mehr sinnvoll, da man hier mittels der Zwischenablage Texte beliebig zwischen Texteditor und Konsole hin- und herkopieren kann. - "wav" - Erzeugt aus der (mittels "lade", "lies" oder "schreibe") geladenen Textdatei eine WAV-Datei mit dem vorgelesenen Text. Diese Datei kann dann mit anderen Audioprogrammen geöffnet werden, um z.B. in eine MP3-Datei umgewandelt zu werden. Wird kein Dateiname angegeben, dann wird der zuletzt verwendete Dateiname oder der Name der geladenen Textdatei (mit der Endung ".wav" statt ".txt") verwendet. - "wavcue" - Wie "wav", jedoch wird zusätzlich eine Cue-Liste in die WAV-Datei eingebettet. Diese enthält die Positionen, Längen, Bezeichnungen und Beschreibungen der ausgegebenen Phoneme, wie sie in der Phonemdatei "phoneme.wav" angegeben sind. Nach Öffnen der Datei in einem geeigneten Audio-Editor (z.B. Adobe Audition) können die einzelnen Phoneme in der Audiodatei genau lokalisiert oder näher untersucht werden. - "wavplay" - Wie "wav", jedoch werden die Phoneme des vorzulesenden Textes hier in einer Play-Liste gespeichert, deren Einträge auf die Cue-Liste verweisen. Bei den gespeicherten PCM-Audiodaten und der Cue-List handelt es sich um eine Kopie aus der Phonemdatei (z.B. "phoneme.wav"). Die Audiodaten werden somit "komprimiert" gespeichert, d.h. jedes Phonem existiert als Sample nur einmal, egal wie oft es im Text vorkommt. Die erzeugte WAV-Datei ist daher immer in etwa so groß wie die Phonemdatei, unabhängig davon, wie lang der wiederzugebende Text ist. Zum Abspielen der Play-Liste eignen sich z.B. Programme wie Adobe Audition, die WAV-Dateien mit Cue- und Play-Listen verarbeiten können. Die Play-Liste in Adobe Audition wird über das Menü "View > Show Play List" geöffnet und über den Button "Play" abgespielt. - "zeile" - Ermöglicht die Angabe eines Zeilenbereiches für die Vorlesefunktion ("lies") und für die Erzeugung einer WAV-Datei ("wav", "wavcue" und "wavplay"). Die Angabe erfolgt als Zeilennummern für die erste und die letzte zu berücksichtigende Zeile. Von- und Bis-Zeile müssen durch ein "Minus"-Zeichen (-) voneinander getrennt werden. Beispiele für die Syntax: - => erste bis letzte Zeile 3- => 3. bis letzte Zeile -3 => erste bis 3. Zeile 3-3 => 3. Zeile 3 => 3. Zeile Ohne Angaben gibt das Kommando "zeile" den aktuell eingestellten Zeilenbereich aus. Dieser ist zusätzlich auch im Hilfetext rechts neben der Beschreibung zum Kommando "zeile" in eckigen Klammern zu sehen. Durch das Laden einer neuen Textdatei mittels "lade", "lies" oder "schreibe" wird der Zeilenbereich wieder auf "erste bis letzte Zeile" zurückgesetzt. - "liste" - Gibt eine Liste aller geladenen Phoneme zusammen mit ihrer Dauer in Sekunden und einem kurzem Beschreibungstext aus. Bezeichnung und Beschreibung der Phoneme stammen aus der Phonem-Definitionsdatei (PHONEME.DEF), die Wiedergabedauer aus der dazugehörigen Audiodatei (PHONEME.AUD). - "gerät" - Auswahl des zu verwendenden Audiogerätes für die Wiedergabe. Ohne Angabe eines Parameters werden die im System vorhandenen Audio-Wiedergabegeräte aufgelistet, gefolgt von einer Eingabeaufforderung zur Eingabe der Nummer des neu auszuwählenden Gerätes. Beispiel: Sprich>gerät Vorhandene Geräte: > -1 - WAVE_MAPPER 0 - SB Audigy Audio [BF00] 1 - Realtek HD Audio output Auswahl: _ Nach Eingabe einer Nummer (z.B. 0) wird das entsprechende Gerät ausgewählt und dieses dann unterhalb der Eingabeaufforderung angezeigt. Wird nichts eingegeben (d.h. nur die RETURN-Taste gedrückt), dann ändert sich nichts. Das aktuell ausgewählte Gerät wird zusätzlich auch in eckigen Klammern [] hinter dem Beschreibungstext zum Kommando "gerät" angezeigt (nach Aufruf des Hilfetextes mittels "hilfe"). Voreingestellt ist "WAVE_MAPPER", was dem Standard-Gerät in Windows entspricht und im Normalfall funktionieren sollte, so dass dieses Kommmando nur im Bedarfsfall aufgerufen zu werden braucht. - "hilfe" - Zeigt den Hilfstext des Programms an (s.o.). - "ende" - Beendet das Programm SPRICH 3. Die Dateien im ZIP-Archiv ---------------------------- Folgende Dateien befinden sich in dem ZIP-Archiv "sprichwin.zip": Dokumentation: - README.txt Diese vorliegende Datei. Das Programm und weitere zur Ausführung benötigte Dateien: - sprich.exe Das ausführbare Programm SPRICH. - phoneme.wav Die Phonem-Audiodatei mit eingebetteter Cue-Liste für die Metadaten zu den enthaltenen Phonemen (siehe [8]). Beispiel-Textdateien mit Phonemschrift, die mit der Funktion "lies" vorgelesen werden können: - demo.txt Allerlei "Quatschtext" zum Ausprobieren. - hannya.txt Das buddhistische Sutra "Hannya Shingyo". - johanson.txt Ein kurzes Zitat aus einem Buch von Tom Johanson. - seasons.txt Der ebenfalls bekannte englische Song "Seasons in the Sun". - martin.txt Das bekannte Martinslied. - mops.txt Das Gedicht "Ottos Mops" des Sprachakrobaten von Ernst Jandl. - zeiten.txt Das Gedicht "Von Zeiten" des Sprachakrobaten von Ernst Jandl. Beispiel für die automatische Konvertierung einer PHO-Datei für den Sprachsynthesizer MBROLA in eine Phonemschrift-Textdatei für SPRICH (nähere Hinweise hierzu im Anhang unter [7]): - mb2sp.pl Perl-Script zur Konvertierung von MBROLA-PHO-Dateien in SPRICH-Phoneme. - wetter.pho Phonemdatei für den Sprachsynthesizer MBROLA. - wetter.txt Phonemschrift-Textdatei für SPRICH, mit mb2sp.pl konvertiert. Dateien zur Erstellung der ausführbaren Datei "sprich.exe": - Konsole.lnk Verknüpfung zur Windows-Eingabeaufforderung - startet "autoexec.bat". - autoexec.bat Batchdatei - setzt den Windows-Zeichensatz und die Umgebung für gcc. - make.bat Batchdatei zum Erstellen des Programms SPRICH. - sprich.c Sourcecode des Programms SPRICH. - riff.c Sourcecode mit Strukturen für die Cue-List und Funktionen zum Parsen von RIFF-Files. - riff.h Headerdatei zu "riff.c". - WINMM.LIB Bibliothek mit Windows-Multimedia-Funktionen für die Aufnahme und Wiedergabe von Audio über die Soundkarte. 4. Anhang --------- [1] DOS-Programm SPRICH von 1993: https://www.stefanbion.de/dosprogs/ [2] DOS-Digitizer: https://www.stefanbion.de/dosprogs/digitizer.htm [3] EVPmaker: http://www.tonbandstimmen.de/evpmaker/ [4] Phonemdatei als WAV-Datei für EVPmaker und andere Audioprogramme: http://www.tonbandstimmen.de/files/phoneme.wav Die WAV-Datei enthält dieselben PCM-Samples wie die originale Audiodatei PHONEME.AUD, jedoch wurde die Samplerate auf den üblicheren Wert von 22050 Hz gesetzt. Die Positionen der Phoneme innerhalb der PCM-Audiodaten sowie die in der Datei PHONEME.DEF enthaltenen Namen und Beschreibungen der Phoneme wurden als Cue-Marker direkt in die WAV-Datei integriert und können mit üblichen Audio-Editoren oder mit meinem Programm "CueListTool" [5] bearbeitet werden. [5] CueListTool: http://www.tonbandstimmen.de/cuelisttool/ [6] gcc (als Bestandteil von "MinGW - Minimalist GNU for Windows"): http://www.mingw.org/ Nach dem Start des nur 85 KB kleinen Installers werden weitere Pakete aus dem Internet nachgeladen. Für die Entwicklung in C genügt es, das Paket "mingw32-base" zu installieren. Anschließend muss das Unterverzeichnis "bin" (z.B. "C:\Programme\MinGW\bin") in die PATH- Variable aufgenommen werden. Unter 64-Bit-Windows hatte ich das Problem, dass bei Aufruf von "gcc" eine Fehlermeldung kam. Dies ließ sich durch Aufruf von "mingw32-gcc.exe" statt "gcc.exe" beheben. Ein weitere gcc-Distribution für Windows ist "MinGW-w64 - for 32 and 64 bit Windows": https://sourceforge.net/projects/mingw-w64/ Es erzeugt mit denselben gcc-Optionen kleinere Binaries gegenüber MinGW, z.B. 75 KB statt 85 KB für "sprich.exe". [7] MBROLA (https://en.wikipedia.org/wiki/MBROLA) ist ein Sprachsynthesizer, der - ähnlich wie SPRICH - aus Phonemen hörbare Sprache erzeugt - allerdings in einer wesentlich besseren Qualität als SPRICH, da hierbei statt Phonemem Diphone verwendet werden und zudem auch die Tonhöhe berücksichtigt wird; somit klingt die mit MBROLA erzeugte Sprache schon sehr natürlich. MBROLA verwendet ein spezielles Dateiformat mit der Endung ".pho", in der die wiederzugebenden Phoneme untereinander geschieben werden, d.h. jedes Phonem steht in einer eigenen Zeile der PHO-Datei. Rechts neben jedem Phonem sind dort noch zusätzliche Parameter zur Tonhöhe und Dauer angegeben. Mit Hilfe des Perl-Scripts "mb2sp.pl", das sich in dem ZIP-Archiv "sprichwin.zip" befindet, können aus solchen PHO-Dateien für MBROLA Phonemschrift-Textdateien für SPRICH erzeugt werden. Die Informationen zur Tonhöhe und zur Dauer der Phoneme gehen dabei natürlich verloren, da die Frequenz und die Dauer der Phoneme nicht variabel sind, sondern in der Phonemdatei festgelegt sind. Lediglich die Pausendauern werden aus der PHO-Datei übernommen. Um das Perl-Script verwenden zu können, muss natürlich ein Perl-Interpreter installiert sein. Der Aufruf erfolgt dann von der Windows-Eingabeaufforderung aus folgendermaßen: perl mb2sp.pl < PHO-Datei > Textdatei Ein konkretes Beispiel zur Konvertierung der MBROLA-Datei "wetter.pho" in die Phonemschrift- Textdateien "wetter.txt" für SPRICH: perl mb2sp.pl < wetter.pho > wetter.txt Die erzeugte Datei "wetter.txt" kann anschließend mit dem "lies"-Kommando von SPRICH wiedergegeben werden. [8] Die in der Phonemdatei "phoneme.wav" enthaltenen Phoneme der deutschen Sprache mit ihren Lautschriftzeichen und Aussprachebeispielen: Nr. | Dauer [s] | Phonem | Beschreibung ----+-----------+----------+---------------------------------------------------- 1 | 0.102 | a | Beispiel: Mnn 2 | 0.205 | a: | Beispiel: Vter, km, Schwn 3 | 0.100 | e | Beispiel: dikt 4 | 0.199 | e: | Beispiel: Wg 5 | 0.100 | 3 | Beispiel: bitt, <ö>ffnen 6 | 0.200 | 3: | Beispiel: gl, ln (engl.) 7 | 0.100 | ä | Beispiel: M<ä>nner 8 | 0.201 | ä: | Beispiel: w<ä>hlen 9 | 0.102 | i | Beispiel: Wnd 10 | 0.203 | i: | Beispiel: vle 11 | 0.101 | 0 | Beispiel: kmmen 12 | 0.201 | 0: | Beispiel: fll, bef (engl.) 13 | 0.099 | o | Beispiel: Advkat 14 | 0.199 | o: | Beispiel: Bt 15 | 0.100 | ö | Beispiel: <ö>konomisch 16 | 0.200 | ö: | Beispiel: sch<ö>n 17 | 0.098 | u | Beispiel: Mtter 18 | 0.197 | u: | Beispiel: Kchen 19 | 0.097 | ü | Beispiel: Gl<ü>ck, kn<ü>pfen 20 | 0.204 | ü: | Beispiel: F<ü>ße, Kr<ü>mel 21 | 0.261 | ai | Beispiel: hraten, Bspiel 22 | 0.238 | au | Beispiel: Ms, f 23 | 0.274 | eo | Beispiel: Thlogie 24 | 0.283 | 30 | Beispiel: Geh<ör> 25 | 0.267 | äa | Beispiel: ordin<är> 26 | 0.253 | äi | Beispiel: dte, pl (engl.) 27 | 0.265 | ä0 | 28 | 0.237 | ia | Beispiel: Lne 29 | 0.265 | i0 | Beispiel: T 30 | 0.294 | io | Beispiel: Blogie 31 | 0.264 | 0i | Beispiel: Bte 32 | 0.250 | oa | Beispiel: Klke 33 | 0.289 | o0 | Beispiel: herv, T 34 | 0.256 | u3 | Beispiel: R 35 | 0.262 | ui | Beispiel: Lse 36 | 0.254 | u0 | Beispiel: , Tort 37 | 0.169 | b | Beispiel: esser, haen 38 | 0.141 | d | Beispiel: u, anke 39 | 0.178 | f | Beispiel: inden, ater, iloso 40 | 0.145 | g | Beispiel: old, eld 41 | 0.216 | J | Beispiel: enie 42 | 0.200 | h | Beispiel: aus 43 | 0.219 | c | Beispiel: Lit, Mön 44 | 0.291 | x | Beispiel: Atung, Lo, Bu 45 | 0.103 | j | Beispiel: a, ung 46 | 0.213 | k | Beispiel: eck, Ta, ronist, afé 47 | 0.172 | l | Beispiel: assen 48 | 0.213 | m | Beispiel: aus 49 | 0.217 | n | Beispiel: ei 50 | 0.291 | n: | Beispiel: ei 51 | 0.164 | N | Beispiel: sien, triken 52 | 0.225 | p | Beispiel:

ass, Wei, ogleich 53 | 0.172 | r | Beispiel: asen, egen, ose 54 | 0.166 | z | Beispiel: Gla, Mae, Mat, na 55 | 0.195 | s | Beispiel: ohn, Roe 56 | 0.184 | S | Beispiel: iff, arlotte 57 | 0.126 | t | Beispiel: ee, Sa

, Finling 58 | 0.148 | w | Beispiel: ase, inter 59 | 0.255 | tz | Beispiel: Kae 60 | 0.272 | tS | Beispiel: klaen, Wetreit 61 | 0.282 | pf | Beispiel: anne 62 | 0.284 | pz | Beispiel: ychologie 63 | 0.276 | pS | Beispiel: hü 64 | 0.280 | kS | Beispiel: Etein 65 | 0.301 | kz | Beispiel: Hee 66 | 0.330 | kf | Beispiel: Haleisch 67 | 0.043 | | | Pause 50 ms zwischen Vokalen, z.B. bbachten (Senkrechter Strich) 68 | 0.095 | | Pause 100 ms zwischen Wörtern (1 Leerzeichen) 69 | 0.199 | | Pause 200 ms zwischen Satzteilen (2 Leerzeichen) 70 | 0.492 | . | Pause 500 ms für Gedankenstrich, Satzende (Punkt) 71 | 0.993 | # | Pause 1000 ms für Absatzende (Hash)