![]() |
|
||||||||||||||||||
|
|||||||||||||||||||
|
|||||||||||||||||||
|
||
|
TFT Monitor bei
Mercateo kaufen.
Neues Netbook? Ein Preisvergleich lohnt sich. Bei uns finden sie Notebooks, PDAs und Drucker mit Testberichten und Tipps. Diamant Buchhaltungssoftware – transparent und detailliert auch für die Konzernbuchhaltung. Günstige Shareware Programme als direkte Downloads im Software Portal. Bis zu 70% sparen durch Preisvergleich. |
||
|
MBROLALesestundevon Jo Moskalewski |
|
Sie besprechen Ihren Anrufbeantworter nur widerwillig mit einem neuen Spruch? Kein Problem, lassen Sie einfach Ihren Computer ein gutes Wort für Sie einlegen. Sie möchten sich Ihre elektronische Post lieber einmal vorlesen lassen, so dass Sie zugleich nebenan Tee kochen können? Vielleicht hätten Sie auch gern eine akustische Bestätigung, wenn Ihr Rechner erfolgreich den On- bzw. Offline-Modus erreicht? Mit einem Sprachsynthesizer ist all dies und noch viel mehr möglich.
Für echte Linuxer kommt eine weitere Anforderung hinzu: Das Ganze sollte kostenlos erhältlich und ebenso legal einzusetzen sein. Hervorgetan hat sich auf diesem Sektor bislang ein Projekt: der Sprachsynthesizer MBROLA [1]. Es ist zwar nicht frei (im Sinne von Open Source und GPL) erhältlich, aber doch immerhin für Privatpersonen frei von Kosten oder Beschränkungen verfügbar.
Macht man sich jedoch einmal die Mühe, den Aufbau einer solchen Befehlsfolge zu verstehen, scheint sie am Ende doch wieder ganz simpel. Und so nähern wir uns in diesem Artikel schrittweise unserem Ziel. Grundvoraussetzung ist eine fix und fertig eingebundene Soundkarte, über die erfolgreich Sound-Dateien ausgegeben werden können.
Von all diesen sprachspezifischen Besonderheiten weiß MBROLA allerdings nichts. Stattdessen schaltet man ein TTS-("text to speech"-)Tool [4] vor, das dem Synthesizer lediglich die phonematisch relevanten Informationen inklusive Betonung mitteilt (z. B. wann die Stimmlage abhängig vom Satzbau angehoben oder abgesenkt wird). Deutschsprachige MBROLA-User nutzen dazu txt2pho [2]. Dieses Werkzeug setzt Text in eine Zwischensprache um, die MBROLA dann (sprachunabhängig) in Töne und Frequenzen verwandelt.
Die müssen noch ausgegeben werden, und dazu braucht MBROLA eine von Ihnen ausgewählte und zum TTS-Werkzeug passende Stimme [3] (die mit txt2pho verwendete sollte also deutsch sein). Diese kann von MBROLA und txt2pho über Aufrufparameter beeinflusst werden. Statt das Ergebnis über Lautsprecher auszugeben, lässt es sich in Dateien schreiben (die Sie nochmals nachbearbeiten können) oder aber per Pipe an nachfolgende Anwendungen weiterleiten.
Zunächst ist es ratsam, den MBROLA-Tools ein eigenes Verzeichnis zu spendieren. Benötigt werden minimal etwa 15 MB Plattenplatz (eine einzige Stimme) bis zu etwa 36 MB für alle drei verfügbaren deutschen Stimmen. Prädestinierter Aufbewahrungsort für distributionsfremde Software ist der Verzeichniszweig /usr/local, so dass Sie dort auch Ihr MBROLA-Verzeichnis einrichten sollten. Alle Installationsarbeiten müssen vom User root erledigt werden:
mkdir /usr/local/mbrola
Die dort zu installierenden Pakete (MBROLA, txt2pho und die Stimmdateien) haben zudem die unangenehme Eigenschaft, als zip-Datei -- und nicht als unter Linux übliches tar-Archiv -- aufzutreten, so dass Sie zum Entpacken unzip installiert haben müssen. Ein Blick in Ihre Distributions-CDs sollte dieses herbeizaubern, sofern es Ihre Festplatte nicht längst für Sie parat hält. Dann geht es ans Entpacken der Pakete:
unzip -d /usr/local/mbrola/ mbr301h.zip unzip -d /usr/local/mbrola/ txt2pho.zip unzip -d /usr/local/mbrola/ de1-980227.zip unzip -d /usr/local/mbrola/ de2-990106.zip unzip -d /usr/local/mbrola/ de3-000307.zipDabei entfallen ein bis zwei der letzten drei Schritte, wenn Sie nicht alle de-Stimmenpakete installieren. de1 ist eine weibliche Stimme mit einer Sampling-Rate von 16.000 Hz und mittelprächtiger Qualität, de2 ist männlich bei ebenfalls 16.000 Hz und de3 wieder weiblich, jedoch bei einer Sampling-Rate von 22.050 Hz von recht guter Qualität.
ln -s /usr/local/mbrola/de1/de1 /usr/local/mbrola/txt2pho/data/de1 ln -s /usr/local/mbrola/de2/de2 /usr/local/mbrola/txt2pho/data/de2 ln -s /usr/local/mbrola/de3/de3 /usr/local/mbrola/txt2pho/data/de3
Nun ist eigentlich alles Nötige vorhanden. Doch ist es etwas mühselig, die Programme immer mit kompletter Pfadangabe aufzurufen. Daher erstellen Sie für diese am besten noch ein paar weitere Symlinks in /usr/local/bin, einem Verzeichnis, das sicherlich bereits im Suchpfad enthalten ist (was sich mit echo $PATH überprüfen lässt):
ln -s /usr/local/mbrola/mbrola-linux-i386 /usr/local/bin/mbrola ln -s /usr/local/mbrola/txt2pho/txt2pho /usr/local/bin/txt2pho ln -s /usr/local/mbrola/txt2pho/pipefilt /usr/local/bin/pipefilt
Da das MBROLA-Paket diverse Programmdateien für verschiedene Rechnerarchitekturen beinhaltet, ist es wichtig, das zur PC-Architektur (i386) passende Binary mbrola-linux-i386 nach /usr/local/bin/mbrola zu verlinken.
cp /usr/local/mbrola/.txt2phorc $HOME
Anschließend müssen Sie in dieser Datei die Pfadangaben entsprechend Ihrer Installation abändern. Für den hier geschilderten Fall gilt:
DATAPATH=/usr/local/mbrola/txt2pho/data/ INVPATH=/usr/local/mbrola/txt2pho/data/
Ihr TTS-System ist nun einsatzbereit. Die Stimmpakete liefern fertige Kostproben ihres Könnens in Form übersetzter pho-Dateien mit, so dass Sie MBROLA einem ersten Test unterziehen können. Dessen Aufruf folgt folgendem Muster:
mbrola stimmdatei pho-datei.pho ausgabe.wav
Die Ausgabe können Sie alternativ mit den Dateiendungen raw, au oder aiff versehen; je nachdem, welches Audioformat Sie bevorzugen. Um dem mitgelieferten Wetterbericht unter /usr/local/mbrola/de3/TEST/wetter.pho zu lauschen, wandeln Sie diese pho-Datei mit MBROLA in eine wav-Datei um, die sich wiederum zum Abspielen mit jedem Audioplayer (wie bplay [5] oder play aus dem sox-Paket) eignet:
jo@planet ~> mbrola /usr/local/mbrola/txt2pho/data/de3 /usr/local/mbrola/de3/TEST/wetter.pho wetter.wav jo@planet ~> bplay wetter.wav Playing WAVE : 16 bit, Speed 22050 Mono ...
Mit der Option -f 1.5 (für "Frequenz") wird die Stimme etwas heller und mit -f 0.5 dunkler. Ist es noch früh am Morgen, bekommen Sie Ihren Wetterbericht über -t 1.5 (für "time") in Mitmeißelgeschwindigkeit vorgetragen. Bei Termindruck hingegen macht ein -t 0.5 aus der Sprecherin eine wahre Zungenakrobatin.
Interessant ist an diesen Möglichkeiten, dass sie beim Abspielen von wav-Files nicht mehr bestehen: Verlangsamen Sie das Abspielen einer wav-Datei, so sinken zwangsläufig die Stimmfrequenzen (Frequenzen werden einzig über die Zeit bestimmt). MBROLA behandelt Frequenz und Zeit unabhängig voneinander, da die Töne erst vom Synthesizer selber erzeugt werden. Sie können also die Stimmlage beibehalten, aber die Geschwindigkeit erhöhen.
jo@planet ~> txt2pho -i email.txt -o email.pho jo@planet ~> mbrola /usr/local/mbrola/txt2pho/data/de3 email.pho email.wav jo@planet ~> bplay email.wav Playing WAVE : 16 bit, Speed 22050 Mono ...
Neben den hier verwendeten txt2pho-Optionen -i (für "input") und -o (für "output") ist es ratsam, künftig immer die Option -f für weiblich ("female") bzw. -m für männlich ("male") mit anzugeben. Zwar sieht auch die Konfigurationsdatei ~/.txt2phorc eine solche Voreinstellung vor, doch Auswirkung hatte das Abändern der Datei in diesem Falle nicht -- es blieb immer bei der weiblichen Besetzung. Per Kommandozeilenaufruf lässt sich dieser Mangel aber beheben.
Hingegen entfaltet der Eintrag SPEECHRATE in der Konfigurationsdatei tatsächlich seine korrekte Wirkung als Äquivalent zu MBROLAs Parameter -t: Er lässt die Sprechgeschwindigkeit frequenzunabhängig an- oder absteigen. Damit setzen Sie in ~/.txt2phorc einen Grundwert, von dem Sie noch immer durch den nachfolgenden MBROLA-Aufruf abweichen können.
Zu diesem Zweck sind txt2pho und MBROLA in der Lage, sowohl von der Standardeingabe (stdin) zu lesen, als auch auf die Standardausgabe (stdout) zu schreiben. Somit können sogenannte Pipelines für die Konversation der beteiligten Tools herangezogen werden. Hierbei werden die jeweiligen Kommandos in der Shell durch das Zeichen | verbunden. Der Aufruf der einzelnen Befehle geschieht nun etwas anders -- schließlich soll zwischendurch keine neue Datei mehr erstellt oder gelesen werden.
echo Das ist ein Test! | txt2pho
Dessen Ausgabe sollte MBROLA lesen. Allerdings kann das Programm nicht wie txt2pho ohne Zutun von stdin lesen. Auch der Wunsch nach einer Ausgabe auf stdout muss ihm explizit mitgeteilt werden: Soll die Standardeingabe als Quelle bzw. die Standardausgabe als Ziel zum Einsatz kommen, setzt man statt eines Argument-Dateinamens jeweils einen einfachen Bindestrich (-) ein. Die Ausgabe könnte zwar über die entsprechende Device-Datei direkt auf die Soundkarte gehen, doch nicht immer ist dies ohne Zuhilfenahme spezieller Tools möglich. bplay kann von stdin lesen (nicht alle Soundplayer können dies) und ist somit als Ausgabe-Tool erste Wahl. Allerdings fehlen bplay dann einige Informationen, die in einer Audiodatei stünden: So sollten Sie sowohl die Sample-Rate (16000 bei de1 und de2, 22050 bei de3) als auch die Auflösung (16 Bit) mit angeben:
jo@planet ~> echo Das ist ein Test! | txt2pho -f | mbrola /usr/local/mbrola/txt2pho/data/de3 - - | bplay -s 22050 -b 16 Playing raw data : 16 bit, Speed 22050 Mono ...
| Listing 1: Was auf die Ohren -- txt2snd |
#!/bin/bash
if [ $# = 0 ]
then
echo "Usage: `basename $0` -f [filename]
`basename $0` -s \"Text, den Sie vorgelesen bekommen wollen\"
`basename $0` jagt ein Textargument oder den Inhalt einer Datei durch txt2pho
und mbrola und spielt die entsprechende Audioumsetzung mit bplay ab."
exit 1
elif [ $1 = -f ]
then
txt2pho -i $2 -f | mbrola /usr/local/mbrola/txt2pho/data/de3 - - \
| bplay -s 22050 -b 16
elif [ $1 = -s ]
then
echo $2 | txt2pho -f | mbrola /usr/local/mbrola/txt2pho/data/de3 - - \
| bplay -s 22050 -b 16
fi
|
In der ersten Zeile eines Skriptes muss immer der zuständige Interpreter stehen -- in diesem Fall wurde mit der Bash die Standard-Shell gängiger Linux-Distributionen gewählt, so dass es sich im Skript so wie in der gewohnten Shell walten und schalten lässt. Mit if-elif-(also "if-else if"-)Bedingungen überprüft es, ob und mit welchen Optionen es aufgerufen wird. Wurden keine überreicht, gibt echo einen Hilfetext aus. Hat der Benutzer jedoch die Option -f gesetzt, erwartet txt2snd eine Dateiangabe und lässt die Stimme den Dateiinhalt sprechen. Beim Schalter -s hingegen wird der nachfolgend übergebene Text akustisch dargeboten. Einfache Sprachmeldungen sind so sehr leicht in bestehende, bislang einzig optisch zu lösende Ausgaben integrierbar.
Dort angekommen schickt es bei jedem Aufruf alles von Ihnen mit der Maus Markierte nach stdout. Was dort landet, ist wie gesehen ein potenzieller Kandidat zur weiteren Verwertung durch MBROLA:
wxpaste | txt2pho -f | mbrola /usr/local/mbrola/txt2pho/data/de3 - - | bplay -s 22050 -b 16Sobald Sie diesen Befehl (oder auch eine erneut hierfür angelegte Skriptdatei) in Ihrem Startmenü unterbringen oder als Icon ablegen, bekommen Sie den markierten Bereich einer Web-Seite auf Mausklick vorgelesen. In Abbildung 1 sehen Sie das Desktop Environment XFce [7], bei dem hierzu lediglich ein auserkorenes Plätzchen mit der rechten Maustaste angestoßen werden muss. Schon öffnet sich eine Dialogbox, in der Sie obigen Mammutbefehl bequem unterbringen. Noch ein passendes Icon auswählen, dem Kind einen Namen spendieren (hier select2snd), und fertig ist Ihr vollautomatischer Sprecher.
Leider wissen nicht alle Programmierer um die Vorzüge des X-Clipboards (das zwischen einfach selektiertem Text und mehreren Speichern, genannt (primary) selection, unterscheidet). Und so gibt es wenige Anwendungen, bei denen Sie zusätzlich zum Markieren mit der Maus aus dem Pulldown-Menü den Eintrag Copy wählen müssen, damit der Text auch im relevanten Teil des Clipboards landet. wxpaste kann sich seine Informationen allerdings auch aus jedem anderen Winkel der Zwischenablage holen, wie ein Blick in die Manpage oder der Aufruf wxpaste --help verraten. (pju)
| Kasten 1: Zeitansage |
|
Öffentliche Plätze beherbergen meist eine Uhr. Fehlt diese, wird man prompt angesprochen: "Entschuldigung, könnten Sie mir sagen, wie spät es ist?". In der Regel wird der Zeitlose daraufhin eine Antwort an seine Lauscher, und nicht ein Ziffernblatt vor seine Photozellen bekommen. Solcherlei bewährtes Verhalten lässt sich mit Hilfe von MBROLA auch dem Desktop beibringen: Ist Ihre Desktop-Uhr einmal vom Fensterdschungel überwuchert, könnten Sie zwar das Unkraut mit unzähligen Fingerbewegungen jäten, doch einfacher ist es sicherlich, die Zeit auf einen einzigen Mausklick hin gesprochen zu bekommen. date ist der Shell-Befehl, der sämtliche Informationen zu Datum und Uhrzeit parat hat. So gibt ein date +%H die aktuelle Stunde aus und ein date +%M die überzähligen Minuten. Damit alleine ist es jedoch nicht getan: Zusätzlich sollte die Ansage mitteilen, dass es sich bei diesen Zahlen um Stunden und Minuten handelt (der date-Befehl liefert schließlich nur nackte Zahlen). Der erwünschte Wortlaut lässt sich daher mit folgendem Konstrukt zusammenstricken: jo@planet ~> echo `date +"%H"` "Uhr und" `date +"%M"` "Minuten" 17 Uhr und 08 Minuten Diese Ausgabe kann nun wie gewohnt per Pipe oder in einem Skript an txt2pho und MBROLA geschickt werden, womit das Ganze wiederum in ein Startmenü eintragbar bzw. als Programm-Icon auf dem Desktop ablegbar wird. Die Zahl "17" spricht MBROLA hierbei bemerkenswerter Weise nicht als "eins sieben", sondern wirklich als "siebzehn" aus. Anders die "08" -- diese wird wirklich als "null acht" betrachtet. Allerdings stellt dies in unserem Anwendungsfall eher einen Schönheitsfehler als einen echten Mangel dar. Versierte Anwender können selbst ein Skript basteln, das mit if-Abfragen und dem Tool sed Kosmetik betreibt. |
| Infos |
[1] http://tcts.fpms.ac.be/synthesis/ |
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.
Druckerfreundliche Version |
Feedback zu dieser Seite
|
Datenschutz |
© 2010 Linux New Media AG |
Last modified: 2008-04-22 13:54
[Linux-Magazin]
[LinuxUser]
[EasyLinux]
[Linux-Community]
[Ubuntu User]
[Linux Technical Review]
[Linux Magazine]
[Linux Pro Magazine]
[Ubuntu User]
[EasyLinux Poland]
[Linux Magazine Poland]
[Linux Magazine Brasil]
[EasyLinux Brasil]
[Linux Magazine Spain]