Kompilieren
Archivierte Anleitung
Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.
Anmerkung: Die IMS-Dateien sind nicht mehr zu beziehen; das Projekt wurde vollständig eingestellt. Alte Versionen, die z.B. unter 18.04 erstellt wurden sind zwar weiter lauffähig, aber auch das verwendete BOMP-Lexikon ist nicht mehr greifbar.
Artikel für fortgeschrittene Anwender
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Um Festival in der neusten Version, oder auch für weitere Sprachen, u.a. deutsch, verfügbar zu machen, muss das Programm derzeit aus dem Quellcode erstellt werden.
Hinweis:
"The good news, though, is that we're currently putting together a portfolio of dozens and dozens (really!) of voices which will be available to download shortly. Some voices will be available for commercial use only, some for non-commercial use only, and indeed some for both. We envisage all the voices currently on the demo will be available, with the addition of many more. When these are ready, we'll put a link in the demo itself, amongst other things."
Die gute Nachricht ist aber, dass wir gerade dabei sind, eine Auswahl von buchstäblich Dutzenden von Stimmen zu entwickeln, die demnächst zum Download bereitstehen werden. Einige Stimmen werden nur für die kommerzielle Nutzung zu Verfügung stehen, andere nur für nicht-kommerzielle, und einige auch für beides. Nach unseren Vorstellungen werden alle derzeit auf der Demoseite vorgestellten Stimmen erhältlich sein, und darüber hinaus viele weitere mehr. Sobald diese fertiggestellt sind, werden wir unter anderem einen Link auf die Demoseite selbst setzen.
Festival-Projektseite 🇬🇧, die Hoffnung stirbt zuletzt...
Vorbereitung¶
Achtung!
Eine eventuell installierte Festival-Version aus den Paketquellen sollte temporär vor Kompilierung der erweiterten Versionen entfernt werden, da ansonsten die Kompilierung ggf. fehlschlägt!
Die benötigten Abhängigkeiten lassen sich im Terminal[1] installieren:
Befehl zum Installieren der Build-Abhängigkeiten:
sudo apt-get build-dep festival speech-tools
sudo aptitude build-depends festival speech-tools
Festival-Archive¶
Benötigt werden Archive von der Downloadseite ⮷ des Festival-Projekts; theoretisch sollten das Speech-Tools-Archiv sowie das eigentliche Festival-Archiv ausreichen; um allerdings auch andere Sprachen wiedergeben zu können, sollt man alle Archive herunterladen (Stimmen ⮷, Wörterbuchdateien etc.). Seit Dezember 2017 ist auch Version 2.5 verfügbar.
Die Archive von der Projektseite herunterladen und entpacken[2], am sinnvollsten legt man sich einen festival-Oberordner an, in den dann sowohl das Festival-Archiv (als erstes) als auch das Speech-Tools-Archiv entpackt werden. Die weiteren Archive werden dann direkt in den bestehende Festival-Unterordner entpackt, sodass die enthaltenen Verzeichnisse und Dateien in diesen Ordner eingeordnet werden; am Ende dürfen nur die Unterordner festival/speech_tools und festival/festival existieren.
Kompilieren¶
Um das Programm zu kompilieren, werden zunächst im festival/speech_tools-Ordner die Befehle
./configure make
durchgeführt; danach dasselbe im festival/festival-Ordner. Festival 2.4 lässt sich mit den in Ubuntu 16.04 standardmäßig in den Ubuntuquellen vorliegenden gcc-Versionen ohne Weiteres kompilieren. Die unter Ubuntu 18.04 standardmäßig verwendet gcc-Version 7 ist allerdings mit Festival nicht kompatibel; es muss auf eine ältere Version (getestet mit gcc-4.8 und 5) verwendet werden.
Versionen vor 2.4¶
Für ältere Festival- Versionen sollte gcc in Version 4.6 installiert werden. Außerdem muss der symbolische Link /usr/bin/gcc, der ggf. auf gcc-4.8 verweist, direkt auf gcc-4.6.real umgelenkt werden. Damit funktioniert die Erstellung problemlos.
Sprachausgabe-Programm einstellen¶
Wenn es bei der Sprachausgabe zu Problemen kommt entweder in der Datei ~/.festivalrc (ggf. anlegen) oder in festival/lib/festival.scm die Zeilen
(Parameter.set 'Audio_Method 'Audio_Command) (Parameter.set 'Audio_Required_Format 'aiff) (Parameter.set 'Audio_Command "ffplay -f aiff -loglevel 0 >/dev/null -x 100 -y 50 -vn -autoexit $FILE")
Der damit eingesetzte Player ffplay lässt komfortabler und zuverlässig mit Tasten bedienen, anhalten, zurückspulen etc.
Alternativ kann die Kompilierung mit MPlayer-Support erfolgen. Ggf. erscheint dann zwar eine Fehlermeldung zu MPlayer (siehe Fehlerbericht), aber die Wiedergabe erfolgt trotzdem, und das Programm wird nicht sofort beendet.
Festival kann die Tonausgabe intern auch in andere Formate umwandeln (nist, esps, snd, riff, aiff, audlab, raw und, wenn tatsächlich gewünscht, sogar ascii, siehe Handbuch 🇬🇧), um eines dieser Formate zu verwenden, kann der der Eintrag zur Verwendung von MPlayer für die Wiedergabe z.B. auch
(Parameter.set 'Audio_Method 'Audio_Command) (Parameter.set 'Audio_Required_Format 'aiff) (Parameter.set 'Audio_Command "mplayer -really-quiet -nolirc $FILE")
lauten (zu Testzwecken kann natürlich die -really-quiet
-Option auch weggelassen werden, um sehen zu können, was MPlayer so macht). So spart man sich die unten beschriebene Umformung von mplayer.cc in speech_tools und die komplette Neukompilierung; das Verfahren funktioniert bei Bedarf auch für die Paketquellen-Version.
IMS/Mbrola-Version¶
Eine Version, mit der deutsche MBROLA-Stimmen 🇬🇧 in Festival integriert werden können, wurde von Institute for Natural Language Processing/IMS 🇬🇧 der Uni Stuttgart entwickelt. Für die Verwendung dieser Version muss zunächst eine Art Registrierung (auf der Seite der Projektbeschreibung) 🇬🇧 vorgenommen werden; die Download-Sektion ist nicht frei zugänglich. Nach Angabe einer gültigen E-Mail-Adresse wird ein drei Tage gültiger Zugangslink zu den benötigten Archiven freigeschaltet.
Die deutsche IMS-Festival-Version beinhaltet alle Module, die für eine Sprachausgabe von Text nötig sind. Dazu gehören eine linguistische Textanalyse, Umwandlung von Zeichen in Phoneme, Regeln für die Sprachmelodie (Prosodie) sowie eine Umwandlung in Wellenform (die vom MBROLA-Engine über eine entsprechende Schnittstelle geliefert wird). Weitere Hintergründe und Einzelheiten können dem Handbuch (festival/doc/german/germanfestival-manual.ps oder festival/doc/german/germanfestival-manual/index.html) entnommen werden.
Vorbereitung¶
Benötigt[3] werden zunächst das Paket mbrola,
mbrola (multiverse)
Befehl zum Installieren der Pakete:
sudo apt-get install mbrola
Oder mit apturl installieren, Link: apt://mbrola
sowie mindestens eine deutsche MBROLA-Stimme, die man von der MBROLA-Downloadseite ⮷ bezieht, es können die Stimmen de1, de2, d3 und de4 verwendet werden, mit Anpassungen auch andere. Die Stimmen de4 und de7 sind dabei "unsauber" gepackt, daher zunächst einen de4- bzw de7-Ordner anlegen, in den die Archive dann jeweils entpackt werden.
Dann muss zunächst eine funktionsfähige selbstkompilierte Festival-Version erstellt werden. Die aktuellste IMS-Version ist für Festival Version 2.1 ⮷ konzipiert; das Programm lässt problemlos auch auch mit Version 2.4 ⮷ kompilieren. Für die aktuelle Version 2.5 ist die Erweiterung bisher (Stand Februar 2020) allerdings nicht ausgelegt; sie lässt sich damit nicht verwenden, die Erstellung bricht mit Fehlermeldungen ab.
Danach werden die bezogenen Archive
bomp_full.corr.tgz
ims_german_1.3-os.tgz
in den bestehenden Festival-Unterordner entpackt[2].
Das vom IMS seit Januar 2014 ebenfalls beziehbare Archiv ims_german_1.3-os.fix.tgz ist unter Ubuntu nicht nötig; es führt ggf. zu Problemen beim Start mit der Option --language german
, und der Auswahl der deutschen MBROLA-Sprachen.
Hinweis!
Fremdsoftware kann das System gefährden.
In einem Editor[4] wird in der Datei festival/config/config.in Zeile 69 erweitert:
ALSO_INCLUDE += ims_german_text
Die Programmdatei mbrola und die Stimmenverzeichnisse de1, de2 etc. müssen sich in einem Verzeichnis befinden; die per Paketverwaltung installierte mbrola-Programmdatei befindet sich allerdings zunächst in /usr/bin. Diese Daten werden also entsprechend zusammengefasst, beispielsweise in einen festival/MBROLA-Ordner. Die eigentlichen Stimmdateien de* müssen ggf. ausführbar[5] gemacht werden.
Dieses MBROLA-Verzeichnis wird dann in die Datei festival/lib/sitevars.scm aufgenommen (Datei im Editor erstellen, falls nicht vorhanden):
(set! mbrola-path "/PFAD/ZU/festival/MBROLA") (set! mbrola_progname (string-append mbrola-path "/mbrola -e"))
In der Datei festival/lib/siteinit.scm wird eine Zeile eingefügt, um die Module für die deutschen Stimmen mit Festival zu laden:
(require 'ims_german_opensource)
tatsächlich nur mit einem '!
Kompilierung¶
Es muss eine Neu-Kompilierung im festival-Verzeichnis selbst durchgeführt werden, dazu wird die bestehende Installation zunächst entfernt, und dann neu erstellt:
make clean ./configure make info make
Hinweis:
Der Einsatz von make -j*
, der das Kompilieren für mehrkernige Prozessoren eigentlich beschleunigen kann, sollte hier nicht eingesetzt werden; die Kompilierung schlägt ggf. fehl, läuft aber mit einem einfachen make
normalerweise fehlerlos durch.
Nach der Kompilierung kann auf dem Festival-Prompt mit (voice_german_de1_os) (SayText "Hallo Welt!")
(oder entsprechend de2
etc. für die deutschen MBROLA-Stimmen) eine deutschsprachige Wiedergabe erfolgen.
Zeichenkodierung ändern¶
In Festival werden Umlaute und das Zeichen ß
nicht richtig wiedergeben, die betreffenden Worte werden ausbuchstabiert, und die Umlaute/ß als "upsa" o.ä. wiedergegeben (Diskrepanz zwischen dem unter Ubuntu standardmäßig verwendeten Satz UTF8 und IS0-8859-15, in dem das verwendete Lexikon kodiert ist). Hier muss ggf. auf Umschreibungen (ü=ue, ß=ss etc.) zurückgegriffen werden. Zur Wiedergabe vorliegender Textdateien hilft es, deren Textkodierung in ISO-8859-15 zu verändern.
Um auch für die direkte Ausgabe die Umlaute richtig ausgesprochen zu bekommen, kann man die Spracheinstellungen so verändern, dass statt der standardmäßig eingestellten UTF8-Kodierung eine ISO-Kodierung (z.B. IS0-8859-15) zum Einsatz kommt (siehe Änderung der Kodierung), das ist sowohl für einen Benutzer als auch systemweit möglich. Nach Einrichtung der Unterstützung für de_DE.ISO-8859-15
kann man beim Anmelden (wenn man nicht automatisch angemeldet wird, dann geht das natürlich nicht) dann diese Einstellung wählen, wenn man Festival mit deutscher Sprache verwenden möchte (Auswahl unter Ubuntu/GNOME im Panel im Anmeldefenster, "Deutschland ISO-8859-15").
Hinweis:
Mit dieser Einstellung kommen allerdings nicht alle Programme klar, und Umlaute werden dann in Menüs etc. ggf. nicht richtig angezeigt. Bei einem Neustart des Rechner werden zudem erst einmal alle Platten einem zwangsweisen Check unterzogen!
Tipps und Tricks¶
Standard-Stimme einstellen¶
Ohne Angabe einer Stimme wird, wenn Festival mit der Option --language german
gestartet wurde, die Stimme de2 verwendet. Das lässt sich in der Datei festival/lib/ims_german_opensource.scm abändern, indem man in der Zeile
(set! voice_default voice_german_de2_os)
die gewünschte Stimme einsetzt. Um eine einfachere Umschaltung zu ermöglichen, kann man diese Zeile mit einem vorgestellten ; auskommentieren. Dann legt man sich in einem Editor eine Datei .festivalrc im Homeverzeichnis an, in der diese Zeile aufgenommen wird. Je nach Wunsch kann man dann schnell eine andere Stimme eintragen (auch andere unterstützte Sprachen sind möglich, um sich z.B. einen englischsprachigen Text vorlesen zu lassen). Die Datei muss ausführbar gemacht werden. Außerdem kann die Standardsprache auch in festival/lib/siteinit.scm erfolgen; die .festivalrc hat aber Vorrang, jedoch nicht vor dem in ims_german_opensource.scm eingestellten Wert.
Weitere MBROLA-Stimmen verwenden¶
Um auch die anderen deutschen MBROLA-Stimmen (d5 - d7) zu verwenden, kann die Datei festival/lib/german/ims_german_voices_opensource.scm erweitert werden. Am Ende befinden sich die Einstellungen für die MBROLA-Stimmen, dort müssen entsprechend den vorliegenden Stimmen Sektionen für die weiteren Stimmen angelegt werden. Die Zahlenwerte beziehen sich dabei auf die Eigenschaften des "Pitch Range", d.h., die Vorgaben, innerhalb welcher Bereiche sich die Grundfrequenz der synthetisierten Sprache bewegen soll. Das ist leider von Sprecher zu Sprecher unterschiedlich; da man den MBROLA-Datenbanken nicht mehr ansehen kann, welche Grundfrequenz ihre Sprecher typischerweise hatten, ist es hier sinnvoll, ein bisschen zu experimentieren. Je dichter man nämlich an die Grundfrequenz herankommt, mit der die Diphone tatsächlich aufgenommen wurden, desto natürlicher klingt es. Als Ausgangspunkt kann man für die weiteren weiblichen Stimmen die Werte einer der beiden weiblichen Stimmen (de1 oder de3) übernehmen, für männliche Stimmen die von de2. Die Stimme de4 stammt vom IMS selbst, dort verwendet man folgende Werte,
(basevoice_german_mbrola "de4" '(150 130 110 100))
was höher als beim de2-Sprecher ist, da der de4-Sprecher von Natur aus eine deutlich höhere Grundfrequenz hatte.
Außerdem sollte man die Stimmen in festival/lib/ims_german_opensource.scm bei den Definitionen der Stimmen mit aufnehmen (Zeile 55 ff.).
Abkürzungen aussprechen¶
Standardmäßig versucht Festival, die Wörter auszusprechen, auch wenn es sich um Abkürzungen in Großbuchstaben handelt. Für einige Abkürzungen sind in der Datei festival/lib/german/ims_german_token_to_words_lists.scm andere Regeln festgelegt, hier kann man eigene Definitionen hinzufügen. Um z.B. GEW
ausbuchstabieren zu lassen, wird im Editor die Zeile
("GEW" . ("G" "E" "W"))
in der passenden Sektion untergebracht, andere Abkürzungen können analog eingestellt werden. Vorsicht ist allerdings geboten, wenn die Abkürzung auch als römische Zahl interpretiert werden kann; VCD
z.B. wird als "römisch fünfhundertfünfundneunzig" ausgegeben...
Fehlbetonungen korrigieren¶
Wenn Wörter falsch oder nur teilweise ausgesprochen werden, ist es möglich, sie in der Datei ims_german_lexicons.scm aufzunehmen. Die Syntax folgt dabei der des BOMP-Lexikons; verwendet wird die Sampa-Notierung. Standardmäßig würde das Wort "Radfahrer", das nicht im Lexikon vertreten ist, verstümmelt ausgegeben; Festival erkennt es als (R a t) (f a:) (6 6)
, und gibt eine Fehlermeldung zur Kombination 6-6
aus Warning: 6-6 unkown, replaced with _-_
, der letzte Teil fehlt in der Wiedergabe. In solch einem Falle kann man das Wort in Sampa-Notierung aufnehmen:
(lex.add.entry '("Radfahrer" N (((R a t) 1) ((f a:) 0) ((R @ R) 0))))
Das Wort wird in Silben aufgeteilt ((R a t) 1) ((f a:) 0) ((R @ R) 0)
, die Betonung der Silben wird mit 0
(unbetont) oder 1
(betont) angegeben, die letzten beiden Silben entsprechen der Notierung für "Fahrer" im Lexikon (statt der nicht kombinierbaren schwa-Laute "6 6" wird die präzisere Variante "R @ R" verwendet). Das N
vor den Silben gibt die Wortart an, in diesem Falle ein Nomen. So lassen sich beispielsweise auch Fremdwörter, die nicht vorhanden sind, aufnehmen; allerdings muss sehr genau auf die Klammersetzung und die richtige Sampa-Notierung geachtet werden! Einträge in dieser Datei haben Vorrang vor denen im bomp_full.out, man kann so z.B. auch eigene Betonungsvarianten realisieren.
Probleme¶
Wenn im Lexikon bomp_full.out oder der Datei ims_german_lexicons.scm in der SAMPA-Notierung nicht verwendbare Zeichen auftauchen, bricht Festival ab, im Terminal erscheint eine Meldung wie
Phone "F" not member of PhoneSet "german_sampa" Phone F not in PhoneSet "german_sampa"
Um das Problem zu lösen, sollte man im BOMP-Lexikon, in der FEST-BOMP-Verson als festival/lib/german/dicts/bomp_full.out gespeichert, alle Vorkommen durch die richtige Notierung (hier "f") ersetzen (am einfachsten in einem Editor mit Suchen-Ersetzen-Funktion zu bewerkstelligen).
Fehlbetonungen und ausgelassene Diphone¶
Es könnte sein, dass sich die Stimmen in den Diphon-Inventaren unterscheiden, in diesem Fall könnte es gelegentlich zu Fehlermeldungen kommen, in denen Festival sich über fehlende Diphone beschwert;
Warning: f-? unkown, replaced with _-_ Warning: s-? unkown, replaced with _-_ Warning: aI-? unkown, replaced with _-_
Besonders ausgeprägt ist das bei de8 (männliche Stimme mit bayrischem Akzent); dieser Stimme liegt eine andere Basis (stark ausgeprägter bayrischer Dialekt) zugrunde; von einer Verwendung unter Festival wird ausdrücklich abgeraten.
SIOD ERROR - wrong type of argument¶
Bei bestimmten Zeichenkombinationen startet die Ausgabe nicht oder bricht ab, es kommt es zu der Fehlermeldung:
"next_voiced_segment: no voiced segment found." SIOD ERROR: wrong type of argument to get_c_val
Hintergrund sind nicht verarbeitbare Kombinationen von Buchstaben mit Zahlen, etwa TZ6
oder kh56
(nicht alle derartigen Kombinationen machen Schwierigkeiten, es scheinen "unaussprechbare" Varianten zu sein; ggf. Kombinationen, die im Inventar nicht vorhanden sind). Derartige Zeichenfolgen müsste man herausfiltern und mit einem Leerzeichen trennen. Mit einem sed-Befehl kann man derartige Fehler vor der Ausgabe beseitigen:
sed -i -r -e 's/([a-zA-Z][a-zA-Z]+)([0-9]+)/\1 \2/g' Textdatei
Damit werden doppelte Buchstaben und Zahlen getrennt (tz6
wird zu tz 6
), (siehe auch xsane2speech, dort ist diese Umformung Teil des Skriptes). Allerdings sollte der Fehler in der IMS-Version 1.3 nicht mehr auftreten.
Abbruch der Wiedergabe sehr langer Sätze¶
Sehr lange Sätze werden in der Wiedergabe nach ca. 30 Sekunden abgebrochen, Festival geht kommentarlos zum nächsten Satz über. Das betrifft u.a. Endzeichen (.!?;:
), die nicht auf einen Buchstaben folgen; die Kombination ").
" wird nicht z.B. als Unterbrechung akzeptiert, der "Satz" (sprich die Audiospooler-Ausgabe) wird weitergeführt. Abhilfe schafft momentan nur, den "Satz" durch ein Endzeichen nach einen Wort zu unterbrechen. Dieses Verhalten kann auch bei längeren Aufzählungen mit Spielgelstrichen ohne Punkte auftreten. Das Problem ist den Entwicklern bereits bekannt, bei der oben beschrieben Ausgabe mit ffplay tritt das Problem nicht auf.
MPlayer als Ausgabesoftware verwenden¶
Das Problem der Satzabbrüche lässt sich auch (zugegebenermaßen etwas umständlich) umgehen, wenn man statt der Audiospooler-Verwendung MPlayer zur Sprachausgabe einsetzt. Festival verfügt über ein MPlayer-Modul, das allerdings für die Wiedergabe unter Cygwin/Windows konzipiert ist und standardmäßig nicht kompiliert wird. Daher muss zunächst die Datei mplayer.cc in Verzeichnis speech_tools/audio angepasst werden; dort wird Zeile 62 in s="/tmp";
umgewandelt, außerdem Zeile 83 in "mplayer -really-quiet -nolirc %s/%s",
(mit dem Komma!) umgeformt. Andere MPlayer-Optionen können bei Bedarf verwendet werden, die -really-quiet
-Option unterbindet fast alle Ausgaben, was ggf. erstellte Log-Dateien entlastet, die -nolirc
-Option schaltet zudem Meldungen zu ggf. nicht erfolgter Verbindung zu Lirc ab, was in diesem Zusammenhang auch überflüssig ist.
Dann muss in der Konfigurations-Datei speech_tools/config.in die Zeile 86 per # auskommentiert werden (also #INCLUDE_MODULES += NATIVE_AUDIO
), während Zeile 89 "freigeschaltet" wird (INCLUDE_MODULES += MPLAYER_AUDIO
). Danach erfolgt eine komplette Neukompilierung, sowohl in speech_tools, als auch in festival. Änderungen an den MPlayer-Einstellungen scheinen leider auch nur über diesen etwas aufwändigen Weg erreichbar zu sein.
So kann auch jeder andere .wav-fähige Medienplayer verwendet werden, der sich auf der Kommandozeile mit einer Dateiangabe starten lässt. Um z.B. den GNOME-MPlayer zu verwenden, mit dem problemlos Unterbrechungen und Wiederaufnahme von Ausgaben gesteuert werden können, gibt man "gnome-mplayer -q %s/%s",
an; für jeden neuen Satz wird der Player neu gestartet (Option -q
).
Alternativen¶
Links¶
Kompilierungs-Anleitung 🇬🇧 für Festival
IMS 🇬🇧 Institut für Maschinelle Sprachverarbeitung der Uni Stuttgart
Beispielsammlung 🇬🇧 verschiedener TTS-Programme
Sampa-German 🇬🇧