Text-To-Speech (TTS)
Bei Text-To-Speech Systemen handelt es sich um Sprachsynthese Systeme, die eine künstlich sprechende Stimme erzeugen. Für die Realisierung gibt es verschiedene Ansätze, wobei die häufigste Variante zweistufig ist. Hierdurch wird Flexibilität erreicht, denn grundsätzlich stehen für jeden Verarbeitungsschritt mehrere Programme zur Auswahl und es können auch beliebig eigene Programme und Skripte zwischengeschaltet werden.
Die Einsatzgebiete für TTS sind vielfältig und reichen von Telekommunikationsdiensten (z.B. Bahn, Kino) über computergestütztes Lernen von Fremdsprachen oder die Unterstützung Sehbehinderter bis hin zur Mensch-Maschine-Kommunikation, wo die gesprochene Sprache Barrieren zwischen Mensch und Computer überbrücken kann.
Nicht zuletzt finden TTS Systeme aber auch Einsatz in der Forschung, wo sie eine hervorragende Laborumgebung für linguistische Experimente liefern, z.B. bei empirischen Untersuchungen zur Rezeption von Handlungsanweisungen. Die Aufnahme der Sprachdaten durch einen Sprecher bringt hier eine Reihe von Nachteilen, die durch das Verwenden einer künstlichen Stimme vermieden werden können.
Sehr problematisch bei Aufnahmen natürlicher Sprecher sind Reproduzierbarkeit bzw. kleine Änderungen im Text. Mit TTS kann einerseits der gesprochene Text jederzeit exakt reproduziert werden. Andererseits können auch Änderungen am gesprochenen Text genauso unproblematisch vorgenommen werden, wie im geschriebenen Text. Die unveränderten Satzteile bleiben davon vollständig unbeeinflusst.
Ein anderes Problem ist die Auswertung der Versuchsergebnisse im Bezug auf die Sprechdaten. Hierfür ist die Kenntnis der exakten Anfangs- und Endzeiten der einzelnen Wörter nötig. Im Fall von Sprachdaten, die durch einen Sprecher gesprochen wurden, ist es nötig, diese Zeiten manuell aus den Audiodateien zu gewinnen. Dieses Vorgehen stellt bei langen Texten bzw. einer Vielzahl von Handlungsanweisungen einen erheblichen Arbeitsaufwand dar. Zudem sind die ermittelten Zeiten nicht sehr genau und es kann bei unterschiedlichen Bearbeitern auch zu einer abweichenden Interpretation bei den Wortübergängen kommen.
Hier zeigen sich sehr deutlich die Vorteile einer synthetisch erzeugten Stimme. Schon aus der Phonembeschreibung lassen sich die Wortdauern einschließlich Anfangs- und Endpunkt ermitteln. Die resultierenden Audiodateien sind zudem unverrauscht, d.h. Pausen lassen sich sehr deutlich, auch automatisch, erkennen.
Software für den Txt-To-Speech Prozess
Die bei uns verwendete Sprachsynthese, die aus einem gegebenen Text eine Audiodatei erzeugt, basiert auf den Programmen txt2pho und mbrola. Ihre jeweiligen Ergebnisse werden schrittweise an folgendem Beispielsatz gezeigt:
Jetzt die rote Klammer an der langen Leiste befestigen und die gelbe an der kurzen Leiste befestigen!
-
txt2pho
txt2pho wurde am IKP der Uni Bonn im Rahmen des Hadifix-Projekts entwickelt. Das Programm übernimmt die Umwandlung von Graphemen in Phoneme und wurde freigegeben, um das mbrola-Projekt mit einer frei verfügbaren Text-to-Phonem Konversion für das Deutsche zur unterstützen. Die Konvertierung findet auf Basis eines Aussprachewörterbuchs statt, das über 50.000 Einträge und Flexions-Tabellen enthält.
txt2pho kann mit folgenden Kommandozeilenparametern aufgerufen werden:Kommandozeilenoptionen von txt2pho -p <Pfad> Verzeichnis, das die Konvertierungsdaten enthält. Der Vorgabewert ist /usr/local/txt2pho/data/. Das Verzeichnis muss mit einem '/' abgeschlossen werden. -d <Level> Legt die Debugmodus-Tiefe fest. Der Vorgabewert ist 0. -m Erzeugt eine männlich betonte Aussprache. -f Erzeugt eine weiblich betonte Aussprache. -v Zeigt die Version von txt2pho an. -i <Inputdatei> Legt die Eingabedatei fest. Vorgabe ist /dev/stdin. -o <Outputdatei> Legt die Ausgabedatei fest. Vorgabe ist /dev/stdout. -h Gibt eine Kurzhilfe aus.
Der Aufruf von txt2pho mit der Option -m für eine männliche Stimme des Beispielsatzes bringt folgendes Ergebnis: result_txt2pho
-
mbrola
ist ein Synthesizer, der phonetische Daten, wie sie txt2pho liefert, in einen Audiostrom wandelt.
mbrola kennt einige Optionen, die beim Aufruf angegeben werden können oder sogar müssen:Kommandozeilenoptionen von mbrola -i Zeigt Informationen zur angegebenen Sprachbibliothek. -e Ignoriert kritische Fehler bei unbekannten Lautpaaren. -v <VR> Bestimmt die Ausgabelautstärke. Vorgabe ist 1, die Werte können grösser oder kleiner sein. -f <FR> Frequenzverhältnis der Tonausgabe. Vorgabewert ist 1. Kleinere Werte erzeugen eine tiefere und somit sonorere Stimme. -t <TR> Zeitverhältnis der Lautdauer. Vorgabewert ist 1. Grössere Werte erzeugen eine gedehnte Sprechweise. -l <VF> Stimmfrequenz in Hertz, Vorgabe ist 16000 -h Gibt eine Hilfeseite aus.
Außerdem sind mbrola als Parameter die Lautelementbibliothek zu übergeben, sowie die Eingabe- bzw. Ausgabedatei. Hier kann auch jeweils ein Bindestrich (-) verwendet werden, um von stdin zu lesen bzw. nach stdout zu schreiben.
Als Lautelementbibliothek stehen für das Deutsche z.Zt. de1 bis de6 mit verschiedenen weiblichen und männlichen Stimmen zur Verfügung. Sie beinhalten die Sprachsignale, die zur Soundausgabe zusammengesetzt werden. Abhängig davon, für welche Bibliothek man sich entscheidet, muss txt2pho die entsprechende Option -m für männliche bzw. -f für weibliche Akzentuierung angegeben werden.
Die Anwendung von mbrola mit der männlichen Stimme de2 auf das Zwischenergbnis von txt2pho führt zu folgender Audiodatei: result_mbrola.wav
Weitere Software
Folgende Skripte und Programme finden schließlich Einsatz, um zusätzlich Start- und Endzeiten der einzelnen Wörter, sowie ihre Dauer zu ermitteln:
-
txt2commentedtxt.pl
liest den übergebenen Text zeilenweise ein und wandelt die einzelnen Wörter in folgendes Format um:
{Comment: <word>}<word>
Für den Beispielsatz ergibt sich folgende kommentierte Version: result_txt2commentedtxt
-
extract_txt2pho_times.pl
ermittelt die Wortlängen aus der gegebenen Phonembeschreibung und bringt sie in folgendes Format:
<word>,<start>,<end>,<duration>
Die Wortlängen für das Beispiel werden wie folgt berechnet: result_extract_txt2pho_times
Abhilfe hierfür bietet folgendes java-Programm:
-
Timing.jar
Es ermittelt die Pausen im Audiofile, die wegen der synthetischen Erzeugung relativ gut zu finden sind und bringt dann die vorberechneten Zeiten und die gefundenen Pausen übereinander. Es gibt die neuberechneten Zeiten im bekannten Format zurück. Diese Methode bringt eine deutlich Verbesserung und korrigiert auch kleinere Fehler der Vorberechnung der Wortdauer. Nur eine leichte Diskrepanz bleibt erhalten. Die Ursache dafür liegt darin begründet, dass nicht zwischen allen Wörtern Pausen auftauchen und zudem bei einigen Wortdauern die Differenz zwischen Vorberechnung und Audiofile mit 50-100ms sehr groß ist. Tritt ein solches Wort in einem längeren pausenfreien Kontext auf, lässt sich die tatsächliche Wortlänge nicht mehr ermitteln.
Folgendes Ergebnis wird für den Beispielsatz erreicht: result_Timing
Desweiteren ist der Quellcode natürlich auch geeignet, um generell Pausen in wenig verrauschten Wave-files zu finden.
-
txt2speech.pl
Analysiert die angegebenen Textdateien und erzeugt entsprechende Sprachdateien über den Text-To-Speech Prozess Txt2Pho -> MBrola. Die Dateien sollten Daten der Form:
Setting: <ID>
Satz: <Text>
enthalten. Die Ergebnisse werden dann in <ID>.time und <ID>.wav gespeichert.


Dr. Thies Pfeiffer
