Previous Up Next

A Anciennes notes

A.1 Installation (Par Roger Mampey 31/3/05)

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.

A.1.1 Installation de Mbrola

A.1.1.1 Téléchargement

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.

A.1.1.2 Décompression

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 :

$ apt-get install unzip

). Et il faut "unzipper" les archives une à une.

$ unzip mbr301h.zip

fournit une série de fichiers dont il n’est utile de conserver que mbrola-linux-i386 renommé mbrola et readme.txt éventuellement.

$ unzip fr1-990204.zip

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.

A.1.1.3 

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 :

$ ../../mbrola ../fr1 bonjour.pho bonjour.wav
$ aplay bonjour.wav

où aplay est un utilitaire alsa élémentaire.

A.1.2 Décompression de FranFest

$ cd $FF
$ tar xvzf franfest.tar.gz

installe 5 fichiers Scheme :

et crée 2 sous-répertoires :

A.1.3 Installation de Festival

A.1.3.1 Téléchargement

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.

A.1.3.2 Installation des Speech_Tools

$ tar xvzf speech_tools-1.2.95-beta.tar.gz

crée le répertoire speech_tools ($ST) contenant un tas de trucs dont README et INSTALL. Puis :

$ cd $ST

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 :

$ gcc -Wno-deprecated -o essai essai.cc -lstdc++

doit donner le résultat attendu sans protestations. * Ensuite, on suit ce que recommande le fichier INSTALL.

$ ./configure
$ make
$ make test

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).

A.1.3.3 Installation de Festival et FranFest

$ tar xvzf festival-1.95-beta.tar.gz

crée un répertoire festival ($F) contenant un tas de trucs dont README et INSTALL. Et on y va :

$ cd $F

Si on veut aussi l’anglais, mais également pour comprendre certains aspects de la suite :

$ cd ..
$ gzip -d *.gz
$ tar xvf festlex_POSLEX.tar

installe 3 fichiers sous festival/lib/dicts/

$ tar xvf festlex_OALD.tar

installe 9 fichiers sous festival/lib/dicts/oald/

$ tar xvf festvox_rablpc16k.tar

installe un répertoire festival/lib/voices/english/rab_diphone/ [Installation du lexique (équivalent de festlex_OALD.tar)]

$ mkdir -p lib/dicts/dura
$ ln -s $FF/data/dura-0.2.out lib/dicts/dura/dura-0.2.out

[Installation des voix (équivalent de festvox_rablpc16k.tar)]

$ mkdir -p lib/voices/french/fr1_mbrola/festvox
$ ln -s $M/fr1/fr1 lib/voices/french/fr1_mbrola/fr1
$ cp $FF/fr1_mbrola.scm lib/voices/french/fr1_mbrola/festvox

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]

$ mv $FF/module_franfest src/modules

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 :

$ ./configure
$ make

A.1.4 Utilisation de FranFest

A.1.4.1 Il faut impérativement définir 2 variables d’environnement :

A.1.4.2 Petit test

$ cd $FF
$ $F/bin/festival
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)

$ $F/bin/festival
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)
$

A.2 Modifications

A.2.1 Dans le code C++

C++

A.2.1.1 Dans le fichier franfest.cc

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.

A.2.1.2 fr_token.cc

fr_token.cc À la ligne 458 ajout d’un cast pour éviter une erreur. Copié de token.cc.

A.2.2 Dans la partie Scheme

Scheme

A.2.2.1 Dans le fichier franfest.scm

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.)

A.2.2.2 Dans les fichiers fr1_mbrola.scm et fr2_mbrola.scm

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.


Previous Up Next