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.