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… (more…)