Text-to-Speech

Aus LinuxUser 06/2007

Text-to-Speech

Sprachwunder

Um dem Computer das Sprechen beizubringen, bedarf es keiner kommerziellen Lösung: Mit Kttsd und Tools wie Mbrola und Txt2pho macht Ihr Rechner HAL 9000 Konkurrenz.

Schon Stanley Kubrick lässt in seinem Film “2001 – Odyssee im Weltraum” den Computer HAL 9000 mit seinen menschlichen Astronauten-Kollegen reden. Unglücklicherweise dreht HAL im Laufe des Films durch, macht sich selbständig und versucht, die Crew des Schiffes umzubringen.

Todesgefahr droht am heimischen Linux-PC eher weniger, doch mit Hilfe kleiner Skripts bringen auch Sie Ihren Rechner zum Reden. Er liest beliebige Texte vor oder spricht Warnungen aus, sobald bestimmte Ereignisse eintreten. Eine grafische Oberfläche – der Ktts-Manager (Kttsmgr) – erleichtert Ihnen das Einrichten der Sprachunterstützung. Das Programm hat allerdings einen Nachteil: Während es bereits einen englischen Sprecher mitbringt, müssen Sie einen deutschen Vorleser in Form eines Sprachsynthesizers installieren. Andernfalls klingen alle Sätze so, als würde sie ein Amerikaner ohne deutsche Sprachkenntnisse sprechen. Kttsmgr erkennt die deutsche Stimme und setzt sie automatisch ein (Abbildung 1). Der Synthesizer besteht aus drei Komponenten: Mbrola, Txt2pho und einem männlichen oder weiblichen Sprecher.

Abbildung 1: Die grafische Oberfläche von Kttsmgr hilft Ihnen beim Vorlesen von Dateien. Damit sie deutsche Texte liest, installieren Sie einen deutschen Sprachsynthesizer.

Abbildung 1: Die grafische Oberfläche von Kttsmgr hilft Ihnen beim Vorlesen von Dateien. Damit sie deutsche Texte liest, installieren Sie einen deutschen Sprachsynthesizer.

Zunächst bleibt zu klären, wie die drei Komponenten kooperieren. Mit Txt2pho verwandeln Sie einen beliebigen Text in eine phonetische Datei mit der Endung PHO. Sie füttern Mbrola mit der phonetischen Datei und weisen außerdem einen Sprecher zu, der diese PHO-Dateien vorliest. Das Programm verwandelt diese Zutaten in eine Audiodatei im WAV-Format, die Sie dann mit einem beliebigen Audio-Player abspielen. Die einzelnen Schritte lassen sich auch gut kombinieren, ein einfaches Skript liest Ihnen dann eingegebenen Text direkt vor.

Mbrola und Co.

Zunächst besorgen Sie sich Mbrola und Txt2pho aus dem Internet. Laden Sie dazu die Archive mbr301h.zip[1] und txt2pho.zip[2] sowie einige Sprachen [3] herunter – de1-980227.zip und de2-990106.zip sollten es für den Anfang tun. Auf der Seite mit den Sprachdateien tummeln sich auch zahlreiche andere Sprachen, die Mbrola und Txt2pho ohne weiteres verarbeiten. Ihren Experimenten mit Französisch oder Spanisch steht also nichts im Weg. Nun installieren Sie den Synthesizer, den Phonetikwandler und die Sprachdateien nach /usr/local. Für nahezu alle Schritte benötigen Sie Root-Rechte. Unter Ubuntu schreiben Sie wie üblich ein sudo vor die entsprechenden Befehle. Da Sie unter Mandriva und OpenSuse mit su root Administratorrechte erlangen, führen Sie die folgenden Befehlen einfach ohne sudo aus. Insgesamt gehen Sie unter den verschiedenen Linux-Distributionen nach demselben Schema vor.

Zunächst erzeugen Sie über sudo mkdir /usr/local/mbrola ein Verzeichnis und wechseln mit cd in dieses. Der Befehl sudo unzip /pfad/zu/mbr301h.zip entpackt Mbrola in dieses Verzeichnis. Über sudo unzip /pfad/zu/de1-980227.zip und sudo unzip /pfad/zu/de2-990106.zip entpacken Sie die Archive für die zwei Sprecher in das selbe Verzeichnis. Hierhin gehören auch weitere Sprachen, falls Sie das System zukünftig erweitern. Anschließend legen Sie einen symbolischen Link, um Mbrola einfach durch die Eingabe des gleichnamigen Kommandos aufzurufen:

sudo ln -s /usr/local/mbrola/mbrola-linux-i386 /usr/bin/mbrola

Im nächsten Schritt wenden Sie sich dem Phonetikwandler zu. Dazu begeben Sie sich ins übergeordnete Verzeichnis /usr/local. Der Befehl sudo unzip /pfad/zu/txt2pho.zip entpackt auch dieses Archiv und erzeugt dabei ein Unterverzeichnis namens txt2pho, in das Sie wechseln. Über sudo chmod u+x txt2pho machen Sie Txt2pho ausführbar. Dann kopieren Sie über cp txt2phorc $HOME/.txt2phorc die Konfigurationsdatei von Txt2pho in Ihr Home-Verzeichnis und wechseln über cd dorthin. Unter Mandriva und Suse nehmen Sie diesen letzten Schritt als gewöhnlicher Benutzer vor, da die Konfigurationsdatei ansonsten im Verzeichnis von Root landet. Öffnen Sie die versteckte Datei mit einem Editor Ihrer Wahl (Abbildung 2) und ändern Sie zwei bestehende Einträge wie folgt ab:

DATAPATH=/usr/local/txt2pho/data/
INVPATH=/usr/local/txt2pho/data/
Abbildung 2: Zuerst machen Sie die Konfigurationsdatei     <code srcset=

/usr/local/txt2pho/txt2phorc zu einer versteckten Datei in Ihrem Home-Verzeichnis, dann passen Sie die Parameter an.” width=”300″ height=”209″ /> Abbildung 2: Zuerst machen Sie die Konfigurationsdatei /usr/local/txt2pho/txt2phorc zu einer versteckten Datei in Ihrem Home-Verzeichnis, dann passen Sie die Parameter an.

Nach dem Speichern weiß Txt2pho, wo es seine Daten suchen soll. Vergessen Sie nicht den Schrägstrich am Ende der Zeilen. Abschließend legen Sie – wie bei Mbrola – einen symbolischen Link auf Txt2pho nach /usr/bin. Der Befehl lautet:

sudo ln -s /usr/local/txt2pho/txt2pho /usr/bin/txt2pho

Geben Sie nun txt2 auf der Konsole ein und drücken Sie [Tab]. Daraufhin sollte die Bash diese Eingabe zu txt2pho vervollständigen – das gleiche gilt für die Eingabe von mbro. Tut sie es nicht, stimmt etwas mit den symbolischen Links nicht oder Txt2pho und Mbrola liegen im falschen Verzeichnis. Auf den erwähnten Webseiten finden Sie auch noch verschiedene Filter, die Sie zusätzlich installieren können. Der Kasten “Extras” zeigt, was das bringt und wie es geht.

Extras

Txt2pho lässt sich noch um die Pakete Numfilt [4], Pipefilt und Preproc erweitern, die spezielle Aufgaben erledigen. Numfilt kümmert sich um die richtige Sprachausgabe von Zahlen und unterscheidet zum Beispiel Punkte, die in Dezimalzahlen auftreten von ihrer Funktion als Satzzeichen. Pipefilt bearbeitet den Text noch einmal und sorgt dafür, dass Txt2pho nach Satzzeichen eine kleine Pause einlegt und Zeilenenden nicht als Sinnabschnitte versteht. Preproc wiederum kann bestimmte Zahlenangaben und Abkürzungen auflösen.

Wechseln Sie zunächst in das Unterverzeichnis /usr/local/txt2pho/pipefilt und geben Sie dort

sudo chmod +x pipefilt && sudo cp pipefilt /usr/local/bin/

ein. Mit demselben Befehl kopieren Sie anschließend auch Preproc nach /usr/local/bin:

sudo chmod +x preproc && sudo cp preproc /usr/local/bin

Über Pipes schalten Sie die Module später dazu. Um diese zu verstehen, sollten Sie allerdings zunächst den Text weiter unten lesen. Ein Beispiel:

echo hallo, heute ist der 16.04.2007 | pipefilt | preproc /usr/local/txt2pho/preproc/Hadifix.abk /usr/local/txt2pho/preproc/Rules.lst | txt2pho | mbrola /usr/local/txt2pho/de1/de1 - -.au | aplay

Vergessen Sie nicht, beim Aufruf von Preproc die Pfade zu den Dateien Rules.lst und Hadifix.abk anzugeben. Zudem muss /usr/local/bin im Pfad liegen.

Um schließlich Numfilt zu installieren, laden Sie das gleichnamige Archiv herunter, wechseln nach /usr/local/txt2pho und entpacken das Archiv über sudo tar xvzf /pfad/zu/numfilt-0.1.tar.gz. Dabei entsteht der Unterordner numfilt-0.1 in den Sie wechseln. Werden Sie über sudo su – oder unter OpenSuse und Mandriva über su root – Administrator und geben Sie cc -o numfilt numfilt.c ein, um das Modul selbst zu kompilieren. Das dabei entstehende Binary numfilt kopieren Sie über sudo cp numfilt /usr/local/bin an einen Platz mit ausführbaren Dateien, um auch diesen Filter später von überall aufzurufen.

Kttsmgr installieren

Die Installation von Kttsd erfolgt unter Ubuntu, Mandriva und OpenSuse 10.1/10.2 über den Paketmanager. Die Schritte variieren allerdings leicht zwischen den Distributionen.

Nutzer von Ubuntu Edgy Eft schalten zunächst das Universe-Repository frei. Dazu rufen Sie den Paketmanager Synaptic auf, wählen den Menüpunkt EinstellungenPaketquellen aus und setzen bei Von der Ubuntu-Gemeinde … ein Häkchen. Sie schließen das Fenster und erneuern die Paketliste über einen Klick auf Neu laden. Dann spielen Sie die Pakete kttsd und kttsd-contrib-plugins ein. Einen Eintrag für Kttsmgr finden Sie über das Startmenü unter Barrierefreiheit. Alternativ starten Sie die grafische Oberfläche (Abbildung 3), indem Sie [Alt]+[F2] drücken und kttsmgr eingeben. Der Manager startet zugleich auch Kttsd, den Ktts-Daemon.

Abbildung 3: Die Installation des Ktts-Manager weicht zwischen den verschiedenen Distributionen etwas voneinander ab. Ein Papagei in der Symbolleiste zeigt, dass der Manager arbeitet.

Abbildung 3: Die Installation des Ktts-Manager weicht zwischen den verschiedenen Distributionen etwas voneinander ab. Ein Papagei in der Symbolleiste zeigt, dass der Manager arbeitet.

Nutzer von Suse Linux 10.1 installieren über YaST das Paket kdeaccessibility3.Kttsd finden Sie anschließend im Startmenü unter DienstprogrammeDesktop. Das Vorgehen für OpenSuse 10.2 unterscheidet sich nicht, die Menüeinträge liegen unter AnwendungenDienstprogrammeDesktop.

Anwender von Mandriva 2007 installieren via Konsole die Pakete kdeaccessibility-kttsd-3.5.4-2mdv2007.0.i586.rpm und libkdeaccesibility-kttsd-3.5.4-2mdv2007.0.i586.rpm von unserer Heft-CD. Dazu wechseln Sie in den Ordner mit den heruntergeladenen Paketen und geben mit Root-Rechten den Befehl rpm -Uhv *.rpm ein.

Sprechmaschine

Nach dem Start öffnet sich ein Fenster mit mehreren Reitern, im Panel erscheint als Symbol ein Papagei. Um die deutsche Sprache auszusuchen, klicken Sie im Reiter Talkers auf den Button Add und wählen dann als Sprache aus dem Dropdownmenü German aus. Als Synthesizer wählen Sie Hadifix. Nun gibt es zwei Möglichkeiten: Kttsmgr sucht automatisch eine deutsche Stimme aus und zeigt sie an, oder Sie weisen der Software manuell den Pfad zu einem der Sprecher. Die haben Sie ja anfangs in den Ordner /usr/local/mbrola installiert. Um weitere Sprecher einzurichten, wählen Sie eine bereits konfigurierte Stimme aus, klicken auf Edit und suchen unter Voice File einen anderen Sprecher aus (Abbildung 4). Unter Advanced Options stehen übrigens auch die Pfade zu Mbrola und Txt2pho, die Kttsmgr automatisch ermittelt. Erscheinen sie dort nicht, tragen Sie die Pfade manuell ein und überprüfen Ihre Softlinks zu Mbrola und Txt2pho.

Abbildung 4: Haben Sie Mbrola und Co. installiert, setzen Sie einen deutschen Sprecher ein – falls Kttsmgr das nicht ohnehin automatisch tut.

Abbildung 4: Haben Sie Mbrola und Co. installiert, setzen Sie einen deutschen Sprecher ein – falls Kttsmgr das nicht ohnehin automatisch tut.

Nun ist es Zeit, einen Testballon zu starten: Im Reiter General kreuzen Sie Enable Text-to-Speech System an. Ein neuer Reiter mit dem Titel Jobs taucht auf: Wechseln Sie dorthin. Hier lassen Sie das System entweder eine Textdatei oder das Clipboard vorlesen. Beim Clipboard handelt es sich um die Zwischenablage. Markieren und kopieren Sie einen Text, so landet er im Clipboard, ein Mausklick auf Speak Clipboard startet die Sprachausgabe. Wählen Sie Speak file, müssen Sie zunächst selbst im Dateisystem nach einer Textdatei suchen, die Sie dann Kttsmgr übergeben. Die Software beginnt mit dem Abspielen der Nachricht und zeigt den vorgelesenen Text im unteren Bereich zeilenweise an.

Um zum Beispiel Texte aus dem Internet vorzulesen, bieten sich zwei Möglichkeiten an: Der Konqueror bringt nach der Installation von Kttsd gleich einen zusätzlichen Menüpunkt unter Extras | Text vorlesen mit und liest markierten Text vor. Nutzen Sie indes Firefox als Browser, markieren und kopieren Sie einen interessanten Text, klicken mit der rechten Maustaste auf den Papagei im Panel und suchen Speak Clipboard Contents aus.

Feintuning

Ansonsten lassen sich über den Manager auch zahlreiche Kleinigkeiten verändern. Über Notifications richten Sie Sprecher für die verschiedenen Events auf dem Rechner ein. Die einzelnen Sprecher passen Sie im Reiter Talkers über Edit noch an, verändern beispielsweise Geschwindigkeit und Tonhöhe einer Stimme. Im Register Audio wählen Sie – falls die Sound-Ausgabe über Arts versagt – einen anderes Backend aus, wie Akode oder Alsa (Abbildung 5).

Abbildung 5: Im Register     <code srcset=

Audio wechseln Sie bei Bedarf das Backend für die Audioausgabe. Neben Arts bietet der Ktts-Manager Akode und Alsa an.” width=”300″ height=”189″ /> Abbildung 5: Im Register Audio wechseln Sie bei Bedarf das Backend für die Audioausgabe. Neben Arts bietet der Ktts-Manager Akode und Alsa an.

Selbst gebastelt

Dank Mbrola und Txt2pho basteln Sie aber auch selbst Skripte und spielen ein wenig mit der Sprachausgabe herum. Ein paar Beispiele zeigen, wie Sie die Sprachsoftware für eigene Zwecke einspannen, Pipes sind dabei eine große Hilfe.

echo Hallo Welt | txt2pho > test.pho

So einfach erzeugen Sie über die Konsole eine PHO-Datei, die in phonetischer Schrift die berühmten Worte Hallo Welt enthält. Dabei schickt der Befehl echo den Text via Pipe direkt an das Programm Txt2pho, das ihn umwandelt und in der Datei test.pho ablegt. Sie können die Datei mit einem Editor öffnen und nachsehen, wie Txt2pho die einzelnen Worte übersetzt (Abbildung 6). Im nächsten Schritt verarbeitet Mbrola diese PHO-Datei und verwandelt sie in eine abspielbereite WAV-Datei namens hallowelt.wav.

mbrola /usr/local/mbrola/de1/de1 test.pho hallowelt.wav

Hier übergeben Sie Mbrola als erstes Argument den Pfad zu einem der Sprecher, während die eben erzeugte Datei test.pho als Quelle für den Synthesizer dient. Der Befehl aplay hallowelt.wav oder play hallowelt.wav spielt das Ergebnis schließlich ab.

Diese drei Schritte verbinden Sie im nächsten Ansatz miteinander:

cat test.txt | txt2pho | mbrola /usr/local/mbrola/de1/de1 - -.au | aplay
Abbildung 6: Eine phonetische Datei unter der Lupe: Sie besteht im wesentlichen aus Zahlen, die Mbrola dann als Töne interpretiert.

Abbildung 6: Eine phonetische Datei unter der Lupe: Sie besteht im wesentlichen aus Zahlen, die Mbrola dann als Töne interpretiert.

Über cat test.txt lesen Sie den Inhalt der Textdatei test.txt aus udn reichen ihn gleich an Txt2pho weiter. Das wandelt den Text um und schickt ihn an die Standardausgabe, da Sie keine Datei zum Speichern angeben. Mbrola holt ihn von der Standardausgabe (“-“) ab und verwandelt ihn in eine Sound-Datei im AU-Format. Die letzte Pipe leitet die dabei entstehende Audiodatei an Aplay weiter, das sie abspielt. Ohne Zwischenschritt liest dieser Befehl also eine beliebige Textdatei ein und anschließend vor.

Skripten

Wie Listing 1 zeigt, lässt sich das Ganze auch in Form eines Skripts namens speakspeichern, das Sie von zentraler Stelle aufrufen. Der Befehl speak hallo Welt! liest dann automatisch den übergebenen Text vor.

Listing 1
#!/bin/sh
### speak
### liest übergebenen Text via Txt2Pho und Mbrola mit Aplay vor
echo $* | cat | txt2pho | mbrola /usr/local/mbrola/de1/de1 - -.au | aplay

Der anfängliche Befehl echo $* übergibt den eingegebenen Text an cat, von dort wandert er wie weiter oben geschildert an Txt2pho, Mbrola und schließlich Aplay. Es ist wichtig, die Befehlskette in eine Zeile zu schreiben: Andernfalls versteht die Bash beim Ausführen nicht, dass es sich um eine Pipe handelt. Das fertige Skript speichern Sie und machen es über chmod u+x speak ausführbar. Um es aus jedem Verzeichnis starten zu können, legen Sie einen symbolischen Link nach /usr/bin/.

sudo ln -s /PfadZumSkript/speak /usr/bin/speak

Nun sollten Sie in der Lage sein, den Computer beliebige Sätze sprechen zu lassen. Geben Sie einfach speak irgendwas ein.

Ein ganz ähnliches Skript liest auch ganze Textdateien vor. Dazu ändern Sie einfach den ersten Teil des Listing 1 und ersetzen echo $* | cat durch cat $1. Geben Sie dem Skript einen Namen wie speak_file, machen Sie es ausführbar und legen Sie bei Bedarf wieder einen symbolischen Link an. Das Kommando speak_file /Pfad/Test.txt liest dann die angegebene Textdatei vor.

Logging

Eine weitere, nur bedingt sinnvolle Anwendung von Kttsd besteht darin, die sich verändernden Log-Dateien vorlesen zu lassen. Das Skript im Listing 2 verfolgt die Entwicklung der Datei /var/log/messages. Schließen Sie zum Beispiel ein USB-Gerät an den Rechner an, erfolgt ein entsprechender Vermerk in dieser Datei. Das Skript verwandelt den Texteintrag in Sprache und liest ihn gleich vor.

Listing 2
#!/bin/sh
### speak_messages
### liest neue Eintraege aus /var/log/messages vor
tail -f /var/log/messages | cat | txt2pho | mbrola /usr/local/mbrola/de1/de1 - -.au | aplay

Der Nachteil besteht darin, dass die Einträge oft ziemliches Kauderwelsch enthalten sowie undurchsichtige Informationen, wie etwa 14-stellige Zahlenfolgen. Sie sollten also vorher dafür sorgen, dass der Log-Daemon nur sinnvolle und beim Vorlesen hilfreiche Informationen liefert. Das ist jedoch eine andere Baustelle – ein etwas älterer Artikel zum Thema Systemprotokolle [5] hilft beim sinnvollen Filtern der Log-Dateien.

Glossar

Arts

Analog Real Time Synthesizer. Programm, das unter KDE einen analogen Synthesizer simuliert. Der zugehörige KDE-Standard-Soundserver Artsd mischt mehrere Musikkanäle gleichzeitig in Echtzeit. Ab KDE 4 soll die Abstraktionsschicht “Phonon” den Einsatz beliebiger Soundserver mit KDE ermöglichen.

Akode

Audio-Decoding-Framework für KDE, das ein einheitliches Interface zur Dekodierung der gebräuchlichsten Audioformate bereitstellt.

Alsa

Advanced Linux Sound Architecture. Soundarchitektur für Linux-Systeme mit Audio- und MIDI-Funktionen. Alsa unterstützt eine weitgehend automatische Konfiguration der Soundkarten und den Einsatz mehrerer Soundgeräte in einem System.

LinuxUser 06/2007 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben