[HOWTO] deutsche TTS mit MBROLA

HobbyStern

Aktives Mitglied
Mitglied seit
5 Dez 2005
Beiträge
1,844
Punkte für Reaktionen
0
Punkte
36
Dieses Howto bezieht sich im Grunde auf einige gefundene Quellen im Internet und verfolgt das Ziel "schnell zu erstellen" , wer mehr wissen will muss halt suchen. Es besteht, wie immer - kein Anspruch auf Vollständigkeit!

Voraussetzung : Debian, Linux auf x86 und bei Bedarf Asterisk

Schritt 1 - Vorbereiten, MBROLA und Komponenten besorgen

Wir erzeugen ein Verzeichnis freier Wahl, ich nehme immer ganz gerne:

Code:
cd /usr/src
mkdir mbrola
Wir schauen nach ob SOX installiert ist:

Code:
apt-get install sox
Wir holen das MBROLA-BINARY

und hat man die Wahl : (mehr Auswahl hier)
männliche Stimme (meine Wahl)
weibliche Stimme

Nun holen wir uns TXT2PHO (das setzt ASCii Text in phonetischen Text um)
Die Anwendung NUMFILT setzt nun noch Zahlen in ebenso phon. Text um)

Entpacken alles und löschen die Archive...

Code:
linux: unzip de2-990106.zip
linux: unzip mbr301h.zip
linux: tar -xzf numfilt-0.1.tar.gz
linux: unzip txt2pho.zip
linux: rm *.zip
linux: rm *.tar.gz
Schritt 2 - Erstellen

Text2Pho/Pipefilt/Prepoc/Numfilt vorbereiten, wir befinden uns IM Verzeichnis MBROLA unserer Wahl, als zBsp.: "cd /usr/src/mbrola"

Code:
chmod a+x txt2pho/txt2pho
cd txt2pho/pipefilt
g++ -o pipefilt pipefilt.cc
cd ..
cd prepoc
make clean && make
cd ../../numfilt-0.1
gcc -o numfilt numfilt.c
Jetzt erstellen wir symbolische Links zum späteren arbeiten:

Code:
 ln -s /usr/src/mbrola/txt2pho/txt2phorc /etc/txt2pho
cd /usr/local/bin
ln -s /usr/src/mbrola/mbrola-linux-i386 mbrola
ln -s /usr/src/mbrola/txt2pho/txt2pho txt2pho
ln -s /usr/src/mbrola/txt2pho/numfilt-0.1/numfilt numfilt
ln -s /usr/src/mbrola/txt2pho/preproc/preproc preproc
ln -s /usr/src/mbrola/txt2pho/pipefilt/pipefilt pipefilt
Schritt 3 - Die Konfiguration

Code:
nano /etc/txt2pho
Nach entfernen aller Kommentare sieht meine so aus (zu ändernde sind FETT):

Code:
DATAPATH=[B]/usr/src/mbrola/txt2pho/data/[/B]                                                                                                                              
INVPATH=[B]/usr/src/mbrola/txt2pho/data/ [/B]                                                                                                                              
TEMPPATH=/tmp/
INVENTORY=[B]male[/B]
DEBUGLEVEL=0
NEWTREE=newtree
REDUCTION=1
PROMCOMP=1
SPEECHRATE=1.15
USENET=3
Nun können wir zBsp. so eine WAV Datei erstellen :

Code:
echo “Lies mich vor.” | txt2pho - | mbrola /usr/src/mbrola/de2/de2 - /tmp/test.wav
Das ganze kann nunmehr durch ein Shell-Skript "Speak.sh" (Achtung - Pfade einstellen!) vereinfacht werden zu diesem hier :

Code:
echo “Endlich fertig.” | speak

Alternativ : 
speak < meine_datei .txt
Der Rest ist kinderleicht und mit Asterisk machbar, Danke an die drei vorherigen Authoren [1] [2] [3] aus deren Beiträgen ich diese Zusammenfassung erstellt habe.

EDIT: Einziger Wehrmutstropfen, ich kann aktuell noch nicht direkt aus Mbrola WAV Files erstellen und in Asterisk einlesen ohne SOX zwischenzuschalten, es wäre natürlich ideal wenn dieser Weg umgangen werden könnte, MBROLA setzt per default 16khz ein, wir brauchen imho 8khz.

Es geht aktuell nur mit diesem Schritt :

Code:
[FONT=monospace]sox foo-in.wav -r 8000 -c 1 -s -w foo-out.wav resample -ql [/FONT]

Obwohl mbrola einen Schalter für die Frequenz mitbringt, nur ich habe keine Manuals für 8khz gefunden?!

LG Stefan
 
Zuletzt bearbeitet:
Hi Stefan,

erstmal danke für dein HowTo. Ich habe es eben mal ausprobiert und erhalte folgenden Fehler.

Code:
root@asterisk:/usr/src/mbrola/numfilt-0.1# gcc -o numfilt numfilt.c
numfilt.c: In function 'main':
numfilt.c:29: warning: incompatible implicit declaration of built-in function 'strchr'
numfilt.c:40: warning: incompatible implicit declaration of built-in function 'strlen'
numfilt.c:24: warning: return type of 'main' is not 'int'
numfilt.c: In function 'CheckDigits':
numfilt.c:65: warning: incompatible implicit declaration of built-in function 'strlen'
numfilt.c: In function 'TenToNintynine':
numfilt.c:198: warning: incompatible implicit declaration of built-in function 'strlen'

ich hoffe das passt trotzdem. Es sind ja nur Warnungen.
Wenn ich jetzt
Code:
echo "Lies mich vor." | txt2pho - | mbrola /usr/src/mbrola/de2/de2 - /tmp/test.wav
aufrufe, dann erzeugt er eine 44Bytes große Datei. Die sich nicht abspielen lässt.

Was habe ich denn falsch gemacht? Kann ich die Schritte irgendwie einzeln nachvollziehen um zu sehen wo der Fehler liegt?

Viele Grüße
Chris
 
Hi Chris,

ich denke das diese Warning zu ignorieren sind.

Ich habe mir das Test File mal auf meinen Windows PC geladen - problemlos abspielbar. Ich lege hier in den Anhang mein TEST File, Mbrola spricht diesen Text :

Hier bei mir sind die Outputs brauchbar, wenn auch nicht sehr wohlklingend. Die A3 ist aktuell sehr voll. Wir haben30 Grad. Die Boerse ist heute explodiert. Danke. Test Ende.
Teste es doch mal mit einem beliebigen anderen Text...

Als Gegenbeispiel der gleiche Text mit Cepstral im Anhang...

LG Stefan
 

Anhänge

  • ouput.tar.gz
    274 KB · Aufrufe: 37
  • cepstral-test.tar.gz
    238.2 KB · Aufrufe: 17
Kleiner Edit :

Ich habe nunmehr alle Sprachausgaben hier von Cepstral und dem "Bitte registrieren Sie mich" auf Mbrola umgestellt - in meinem Szenario istr Mbrola sogar besser, da es klarer spricht (akzentfreier).
 
Update - seitdem hier einiges im Business Bereich vorgelesen wird (Inventuren/Abverkaufsquoten/Umsätze etc) ist mein Asterisk wieder mit Cepstral verheiratet, diesmal hat er sogar die 25$ für den Ehering aufgebracht.

:)

Ein interessantes Projekt ist das AT&T Lab und seine TTS (Google "At&T TTS")

LG Stefan
 
Hi!

Welche Version verwendest du denn? Katrin oder Matthias?
Ich überlege mir auch eine Version zu kaufen, da ich im Zuge meiner Hausautomation noch ein wenig mehr mit Text2Speach machen möchte.
Z.B. Anrufe wenn ein Rauchmelder ausgelöst hat oder ein Bewegungsmelder wenn ich im Urlaub bin....

Schade das man für Windows und/oder Linux zwei unterschiedliche Versionen kaufen muss. :-(

Viele Grüße
Chris
 
Hi Chris,

solange es im privaten Bereich bleibt ist Mbrola IMHO ausreichend, man kann das ganz gut verstehen - hört sich nur schwierig an wenn man es Leuten präsentiert die von der Entstehung keine Ahnung haben und es einfach nur "hören müssen".

Ich habe hier Kathrin für Linux. Pflegeleicht und gut, hat nur immer wieder Probleme mit "-" oder "%" , da muss man vorher mit sed ran und alle Sonderzeichen in lesbaren Text umwandeln, aber das muss man bei Mbrola ebenfalls.

Ich mache es hier so das - sobald eine Excel Datei gesichert wird, der Output einfach in eine CSV Datei geschrieben wird - die wird dann zum Asterisk übertragen und dort läuft stündlich ein Skript welches nach CSV sucht, das ganze in SED gibt und Sonderzeichen lesbar macht, dann ab nach Cepstral und fertig ists. Eigentlich sehr einfach und auch recht leicht übertragbar.

LG Stefan

LG Stefan
 
Ich finde mbrola auch furchtbar. Ziemlich aufwendige Installation. Und trotz der 7 deutschen Sprachsamples (de1-de7) und rumspielen an txt2pho (/etc/txt2pho) fand ich das Ergebnis immer sehr unbefriedigend. Ich dachte, es gäbe keine bessere, kostenlose TTS-Engine für Linux... bis ich seit wenigen Tagen stolzer Besitzer eines Android-Smartphones bin. Ich habe die kostenlose aftermarket Firmware "cyanogenmod7" installiert und da ist eine TTS-Engine dabei (vielleicht ist sie auch so bei jeden android dabei?), die mir deutlich besser gefällt als mbrola! Sie heißt "SVOX pico".

Da schau ich mal eben auf meinem asterisk-server im debian repository nach und tatsächlich finde ich sie auf anhieb (sind in "non-free")! Habe diese drei Pakete installiert:

Code:
Richte libttspico-data ein (1.0+git20100205-2.1) ...
Richte libttspico0 ein (1.0+git20100205-2.1) ...
Richte libttspico-utils ein (1.0+git20100205-2.1) ...

Und was soll ich sagen: Es funktioniert auf anhieb und IMHO besser als mbrola:

Code:
`--> pico2wave -l=de-DE -w=a.wav "Das ist ein Test"
`--> aplay a.wav
Wiedergabe: WAVE 'a.wav' : Signed 16 bit Little Endian, Rate: 16000 Hz, mono

Ich werde gleich mein asterisk umsticken und mbrola rauswerfen!


NACHTRAG: Ich sehe gerade, für Android gibt es auch noch zwei weitere deutsche Stimmen von svox. Die sind allerdings kostenpflichtig und kosten wohl knapp über 2EUR. Wenn ich die auch auf dem PC verwenden kann, dann werde ich mir das überlegen. Hier kann man ein Beispiel der Stimmen hören
 
Zuletzt bearbeitet:
Hallo Kermit,

vorweg - der Link ist "defekt" - nimm diesen hier!

Petra hört sich ja grässlich an, aber Markus ist okay. Hast Du die Möglichkeit ihn etwas umgangssprachlicheres (deutsch) aussprechen zu lassen und hier zu posten?

und IMHO besser als mbrola

Das ist ja auch einfach :lol: Mbrola ist eines der furchtbarsten Dinge die ich je gehört habe...

Wie Du oben lesen konntest - ich mag cepstral immer noch sehr gerne..am besten ist IMHO AT&T

LG Stefan
 
Ich habe die beiden kostenpflichtigen Stimmen leider nicht. Ich denke, dass sie auf Nicht-Smartphones auch nicht so einfach zu verwenden sind. Habe jedenfalls noch nichts gefunden, wie man sie nutzen könnte.
Das normale, kostenlose pico reicht mir für den Heimgebrauch nun aber auch erstmal. Sie klingt etwas künstlicher als die beiden kostenpflichtige Beispiele, aber wie gesagt immer noch besser als mbrola. Andere kostenpflichte TTS-Engines sind natürlich noch deutlich besser. Irgendwo gab es ja so eine Online-Umwandlung per Webformular, um sich feste Ansagen zu generieren. Da reicht die deutsche SVOX-Engine bei weitem nicht ran.
Bei englischen Begriffen im deutschen Texten funktioniert die pico-Stimme allerdings nicht so gut. Das konnte mbrola wiederrum besser.
cepstral ist mir zu teuer für die Spielereien zu Hause.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.