..unter Linux ist auch möglich.
Bin vor einigen Jahren darauf gestossen und möchte es hier Aktuell präsentieren wie man das bewerkstelligt.
"Der Tux kann lesen".
Im Linux Magazin gab es einen sehr ausführlicher Artikel dazu. Nur Leider ist der nicht mehr Online, stimmte auch nicht mehr ganz, einige Links waren auch nicht mehr erreichbar und so weiter. Darum möcht diese Wissen und meinen kleinen Teil erhalten und mit euch teilen. Also dann los.
Linux Magazin > Jahrgang 2000 > Ausgabe 05 > Sprachsynthese
Das ganze funktioniert im mehreren Stufen.
Hinweis für alle die andere Artikel zu diesem Thema kennen:
Die Funktion von numfilt und pipefilt, wird von preproc komplett übernommen und in sofern sind sie nicht mehr nötig. Die ersten zwei Programme werden oft in älteren Veröffentlichungen noch oft verwendet und auch das ersetzen von dem @-Zeichen das alles ist aber nicht nötig.
Hinweis zu msfilter.pl:
Wobei es mitlerweile Probleme gibt mit dem Zeichensatz UTF-8 welches auf vielen Linuxsysteme schon verwendet wird. Zum Beispiel werden dadurch die deutschen Umlaute nicht richtig verarbeitet. Mit msfilter.pl hab ich das Problem, zumindest für die deutschen Umlaute äöüß umgangen indem diese Zeichen wie im Kreuzworträtzel geschreiben werden, also z.B. ä durch ae ersetzt werden.
Man braucht das Programm TXT2PHO das findet man unter [2] in diesem Paket sind alle Pakete einhalten die man zu Erstellung der *.pho Dateien braucht. numfilt findet man auf der gleichen Seite wie TXT2PHO unten bei Anwendungen.
Dann braucht man das Programm mbrola das man auf der Homepage [3] zuhause ist. Im Download Bereich [4] findet dann die bin Dateien für mbrola und die Sprachpakete. Die Sprachpakete beginnen mit einem DE und dann eine Zahl. Dahinter steht noch ein "male" für männliche Stimme "female" für weibliche Stimme. Man braucht nicht alle eine genügt.
[2] http://www.ikp.uni-bonn.de/forschung/phonetik/sprachsyntheseNachdem die Pakete runtergeladen sind. Packt man als erstes das Paket von txt2pho aus. In diesem Ordner sind noch mal zwei gezipte Dateien die man auch gleich auspackt. Das Programm preproc muss erst noch übersetzt werden. Dazu wechselt man in diesen Ordner und ruft in der Konsole die folgenen Befehle auf:
mkdir obj
make
Nachdem das Programm übersetzt ist verschiebt man die 4 Programmedateien (txt2pho, pipefilt, numfilt, preproc) nach /usr/local/bin dafür muss man als root angemeldet sein! Wer sie nicht in die Ordner findet kann auch find bennutzen .
Als nächstes legt man das Verzeichnis txt2pho in /usr/local an. In diesen verschiebt man den Ordner data dort hin. Danach von dem Ordner preproc die zwei Dateien mit dem Namen Hadifax.abk und Rules.lst nach /usr/local/txt2pho/preproc den man zuvor anlegen werden muss. Als letzes noch des Verzeichnis /usr/local/txt2pho/voices an das später gebraucht wird.
Als nächstes die Konfiguation des Programms txt2pho diese Datei befindet sich an drei Stellen einmal unter:
/etc/txt2phorc
/usr/local/txt2pho/preproc/hadifix.cfg
~/.txt2phorc
Der Inhalt der Datei:
DATAPATH=/usr/local/txt2pho/data/ INVENTORY=male INVPATH=/usr/local/txt2pho/data/ TREE=newtree PROMCOMP=1 REDUCTION=3 SPEECHRATE=1.15 USENET=2
so das Paket von txt2pho ist installiert. Nun können wir uns mbrola zuwenden.
Man pakt das Paket von mbrola aus, wechselt in den Ordner, sucht ist die richtige binäre Datei aus (In den meisten fällten 'mbrola-linux-i386') benennt sie um in mbrola und verschiebt sie nach /usr/local/bin. Danach packt man das Sprachpaket de...zip aus und verschiebt den Ordner nach /usr/local/txt2pho/voices. Fertig!!!
Das diese ganze Programme auch zusammen arbeiten, hab ich mir ein Skript geschieben (leicht abgewandelt).
Mein "sag-was" Skript:
#!/bin/sh
#
# sag-was
binordner=$"/usr/local/txt2pho"
hilfe()
{
echo "############################################
Ein Skript zur Umwandlung von Text zu Ton
$ sag-was -2 -f=AUSGABEDATEI EINGABEDATEI
-1, -2, -3 ... Sind die verschiedenen Stimmen grade Zahlen sind weibliche
Stimmen die ungeraden die männlichen Stimmen.
-f= Möglichkeit die Datei zu speichern um sie später anzuhören.
(NEU! die Datei wird in gleich in eine *.ogg Datei& nbsp;umgewandelt)
-h Um die Hilfe anzuzeigen
############################################"
exit
}
# default Sprache
# sprache "male-de1"
t2p='-m'
mbr='-f1.25 -t0.9 -l 15400'
mbf="$binordner/voices/de1/de1"
# wenn keine Datei angegeben nimmt er den STANDARD-IN
file="/dev/stdin"
# Mbrola gibt die Daten als *.au Datei aus
mbo="- -.au"
# Spiel die Datei wenn kein -f=DATEINAME angegeben ist.
datei="nein"
while test -n "$1"
do
case $1 in
-1) # sprache "male-de1"
& nbsp; t2p='-m'
mbr='-f1.25 -t0.9 -l 15400'
mbf="$binordner/voices/de1/de1";;
-2) # sprache "female-de2"
t2p='-f'
mbr='-f1.25 -t1.0 -l 19300'
mbf="$binordner/voices/de2/de2";;
-3) # sprache "male-de3"
t2p='-m'
& nbsp; mbr='-f1.20 -t0.9 -l 19000'
mbf="$binordner/voices/de3/de3";;
-f=*) dateiname=$(echo $1 | sed -e 's/^-f=//g' )
datei="ja";;
-h) hilfe ;;
-*) echo "ungültige Option '$1'"
exit ;;
*) file="$1";;
esac
shift
done
if [ $datei = "ja" ]
then
cat $file | sed 's/@/ ät /g' | preproc \
"$binordner/preproc/Rules.lst" "$binordner/preproc/Hadifix.abk" | \
txt2pho $t2p | mbrola $mbr $mbf $mbo | sox -t .au - "$dateiname.ogg"
fi
if [ $datei = "nein" ]
then
# Ausgabe mit play
cat $file | sed 's/@/ ät /g' | preproc \
"$binordner/preproc/Rules.lst" "$binordner/preproc/Hadifix.abk" | \
txt2pho $t2p | mbrola $mbr $mbf $mbo | play - -t au
# Ausgabe mit aplay
#cat $file | sed 's/@/ ät /g' | preproc \
#" $binordner/preproc/Rules.lst" "$binordner/preproc/Hadifix.abk" | \
#txt2pho $t2p | mbrola $mbr $mbf $mbo | aplay - -t au
fi
Ich hab bis jetzt 3 Sprachpakete installiert (de1, de2, de3).
Das Skript wird hat eine Option die es ermöglicht die Stimme auszuwählen.
-1 für die erste Stimmt (männlich) -2 für eine weiblche Stimme -3 für wieder eine männliche Stimme. -f= um es in eine Datei zu speicher zu können z.B. grey@grey:~$ sag-was -2 Textdatei -f=Sounddatei.au
ein Beispiel:
grey@grey:~$ sag-was -2 Textdatei
Bei txt2pho steht eine Option -m oder -f da die bestimmt ob male/female also männliche- bzw. weibliche Stimme.
Bei mbrola sind mehrere Optionen mit denen man die Stimmen verändern kann. Dort ist herumspielen angesagt bis es einem gefällt. Ihr könnt es ruhig ändern .
Beim letzten der Sprachvarianten hab ich es so abgeändert das es als Datei ausgegeben wird. Mit audacity? oder Konsole mit "play DATEINAME" kann man sie z.B. abspielen.
Viel Spass damit
Der Spaß geht weiter, denn man kann sich mit dem Teil auch Webseiten vorlesen lassen. Dazu wird einfach das Skript saghtml im Verzeichnis ~/bin erstellt und ausführbar gemacht.
#!/bin/sh
# Mit Elinks
#elinks -dump -no-numbering "$2" | sag-was "-$1"
# Oder mit Lynx
lynx -dump -nolist "$2" | sag-was "-$1"
# Oder gleich als *.ogg im XMMS
#elinks -dump -no-numbering "$2" | sag-was "-$1" -f=/tmp/sag-was && xmms /tmp/sag-was.ogg &>/dev/null
Der Aufruf erfolgt mit saghtml <Stimme> <URL>.
Beispiel: saghtml -2 http://pengupedia.de/Sprachsynthese liest genau diese Seite vor ;)