Was tut man, wenn man täglich eine bis eineinhalb Stunden alleine im Auto sitzt? Radio hören ist nicht schlecht, aber man kann die Zeit auch sinnvoller nutzen und all die Vorträge anhören, für die man sich zu Hause doch nie die Zeit nimmt.
Wenn man sich ein Radio zulegt, das MP3 abspielen kann (z.B. das recht günstige VDO CD 139 MP3), hat man erstmal ausgesorgt - auf eine CD passen schliesslich Stunden. Oder man brennt die Vorträge einzeln auf eine Audio-CD. Ich habe auch gehört, es gäbe Adapter, über die man einen MP3-Player an ein Autoradio anschliessen kann. Möglichkeiten gibt es genug!
Nur: was tun, wenn ein Ende
absehbar ist? Man ist durch mit den Vorträgen, die man auf CD
hat oder bringen kann? Ich dachte mir: Man müsste sich doch
Bücher vorlesen lassen können! Und
tatsächlich, nach ein bisschen Bastelei klappt es wunderbar: man
kann PDF-Dateien sehr leicht in MP3 konvertieren.
Alles, was man dafür braucht, bekommt man kostenlos (ich sag's aber gleich: das Ergebnis ist entsprechend ...):
Das wäre eigentlich schon alles. Aber ich habe noch Tools geschrieben, die zusätzlich zum Einsatz kommen:
Ein Beispiel: beispiel.mp3
Wie schon angedeutet - man darf von Tools, die es umsonst gibt nicht erwarten, dass die Ausgabe klingt wie Elmar Gunsch. Man merkt schon deutlich, dass die Stimme künstlich ist, aber so schlecht ist sie auch nicht, oder? Das Tempo ist ein wenig verlangsamt, damit man sich im Auto nicht all zu sehr darauf konzentrieren muss, das Gesprochene zu verstehen. Aber Geschwindigkeit und Tonhöhe kann man sehr leicht variieren.
An dieser Stelle verabschiede ich mich von denjenigen, denen die erzielte Qualität nicht ausreicht.
Den anderen erkläre ich jetzt, wie es funktioniert.
Dieses Tool sollte schon vorhanden sein. Wer eine Distribution benutzt, die es nicht mitbringt, weiss sicher auch, wo und wie er es bekommt ;-)
Leider bedeutet die Installation dieser Pakete (Download über die Links oben; ich empfehle die männliche Stimme de6) einiges an Handarbeit, die den Maus-und-Fenster-Linuxer abschrecken wird - dafür hat man hinterher aber auch begriffen, wie alles funktioniert und zusammen hängt. Man kann damit nämlich auch alles mögliche andere machen als nur PDFs in MP3s wandeln.
Diese beiden Pakete installieren wir also gemäss "Lesestunde" oder "SprachAusgabe"; das sind zwei sehr gute Artikel über die Thematik. Allerdings würde ich die Dinge nicht in /usr/local installieren, sondern in /opt, aber das ist Geschmackssache.
Wer möchte, kann die
Filter, die txt2pho
mitbringt (numfilt,
pipefilt,
preproc)
auch installieren. Ich rate für den Augenblick jedoch davon ab.
Für lame gilt dasselbe wie für pdftotext.
Im Grunde hat man damit schon alles, was man für die Konvertierung braucht. Daher empfehle ich an dieser Stelle, mit dem bisher Installierten erstmal ein wenig zu experimentieren. Wenn es bisher nämlich Probleme gibt, klappt auch alles folgende nicht. Also: ausprobieren!
Funktioniert alles, geht es weiter mit:
Vorsicht! msfilter.ini enthält Umlaute; die Datei muss daher ggf. an die Locale des Zielsystems angepasst werden.
Da jetzt alles Nötige installiert ist und hoffentlich funktioniert, können wir daran gehen, einen ersten Text zu konvertieren.
Es eignen sich selbstverständlich nicht alle Texte gleichermassen zur Konvertierung. Am besten klappt es natürlich mit solchen, die von A bis Z aus einfachem Text bestehen. Kompliziertes Layout, Tabellen und dergleichen führen zu schlechten Ergebnissen. Seitenzahlen, Kolumnentitel, Anmerkungen am Seitenende etc. sind nicht verhängnisvoll, machen aber beim Vorbereiten des Textes Arbeit.
Wir nehmen die Datei test.pdf und wandeln sie mit pdftotext in eine Datei mit einfachem Text um:
$ pdftotext -nopgbrk test.pdfDieser Befehl erzeugt die Datei test.txt, die nur noch den in test.pdf enthaltenen Text enthält, keine grafischen Elemente mehr. Der Parameter -nopgbrk sorgt dafür, dass auch keine Seitenvorschübe (das Zeichen ^L) im Ergebnis enthalten sind. Mit weiteren Parametern kann man dafür sorgen, dass nur bestimmte Seiten extrahiert werden (bei Bedarf siehe dazu die man-Page von pdftotext).
Damit hätten wir jetzt den Ausgangstext vorliegen.
Zwar werden wir später mit msfilter.pl einiges automatisiert verbessern, aber es hilft nichts: Zunächst müssen wir uns den Ausgangstext ansehen, ob irgend welche störenden Elemente drin sind. Unter anderem sollte man achten auf
Wo wir den Text schon im Editor haben, speichern wir jedes Kapitel in eine eigene Datei ab. Da für jede Textdatei eine eigene MP3-Datei erzeugt wird, fördert das die Übersicht (so bekommt etwa jedes Kapitel einen eigenen ID3-Tag mit Titel) und die MP3-Dateien werden auch nicht zu riesig.
Der Filter msfilter.pl nimmt elegant ein paar Veränderungen vor. Dabei bezieht er seine Weisheit zum einen aus ein paar Regeln, die ich direkt im Script hinterlegt habe (wer eines dieser Features nicht haben will, kann die entsprechende Anweisung einfach aus dem Script streichen):
Zum anderen, und deshalb erwähne ich das hier, liest er aber auch eine Tabelle mit Ersetzungsregeln: die Datei msfilter.ini. Man sollte an dieser Stelle prüfen, ob die Regeln in dieser Datei zum Text passen. Die Datei enthält folgendes:
Beachte: die Datei enthält keine gewöhnlichen Strings, sondern reguläre Ausdrücke, die Perl versteht. Auch wer die Syntax nicht kennt, bekommt aus den vorhandenen Beispielen wahrscheinlich eine Idee, wie das mit den regulären Ausdrücken funktioniert.
Ich habe Komfort versprochen - hier ist er:
Wir erzeugen jetzt eine INI-Datei, die die Texte, die wir konvertieren, beschreibt. Diese Beschreibung beeinflusst den Konvertierungsprozess - wir können damit z.B. Tonhöhe und Sprechgeschwindigkeit fest legen. Dann werden aus dieser Beschreibung auch ID3-Tags erzeugt, so dass sich das Endergebnis auch in einem MP3-Player sehen lassen kann.
Sagen wir, wir hätten die Dateien test_01.txt, test_02.txt, test_03.txt, test_04.txt und test_05.txt vorliegen. Für diese Dateien erzeugen wir eine INI-Datei des Namens test.ini. Das ist wichtig: Die INI-Datei muss so heissen wie die Textdateien ohne den Unterstrich und die Nummerierung. Oder anders herum: Die Namen der Textdateien müssen alle enden auf einen Unterstrich und eine Nummerierung (ein- oder zweistellig ist egal).
Die exemplarische INI-Datei, wenn wir z.B. diese Webseite vertonen wollten, wird zunächst folgendes enthalten:
Artist=Martin Schweikert
Album=Sprachsynthese
Year=2004
Title01=Die Idee
Title02=Was braucht man dafür?
Title03=So hört es sich an
Title04=Installation der benötigten Software
Title05=Die Konvertierung an einem Beispiel erklärt
Das sind Angaben, die in die ID3-Tags fliessen. Der Profi wird vermuten, dass hier ID3-Tags der Version 2 erzeugt werden, denn einige Titel sind länger als 30 Zeichen. Will man das nicht, dann schreibt man in eine beliebige Zeile die Angabe
ID3=1
In diesem Fall findet später eine Prüfung statt, ob auch alle Angaben kurz genug sind.
Drei Angaben werden automatisch hinzu gefügt:
So viel zur Kosmetik der ID3-Tags.
Eine wichtige Angabe muss wahrscheinlich noch sein: die zu verwendende Stimme. Ist das nicht /opt/txt2pho/data/de6 (so der Default in txt2mp3.sh), muss Ort und Name der Stimmen-Datenbank angegeben werden. Das Beispiel für eine weibliche Stimme, wenn die Installation streng nach "Lesestunde" vorgenommen wurde, wäre:
Stimme=/usr/local/mbrola/txt2pho/data/de6
Will man die Tonhöhe oder die Sprechgeschwindigkeit beeinflussen, kann man das mit den Parametern Frequenz bzw. Tempo tun. Um die Defaults von mbrola zu benutzen, würde man schreiben:
Frequenz=1.0
Tempo=1.0
Für meinen Geschmack wäre das zu hoch und zu schnell, aber das kann ja jeder einstellen, wie er will.
Zu guter Letzt: wo wir uns doch
so viel Mühe mit dem Filter gemacht haben, legen wir noch
fest, dass er auch benutzt wird. Den vollen Nutzen haben wir von
Filter=/opt/txt2mp3/msfilter.pl /opt/txt2mp3/msfilter.ini
Das bedeutet: benutze den Filter /opt/txt2mp3/msfilter.pl samt den Regeln in /opt/txt2mp3/msfilter.ini. Wollten wir die Regeln nicht benutzen, genügte
Filter=/opt/txt2mp3/msfilter.pl
Hier kann man aber aus dem
Vollen schöpfen: Wenn man alles ausnutzen möchte, was
die Filter hergeben, kann man auch eintragen (aber unbedingt an die
eigenen Gegebenheiten anpassen!)
Filter=/opt/txt2mp3/msfilter.pl /opt/txt2mp3/msfilter.ini | pipefilt | numfilt | preproc /usr/local/Sprachsynthese/txt2pho/preproc/Rules.lst /usr/local/Sprachsynthese/txt2pho/preproc/Hadifix.abk
Eine
sinnvolle INI-Datei wäre test.ini
Wenn alles korrekt installiert
und konfiguriert ist, kommt jetzt der Moment, wo wir
$ txt2mp3.sh test.initippen, uns genüsslich zurück lehnen und zusehen, wie unsere Texte in MP3s konvertiert werden. Am Schluss haben wir die Dateien test_01.mp3, test_02.mp3, test_03.mp3, test_04.mp3 und test_05.mp3 vorliegen.