FranFest est essentiellement un patch de Festival qui permet de disposer d’une synthèse de parole française.
Pour installer FranFest, il faut, d’une part, disposer des sources de Festival (Festival lui-même et les Speech_Tools), d’autre part, disposer de Mbrola (l’exécutable et au moins une base de diphones d’une voix française).
Festival et les Speech_Tools sont installées par défaut dans 2 répertoires frères qui sont notés $F et $ST dans la suite. Le répertoire contenant l’exécutable Mbrola et les sous-répertoires pour chaque voix est noté $M.
FranFest est constitué d’un ensemble de fichiers C++, de fichiers Scheme et de données. Les fichiers C++ constituent un module de l’arborescence Festival, le reste est situé dans un répertoire qui sera noté $FF.
Le choix des répertoires $F, $ST, $M et $FFest libre sauf $F et $ST sous-répertoires du même répertoire (contrainte qu’il est certainement possible de lever en allant regarder de plus près les procédures d’installation).
La procédure d’installation n’a été testée que sur architecture Intel386 et sous la distribution Sarge de la Debian. De plus seul le mode d’utilisation interprété est présenté.
Si Mbrola est déjà installé, la prochaine section peut être évitée.
On doit pouvoir éviter la compilation des Speech_Tools mais pas celle de Festival. La procédure d’installation présentée ici compile tout.
Sous $M/ téléchargement de mbr301h.zip depuis http://tcts.fpms.ac.be/synthesis/mbrola.html.
Il y a 7 voix françaises disponibles, les 2 premières (une voix d’homme et une voix de femme) sont fr1-990204.zip et fr2-980806.zip.
NOTA : Pour dézipper du *.zip, il FAUT utiliser unzip (ni gzip, ni bzip2 ne l’acceptent) que l’on trouve sur n’importe quelle archive sérieuse (sous Debian :
). Et il faut "unzipper" les archives une à une.
fournit une série de fichiers dont il n’est utile de conserver que mbrola-linux-i386 renommé mbrola et readme.txt éventuellement.
crée un sous-répertoire fr1/ contenant :
on peut faire la même chose avec chacune des voix retenues, mais seules les voix fr1 et fr2 sont actuellement connues de FranFest.
Contrairement à ce que dit la doc (readme.txt et sur le site), il n’y a pas de bonjour.pho sous le répertoire mbrola/. Pour garder la logique des répertoires mbrola, on fait les tests sous $M/fr1/TEST :
où aplay est un utilitaire alsa élémentaire.
installe 5 fichiers Scheme :
et crée 2 sous-répertoires :
sous le répertoire parent de $F et $ST, téléchargement de festival-1.95-beta.tar.gz et speech_tools-1.2.95-beta.tar.gz depuis http://www.festvox.org/festival/index.html.
Si l’on désire que Festival puisse parler anglais et pas seulement français, il faut aussi récupérer (au moins) festlex_OALD.tar.gz, festlex_POSLEX.tar.gz et festvox_rablpc16k.tar.gz comme exemple de voix non Mbrola.
crée le répertoire speech_tools ($ST) contenant un tas de trucs dont README et INSTALL. Puis :
INSTALL conseille de vérifier que la compilation C++ fonctionne correctement avec le programme :
#include <iostream.h> int main (int argc, char **argv) { cout << "Hello world\n"; }
que l’on appelle ’essai.cc’. La commande :
doit donner le résultat attendu sans protestations. * Ensuite, on suit ce que recommande le fichier INSTALL.
NOTE : SHARED=1 n’a pas été décommenté malgré les conseils de INSTALL =) des librairies un peu grosses (5Mo pour lib/libestbase.a par exemple).
crée un répertoire festival ($F) contenant un tas de trucs dont README et INSTALL. Et on y va :
Si on veut aussi l’anglais, mais également pour comprendre certains aspects de la suite :
installe 3 fichiers sous festival/lib/dicts/
installe 9 fichiers sous festival/lib/dicts/oald/
installe un répertoire festival/lib/voices/english/rab_diphone/ [Installation du lexique (équivalent de festlex_OALD.tar)]
[Installation des voix (équivalent de festvox_rablpc16k.tar)]
et (si vous voulez les 2 voix françaises) la même chose en remplaçant partout fr1 par fr2 [Installation des sources C++ de FranFest]
Puis il faut ajouter une ligne dans le fichier $F/src/modules/Makefile pour lui apprendre l’existence du module FranFest.
On peut ajouter franfest soit à la liste BASE_DIRS soit à la liste OPTIONAL
par exemple, pour BASE_DIRS :
BASE_DIRS = Lexicon base Duration Intonation Text \ franfest \ UniSyn donovan parser UniSyn_diphone
NOTE : Il y a certainement un moyen natif Festival de faire ça automatiquement, mais je n’ai pas cherché. Enfin, comme d’habitude, compilation :
Festival Speech Synthesis System 1.95:beta July 2004 Copyright (C) University of Edinburgh, 1996-2004. All rights reserved. For details type `(festival\_warranty)’ festival> (load "franfest.scm") nil festival> (SayText "C’est pas trop tôt !") #<Utterance 0x403dcac8>
Par défaut, on a la voix masculine
festival> (voice_fr2_mbrola) fr2_mbrola festival> (SayText "C’est pas trop tôt !") #<Utterance 0x0x4045bf58>
Mais on peut avoir la voix féminine
festival> (quit)
Si on remplace "franfest.scm" par "test.scm", on dispose d’un certain nombre de phrases prédéfinies (voir test.scm) et d’informations sur les traitements effectués (que l’on peut moduler en intervenant dans le fichier shunt.scm)
Festival Speech Synthesis System 1.95:beta July 2004 Copyright (C) University of Edinburgh, 1996-2004. All rights reserved. For details type `(festival\_warranty)’ festival> (load "test.scm") nil festival> (dire liaison_52) Tagger Les [DETFP DETMP PPOBJFP PPOBJMP] -> DETFP enfants [NFP NMP] -> NFP en [PPOBJMS PREP ADV PPOBJMP PPOBJFS PPOBJFP] -> PPOBJMS ont [VA3P V3P] -> VA3P assez [ADV] -> ADV . [YPFOR] -> YPFOR Liaisons *s [a~ *] (Les det | enfants n) *n [o~ *] (en pro | ont v) Relation Word après PostLex Les : det ("l" "E") enfants : n ("z" "a~" "f" "a~") en : pro ("a~") ont : v ("n" "o~") assez : adv ("a" "s" "e") #<Utterance 0x4041c988> festival> (quit)
franfest.cc Ajout d’un fichier franfest.h qui est construit à partir d’un fichier franfest.h.in par le script configure. Ceci permet de configurer le chemin “data” en semi-dur à la configuration. La variable d’environnement FR_DATA reste cependant prépondérante. Personnellement utilisant le mode serveur de festival je ne veux pas avoir à gérer trop de variables d’environnement. Si celle-ci n’est donc pas fixée, la fonction festival_franfest_init cherche d’abord une variable cfg_path qui peut être fixée dans franfest.h.
fr_token.cc À la ligne 458 ajout d’un cast pour éviter une erreur. Copié de token.cc.
Le mécanisme de chargement par require me paraît plus simple que par load. Il suffit que le chemin où se trouve le fichier franfest.scm soit indiqué à festival (et ce de manière relative,) pour que l’utilisateur n’ai qu’à entrer la commande
festival > (require ’franfest)
dans le mode interactif de festival. Pour cela il faut ajouter une commande provide à la fin de franfest.scm. Un module ff_config.scm a été ajouté qui est appelé en tête de franfest.scm et est créé par le script configure à partir d’un fichier ff_config.scm.in.
Les variables mbrola_path et mbrola_progname peuvent être déterminées par le script d’installation et dans ce cas définies convenablement dans ff_config.scm. Cependant comme en A.2.1.1 la variable d’environnement est prépondérante. Supprimé
(voice\_fr1\_mbrola)
pour éviter une boucle infinie (voir A.2.2.2.)
fri_mbrola.scm FranFest est requis ici et les voix sont déclarées de manière plus conforme à Speechd-El pour ne pas avoir à écrire de code supplémentaire.