14.3. Text-to-Speech (TTS)
Text-to-Speech beschreibt die Umwandlung von geschriebenem Text in
gesprochenen Text (Sprachsynthese) auf Computersystemen. Auf unserem
Asterisk-System bedeutet das, dass ein Programm anhand einer Textdatei
(meist in ASCII) eine entsprechende Audiodatei (Soundfile) erzeugt. Diese
kann wie jede andere Multimediadatei abgespielt werden, und man hört den
Text dann gesprochen. Wie bei vielen Software-Projekten wird die englische
Sprache meist besser unterstützt als die deutsche.
Darüber hinaus gibt es große Qualitätsunterschiede zwischen den
offenen und freien (meist GPL) Engines und entsprechenden kommerziellen
Lösungen. Das Sprach-Synthese-System „Festival“ (http://www.cstr.ed.ac.uk/projects/festival/)
eignet sich gerade noch so für englischen Text, aber spätestens bei
deutschen Texten lässt die Qualität sehr zu wünschen übrig. Als guten
Kompromiss kann man die Software der amerikanischen Firma
Cepstral (http://www.cepstral.com/) nehmen.
Es gibt dort eine kostenlose Probeversion und eine recht günstige
Vollversion. [75]Die hier vorgestellte Lösung baut auf der Cepstral-Engine
auf.[76]
Warnung
Cepstral und Festival sind beides keine qualitativ hochwertigen
Text-to-Speech-Engines! Leider gibt es in diesem Bereich nur im
Hochpreissegment wirklich gute Lösungen.
14.3.1. Installation von Cepstral Text-to-Speech
Auf der Webseite http://www.cepstral.com/downloads/
können Sie die deutsche Sprach-Engine herunterladen (eventuell müssen
Sie auf den Link „Additional Voices“ klicken). Die
entsprechende Datei (hier im Beispiel immer als
Cepstral_Matthias_i386-linux_4.1.2.tar.gz
bezeichnet) wird wie folgt installiert:tar xvzf Cepstral_Matthias_i386-linux_4.1.2.tar.gz cd Cepstral_Matthias_i386-linux_4.1.2 ./install
14.3.2. Beispiele und Tests
Falls Sie bei der Installation nichts anderes angeben, wird die
Engine als
/opt/swift/bin/swift
installiert. Testen
können Sie dies mit folgender Eingabe auf der
Linux-Kommandozeile:/opt/swift/bin/swift -o /tmp/test.wav -p audio/sampling-rate=8000,audio/channels=1 "Dies ist ein Test."
Das
Ergebnis kann man sich entweder mit einem Audioplayer oder mit Asterisk
anhören. Dazu fügen Sie einfach in der
extensions.conf
folgenden Eintrag
hinzu:exten => 1234,1,Answer() exten => 1234,2,Playback(/tmp/test) exten => 1234,3,Hangup()Um einen beliebigen Text ausgeben zu lassen, benutzen wir die
System()
-Applikation im
Dialplan. Hier sehen Sie ein Beispiel:exten => 1222,1,Answer() exten => 1222,2,System(rm -rf /tmp/test.wav) exten => 1222,3,System(/opt/swift/bin/swift -o /tmp/test.wav -p audio/sampling-rate=8000,audio/channels=1 "Noch ein Test.") exten => 1222,4,Playback(/tmp/test) exten => 1222,5,Hangup()
14.3.3. Pausen in Texten
Cepstral benutzt SSML (Speech Synthesis Markup
Language) innerhalb der Engine. So kann eine Pause im obigen
Beispiel wie folgt eingefügt werden:
exten => 1222,1,Answer() exten => 1222,2,System(rm -rf /tmp/test.wav) exten => 1222,3,System(/opt/swift/bin/swift -o /tmp/test.wav -p audio/sampling-rate=8000,audio/channels=1 "Noch ein Test. <break time='2500ms'/> Ende!") exten => 1222,4,Playback(/tmp/test.wav) exten => 1222,5,Hangup()Informationen zu SSML finden Sie beim W3C unter http://www.w3.org/TR/speech-synthesis/.
[75] Auch hier gibt es eine Online-Testversion unter http://www.cepstral.com/demos/.
[76] Wer sich ein wenig mit Festival beschäftigt, kann die hier gezeigten Beispiele leicht auf Festival übertragen. Dies gilt in gleicher Weise auch für jede andere Text-to-Speech-Engine.