Lesestunde
MBROLA
Verwertung
Haben Sie einmal die Einstellungen Ihrer Wahl gefunden, möchten Sie sich den obigen Einzeiler sicher nicht jedesmal aus den Fingern saugen. So bietet sich seine Verlagerung in ein kleines Skript namens txt2snd an, das einen String oder eine ASCII-Datei gesprochen an Ihre Schallwandler weiterreicht (Listing 1).
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
@KE:
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.
Komfort²
Noch schöner und komfortabler wird es, wenn man den Inhalt des cut buffer (dieser beinhaltet einen mit der Maus selektierten Text) auf Knopfdruck um die Ohren bekommt. Haben Sie den beliebten Window Manager Window Maker [6] auf Ihre Festplatte gepackt, so besitzen Sie auch das zugehörige Tool wxpaste. Alternativ finden Sie es als Einzelgänger auch auf der Heft-CD, sowohl im Quelltext als auch als fertig übersetztes Binary, das Sie nur noch nach /usr/local/bin/wxpaste kopieren müssen.
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 16
Sobald 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.
Kasten 1: Zeitansage@KL:Ö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/
[2] http://www.ikp.uni-bonn.de/~tpo/HADIFIXforMBROLA.html
[3] http://tcts.fpms.ac.be/synthesis/mbrola/mbrcopybin.html
[4] http://tcts.fpms.ac.be/synthesis/mbrola/mbrtts.html
[5] http://www.amberdata.demon.co.uk/bplay/
[7] Jo Moskalewski: "XFCE", LinuxUser 08/2001, 70 ff.



