Lass' deinen Computer sprechen mit "text-to-speech" oder wie man einen Sprachsynthesizer unter Linux (i386) zum Laufen bringt.

Text-to-Speech gentoo

http://gentoo-wiki.com/HOWTO_let_your_Gentoo_speak_with_speechd

Wie funktioniert text-to-speech

text-to-speech besteht grundsätzlich aus zwei Applikationen:

Das txt-2-pho-Programm macht aus dem Input und einer Sprach-Datenbank eine Phone-Datei, die der Sprach-Synthesizer interpretiert und schließlich an einen Player ausgeben kann. Um nähere Informationen über die Funktion von text-to-speech zu erhalten, sollte man die Homepage des MBROLA-Projekts besuchen (http://tcts.fpms.ac.be/synthesis/mbrola.html).

Eine Alternative zum oben genannten ist festival.

Installation

Was brauche ich alles

Also es wird folgendes benötigt:

Für den Anfang reicht es, wenn ihr euch erstmal für eine einzige entscheidet, wie ihr die Stimmen wechseln könnt, zeige ich später.

Und jetzt installieren...

Wenn alles runtergeladen ist, geht's ans installieren. Als erstes wird bplay installiert:

tar xvfz bplay-0.991.tar.gz
cd bplay-0.991
make
su -c "cp bplay /usr/local/bin"

Und schon ist bplay verfügbar. Weiter gehts mit dem MBROLA binary:

unzip mbr301h.zip
su -c "mv mbrola-linux-i386 /usr/local/bin"

Ein Script erwartet den Filenamen "mbrola", deshalb fehlt noch ein

ln -s /usr/local/bin/mbrola-linux-i386 /usr/local/bin/mbrola

(Den restlichen entpackten Datenmüll kann man natürlich löschen, genauso wie bei bplay...)

Nun wäre auch MBROLA bereit. Jetzt noch text2pho:

unzip txt2pho.zip 
cd txt2pho
tar xvfz numfilt-0.1.tar.gz
su -c "mv txt2pho /usr/local/bin"
cd numfilt-0.1
gcc -o numfilt numfilt.c
su -c "mv numfilt /usr/local/bin"

Jetzt sollte man ein Verzeichnis erstellen, in dem das ganze letztendlich liegen soll. Ich nehme dazu "/usr/local/txt2speech":

su -c "mkdir /usr/local/txt2speech"

Dann noch die restlichen Daten von txt2pho ins Verzeichnis legen:

su -c "cp -r data/ /usr/local/txt2speech"

Jetzt wechselt nochmal ins Verzeichnis wo ihr die Sprachdateien abgelegt habt. Dann packen wir jetzt noch die Stimme in das Verzeichnis und entpacken sie gleich.

su -c "cp de2-990106.zip /usr/local/txt2speech"
cd /usr/local/txt2speech/
su -c "unzip de2-990106.zip"

Dann machen wir das noch alles für die Anwender verfügbar:

su -c "chmod -R o+rx /usr/local/txt2speech"

Das war es schon mit der Installation.

Konfiguration

.txt2phorc

Diese Dateien sollte jetzt in eurem Homedirectory verfügbar sein. Öffnet diese Datei und verändert folgende Zeilen:

Ändern in:

Dann

Ändern in:

Was ihr jetzt noch braucht, sind zwei Skripte die euch die Benutzung erleichtern sollen.

Soundausgabe mit ALSA

Bei Einsatz von aplay muss das Skript txt2speech.sh noch geändert werden: Statt bplay -b 16 -s 22050 schreibt ihr aplay -r 22050 -f S16_LE.

Wenn ihr die Stimme tauschen wollt, müsst ihr die Datei txt2speech.sh bei folgender Zeile ändern:

Gebt statt "de2" die Stimme an, die ihr runtergeladen habt. Die Stimme muss natürlich dann auch im Verzeichnis "/usr/local/txt2speech/" im entsprechenden Unterverzeichnis sein. Also z.B. wenn ihr Stimme "de3" runtergeladen und entpackt habt, dann müsste die Stimme in "/usr/local/txt2speech/de3/" als "de3" vorhanden sein. Und in der Datei "txt2speech" müsst ihr statt

dann

eintragen.

Man muss auch noch die Datei "/usr/local/txt2speech/data/hadifix.cfg" ändern. Und zwar gibt man bei den ersten beiden Einträgen als Pfad folgendes an:

Jetzt kopiert noch die beiden Skripte nach "/usr/local/bin" damit sie für alle User verfügbar sind:

su -c "mv say /usr/local/bin && mv txt2speech.sh /usr/local/bin"

Und macht sie ausführbar:

su -c "chmod +x /usr/local/bin/say && chmod +x /usr/local/bin/txt2speech.sh"

Nun gebt folgendes ein:

say "Ich habe alles kapiert und richtig gemacht"

Wenn ihr den Satz verstanden habt, dann stimmt das auch. ;)

Ich weiss, dass dieser Text nicht perfekt ist, aber er sollte ja auch nur seinen Zweck erfüllen und auch nicht mehr sein, als eine kleine Richtlinie. Wenn ihr trotzdem Anregungen, Kritik oder Fragen loswerden wollt, dann bitte an RolandHeimpoldinger.

Anwendungsbeispiele

Fortune Sprüche

if [ x"$#" = x"0" ]; then
  file=/dev/stdin
  else
        file=${1}
fi

cat $file | sed 's/@/ ät /g' |  pipefilt | numfilt | preproc /usr/local/Sprachsynthese/txt2pho/preproc/Rules.lst \
/usr/local/Sprachsynthese/txt2pho/preproc/Hadifix.abk | \
txt2pho -m | mbrola -f 0.8 -t1 -l 15000 /usr/local/Sprachsynthese/mbrola/voice/de2/de2 - -.au | \
play - -t au

X-Chat

XChat TTS Script

Licq

In den Optionen unter Ereignisse bei

[x] Ereignis-Kommandos aktivieren
Befehl: say

Jetzt kann man bei Nachricht zb reinschreiben: 'Nachricht von %a'

Die Nachrichten kann man sich afaik nicht vorlesen lassen, ich hab keine Variable für den Nachrichtentext gefunden.

Liste mit den Variablen

micq

Bei micq dagegen kann man sich die Nachrichten einwandfrei vorlesen lassen. micq kann man nämlich so einstellen, dass es bei jedem 'event' ein eventscript ausführt. Dazu sucht man in der ~/.micq/micqrc die Optionen 'sound' und 'event' und ändert sie etwa wie folgt:

sound event
event /home/yourhomedir/.micq/eventscript

Nun kann man die Datei /home/yourhomedir/.micq/eventscript etwa wie folgt aussehen lassen:

# to prevent "*" in messages from being transformed
# to a list of files in the current working directory
mkdir -p /tmp/emptydir31415/
cd /tmp/emptydir31415/

# for debugging purposes
echo "eventscript $*" >> $HOME/.micq/eventscript.log

case $5 in
  "msg")
         #/usr/bin/bplay /usr/sounds/Message.wav &> /dev/null;

         # transform micqs encoding to Latin-I
         # alternatively: echo ... | iconv -f UTF-8 -t US-ASCII//TRANSLIT | say ...
         echo "$3 sagt: $7" \
           | sed -e 's/ä/ä/g' \
           | sed -e 's/ü/ü/g' \
           | sed -e 's/ö/ö/g' \
           | sed -e 's/ß/ß/g' \
           | say - &;;

  "on")
         /usr/bin/bplay /usr/sounds/Global.wav &> /dev/null; 

         # transform micqs encoding to Latin-I
         # alternatively: echo ... | iconv -f UTF-8 -t US-ASCII//TRANSLIT | say ....
         echo "$3 ist online." \
           | sed -e 's/ä/ä/g' \
           | sed -e 's/ü/ü/g' \
           | sed -e 's/ö/ö/g' \
           | sed -e 's/ß/ß/g' \
           | say - &
esac

Dann noch ausführbar machen:

chmod u+x /home/yourhomedir/.micq/eventscript

Die Datei /usr/sounds/Global.wav kann dabei der Sound sein, der beim Original-icq dabei ist. Die Ausführungen von 'sed' ersetzen Umlaute so, dass sie vorgelesen werden können (die encodings von micq und 'say' sind unterschiedlich). Grossgeschriebene Umlaute werden nicht ersetzt, dies kann aber kanonisch erweitert werden.

Fragen

Probleme


Beitragende: RolandHeimpoldinger


KategorieAudio

SprachAusgabe (zuletzt geändert am 2008-03-11 08:20:26 durch L2707)