Text to speech mit espeak und mbrola

Text to speech mit freier oder kostenloser Software ist anscheinend immer noch ein etwas düsteres Thema. Vor kurzem habe ich mich damit ein wenig beschäftigt und bin zu einigen Ergebnissen gekommen. Meine Anforderungen waren dabei, dass die Software komplett über Konsole bedienbar sein, aber mir nicht Bildschirminhalte vorlesen können muss.

1. espeak

Grundsätzlich benötigt man nur das Programm »espeak« (aufzufinden im community-Repository) um Text in Sprache umzuwandeln. Die Syntax ist dabei relativ einfach.

espeak -v [Sprache] “Auszugebender Text”

Die zur Verfügung stehenden Sprachen kann man unter /usr/share/espeak-data/voices finden, mit dem Parameter -f kann man espeak auch direkt mit einer Datei füttern. Weitere Parameter lassen sich der Hilfeseite entnehmen.

Das Problem bei espeak ist, dass die zur Verfügung stehenden Sprachen von nicht allzu guter Qualität sind. An dieser Stelle kommt mbrola ins Spiel.

2. mbrola

Mbrola ist ein Programm, welches phonetische Anweisungen in Sprache übersetzen kann. Dies geschieht mit einigen Stimmen relativ gut. Leider kann mbrola nicht direkt mit Text umgehen, dafür kann espeak Text in phonetische Anweisungen übersetzen. Es liegt nahe die beiden Programme aneinander zu binden.

Das Programm liegt unter dem Namen »mbrola« im AUR vor. Dieses, sowie die benötigten Stimmen wie »mbrola-voices-de2« müssen zur Benutzung installiert werden. Achtung 64bit-Nutzer! Im packagebuild muss manuell die Prozessorarchitektur eingetragen werden, was vom Maintainer noch nicht getan wurde. Die Pakete funktionieren dennoch einwandfrei. Leider ist mbrola auch nicht Open-Source, sondern nur Freeware.

Jetzt können wir mbrola mit espeak verbinden, das Ganze wird als *.wav gespeichert, oder wie hier im Beispiel direkt mit aplay abgespielt und wieder gelöscht:

espeak  -v mb-de5 “Auszugebender Satz” | mbrola -e /usr/share/mbrola/de5/de5  – /tmp/mbrola.wav; aplay -q /tmp/mbrola.wav; rm /tmp/mbrola.wav

Espeak verwendet hierfür besondere »Stimmen«, welche man im Ordner /usr/share/espeak-data/voices/mb finden kann. Leider gibt es nicht für jede mbrola-Stimme auch eine Datei, ebenso wie es nicht für jede espeak-Stimme im AUR eine eine mbrola-Stimme gibt. Die beste Erfahrung habe ich mit »de5« gemacht. Insgesamt klingt es etwas holprig, aber im Ganzen nicht mal schlecht.

Die Qualität kann zusätzlich noch verbessert werden, indem man in espeak die Abspielgeschwindigkeit etwas runterdreht (»-s 140«).

Warum nicht »festival« oder »txt2pho«?

Weil es für die reine Ausgabe zu kompliziert ist. Soweit ich es verstanden habe, muss festival für die deutsche Sprachausgabe speziell gepatcht werden und ist etwas kompliziert zu behandeln.

txt2pho liegt nur im AUR vor und hat sich von mir nicht ohne weiteres auf 64bit kompilieren lassen. Wie gesagt, espeak ist für meine Anforderungen zunächst ausreichend.

Und wie geht es weiter?

Im nächsten Schritt versuche ich, dem Computer durch Spracheingabe rudimentär bedienbar zu machen (»Voice Recognition«). Das soll wieder über die Konsole ablaufen und möglichst unkompliziert sein. Mein Ziel ist es lediglich, dass der Computer vordefinierte Befehle aufnehmen und umsetzen kann. Wenn mehr möglich ist, ist das natürlich auch sehr schön. Dazu habe ich bereits die Software »julius« gefunden, was auch über das AUR bezogen werden kann. Die Bedienung scheint jedoch nicht sonderlich trivial zu sein. Hat sich damit vielleicht schon mal jemand auseinandergesetzt?

Des weiteren existiert auch das viel versprechende Projekt »Simon«, was aber mit qt4-Oberfläche und einer nicht unerheblichen Komplexität nichts für meinen Anwendungsfall ist.

Ich würde mich sehr über Anregungen und Meinungen von euch freuen, vielleicht können wir ja mit gemeinsamen Wissen sogar das in dieser Beziehung etwas traurig aussehende Wiki etwas aufpolieren…

7 comments

  • thoughtcrime posted on 17.01.2010 at 13:41:

    Dieser Artikel könnte dich interessieren:

    http://wiki.archlinux.org/index.php/Arch_Linux_for_the_blind

  • c0de posted on 08.03.2010 at 02:39:

    Sehr geiler Ansatz, experimentiere selbst gerade etwas damit herum und stosse zuällig auch noch genau auf einen Artikel der Arch behandelt, super ^^

  • Peter Grasch posted on 11.03.2010 at 22:00:

    Hallo!

    Ich bin der Entwickler von simon also bin ich vermutlich etwas voreingenommen :)

    Trotzdem: Was du machst, kannst du am einfachsten mit simon machen. Verwende simon um dein Vokabular, deine Grammatik und dein Akustikmodell zu erstellen (das simon Handbuch kann dir da weiterhelfen). Das generierte Modell kannst du mit Julius dann direkt in der Konsole verwenden.

    Gute Dokumentation wenn du es wirklich händisch machen möchtest gibt es auch hier:
    http://voxforge.org/home/dev/acousticmodels/linux/create

    Das ganze dauert mit simon allerdings nur ca. 20-30 Minuten, händisch bist du da schon einige Zeit beschäftigt…

    Lg,
    Peter

  • Markus posted on 14.12.2010 at 16:04:

    Guten Tag,

    wie kann ich die Prozessorarchitektur für mbrola eintragen.
    Mir fällt gerade nicht ein was genau damit gemeint ist.

    Danke im Voraus mfG
    Markus

  • 5in4 posted on 14.12.2010 at 16:09:

    Das ist ein spezieller Vorgang, um ein Paket für Archlinux unter einer anderen Architektur als vom Paketersteller gedacht installieren zu können. Mittlerweile wurde dies behoben, und mbrola kann auch normal unter 64bit installiert werden.
    Wenn es für deine Distribution kein Paket gibt, kannst du die Binary auch auf deren Projektseite direkt runterladen: http://tcts.fpms.ac.be/synthesis/mbrola.html

  • Margot posted on 30.12.2010 at 11:48:

    Hallo,
    ich möchte Text-Dateien als Sprach-Dateien (*.wav) z. B. als Kommentare für Filme. Espeak spricht deutsch mit amerikanisch/englischen Akzent (damit kann ich leben) aber hat auch Schwierigkeiten mit den Umlauten (oder bilde ich mir das ein?)
    Der
    Ordner /usr/share/espeak-data/voices/
    besteht. Ebenfalls der
    Ordner /usr/share/mbrola/voices
    aber wo bzw wie bekomme/erzeuge ich mb-de?
    Diese Datei käme dann in den zu erzeugenden Ordner
    Ordner /usr/share/mbrola/voices/mb oder mbrola
    Ich bin am Ende mit meinem Latein.
    Espeak, Kmouth, Kttsd läuft
    Worüber ich mich wundere, txt2pho kann ich nicht gesondert über die Konsole ansprechen:
    :~$ txt2pho -h
    bash: txt2pho: command not found
    Hat jemand eine Idee und Lust mir diese mitzuteilen?
    Guten Rutsch ins neue Jahr
    Margot

  • 5in4 posted on 30.12.2010 at 12:10:

    Übergebe ich espeak direkt meinen String, so ist die Ausgabe eindeutig englisch betont, mit dem Parameter »-v de« eindeutig deutsch, Umlaute werden auch richtig ausgesprochen.
    Die regionale mbrola-Sprachpakete setzen immer auch voraus, dass sie auch installiert sind. Ist dies der Fall?
    Der eigentliche Witz an der oben beschriebenen Methode ist ja, dass espeak die phonetischen Informationen an mbrola weitergibt statt sie selbst zu verarbeiten, da damit ein wesentlich besseres Ergebnis erreicht werden kann.
    Schöne Grüße