ubuntuusers.de

ubuntuusers.deWikiFestivalKompilieren

Kompilieren

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

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 {en}, 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 {dl} 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.).

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.

Eine "Installation" (make install o.ä.) ist nicht vorgesehen, es lässt sich so auch kein Paket erstellen. Um die Version systemweit verwenden zu können, muss die PATH-Variable entsprechend angepasst werden, z.B. mit dem Befehl

PATH=$PATH:/PFAD/ZU/FESTIVAL/festival/bin
export PATH

Ggf. kommt es beim Versuche einer Wiedergabe zunächst zu eine Fehlermeldung:

Linux: can't open /dev/dsp

Das Gerät wird nicht mehr erstellt, Abhilfe schafft es, entweder in der Datei ~/.festivalrc (ggf. anlegen) oder in festival/lib/festival.scm die Zeilen

(Parameter.set 'Audio_Method 'Audio_Command)
(Parameter.set 'Audio_Command "aplay -q -c 1 -t raw -f s16 -r $SR $FILE")

aufzunehmen und die Ausgabe so über ALSA/aplay laufen zu lassen (STandard in der Version aus den Quellen.

Allerdings beendet sich Festival im SIOD-Modus dann nach jeder Äußerung kommentarlos. 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.

Komfortabler und zuverlässiger ist avplay:

(Parameter.set 'Audio_Method 'Audio_Command)
(Parameter.set 'Audio_Required_Format 'aiff)
(Parameter.set 'Audio_Command "avplay -f aiff -loglevel 0 >/dev/null -x 100 -y 50  -vn -autoexit $FILE")

Der Player lässt sich mit Tasten bedienen, anhalten, zurückspulen etc.

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 {en}), 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 {en} in Festival integriert werden können, wurde von Institute for Natural Language Processing/IMS {en} der Uni Stuttgart entwickelt. Für die Verwendung dieser Version muss zunächst eine Art Registrierung (auf der Seite der Projektbeschreibung) {en} 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

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install mbrola 

sudo aptitude install mbrola 

sowie mindestens eine deutsche Mbrola-Stimme, die man von der Mbrola-Downloadseite {dl} 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.

Die 64-bit-mbrola-Prgrammdatei von der MBROLA-Seite funktioniert nicht, es erscheint eine Meldung Architechture PANIC!!

Dann muss zunächst eine funktionsfähige selbstkompilierte Festival-Version erstellt werden. Die aktuellste IMS-Version ist für Festival Version 2.1 {dl} konzipiert; allerdings lässt sich das Programm derzeit auch mit Version 2.0.95 {dl} kompilieren.

Danach werden die bezogenen Archive

  • bomp_full.corr.tgz

  • ims_german_1.3-os.tgz

in den bestehenden Festival-Unterordner entpackt[2].

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 muss die bestehende Installation zunächst entfernt, und dann neu erstellt werden

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.

Hinweis:

Für die nachfolgenden Änderungen ist eine Neu-Kompilierung nicht nötig; allerdings muss Festival neu gestartet werden, damit die Anpassungen greifen.

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 {de}, 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). Näheres zu Sampa siehe unter SAMPA-D-VMlex {de}.

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 scheint eine "etwas andere" ("{de}", kurzes Audiobeispiel), Basis zugrunde zu liegen; 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.

MPlayer als Ausgabesoftware verwenden

Das Problem der Satzabbrüche lässt sich 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

  • eSpeak bietet von Hause aus Sprachunterstützung für viele Sprachen, unter anderem auch für Deutsch; es können auch Mbrola-Stimmen verwendet werden.

Diese Revision wurde am 25. April 2014 20:36 von Heinrich Schwietering erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Multimedia, Büro, Kommunikation, Bildung, Barrierefreiheit, TTS, Sprachausgabe