dimanche 24 septembre 2006
Synthèse vocale en français sous Linux
Par JJL, dimanche 24 septembre 2006 à 23:31 :: kubuntu
Généralités
Il existe de nombreuses solutions pour faire de la synthèse vocale sous Linux (aussi appelée TTS). La plupart est du à des universitaires. Nous allons en étudier une puis voir comment l'intégrer dans KDE.
NB: que les puristes de la synthèse vocale pardonnent mes approximations, les cours que j'ai suivis commencent à dater
Le principe général est à partir d'un texte brut :
- le traiter de manière à le transformer en entités élémentaires appelées phonèmes
- ajouter des informations de prononciation (durée, accent tonique ...) : c'est la prosodie
- créer un fichier vocal en concaténant les sons pré-enregistrés correspondants aux phonèmes ou diphones[1]
Pour plus de détails, je vous renvoi vers Wikipedia ou vers ce document pdf.
Les principaux moteurs de synthèse vocale sous Linux sont :
- epos : Czech et Slovak
- FreeTTS : en Java, US English
- festival / flite : English, Spanish and Welsh
- mbrola : un nombre incoyable de voix/langues, mais non libre
C'est tout de même ce dernier que nous allons utiliser.
le moteur de synthèse : mbrola
mbrola est un synthétiseur de parole multi-langage malheureusement non libre mais tout de même gratuit[2]. Il a l'avantage de fonctionner facilement et surtout de disposer de nombreuses base de diphones.
Pour l'installer, il vous faut télécharger les binaires ainsi que au moins une base de diphones. Vous vous retrouvez alors avec des fichiers zip :
- mbr301h.zip : qui contient les binaires
- fr1-990204.zip, fr2-980806.zip ... : avec les voix
Nous allons installer ceci dans /opt pour ne pas polluer notre système :
sudo mkdir /opt/mbrola cd /opt/mbrola sudo chown jjl:jjl . # changez cela si vous êtes en multi-utilisateurs unzip /home/jjl/sources/install/mbrola/mbr301h.zip unzip /home/jjl/sources/install/mbrola/fr1-990204.zip unzip /home/jjl/sources/install/mbrola/fr2-980806.zip ln -s mbrola-linux-i386 mbrola # selon votre architecture
Maintenant testons le fonctionnement :
./mbrola fr1/fr1 fr1/TEST/trenet.pho trenet.wav mplayer -really-quiet trenet.wav
cela devrait donner ceci :
Hum, il semble que le neolao player ai du mal sur ce morceau

Si vous voulez éviter de créer un .wav à chaque fois, essayez ceci :
./mbrola fr2/fr2 fr2/TEST/hier.pho -.au | aplay
C'est assez impressionnant. Mais, autant vous prévenir tout de suite, nous n'obtiendrons pas cette qualité. La qualité de la diction proviens pour une grosse part de la prosodie, qui est très difficile à obtenir automatiquement. Nous allons quand même continuer
La découpe en phonèmes : lliaphone
mbrola attends un fichier de phonème. Il nous faut donc un autre programme qui transforme du texte brut en phonèmes avec informations de prosodie. Nous allons utiliser lliaphon qui est distribué sous licence GPL. Il est dérivé de Lia_Phon initialement développé par Frederic Bechet et spécifique au français.
Commencez par télécharger et décompresser la version 0.4. Nous allons l'installer avec mbrola dans /opt :
cd /home/jjl/sources/install/mbrola/lliaphon-0.4 ./configure --prefix /opt/mbrola/lliaphon make make install
Pour tester, nous allons utiliser un script fourni avec lliaphon :
cd /opt/mbrola/lliaphon echo "Bonjour, je suis un ordinateur.">/tmp/test.txt export MBROLA_VOICE=/opt/mbrola/fr2/fr2 export PATH=$PATH:/opt/mbrola/ ./bin/lliaphon /tmp/test.txt ./bin/play_ola /tmp/test.ola
Vous devriez entendre quelque chose dans ce genre :
Intégration dans KDE : kttsd
KDE offre une manière élégante de lire du texte affiché à l'écran : KTTS . Voyons comment mettre ceci en place :
sudo apt-get install kttsd ksayit
- kttsd est le démon qui s'occupera de la communication avec le backend de synthèse
- KSayIt une petite application permettant de lire un document que l'on tape
- La synthèse vocale sera aussi intégrée à Konqueror et à Kate[3]
Commençons par créer un script qui enchaîne les différentes étapes :
$ cat > /opt/mbrola/tts : #!/bin/sh echo $1 | iconv -f UTF-8 -t ISO_8859-1 > $2 /opt/mbrola/lliaphon/bin/lliaphon $2 > /tmp/log 2>&1 /opt/mbrola/mbrola -e -t 0.75 \ -I /opt/mbrola/lliaphon/share/lliaphon/initfile.lia \ /opt/mbrola/fr2/fr2 \ `echo $2|sed s/\.txt$/\.ola/` $3 >> /tmp/log 2>&1 ^D $ chmod u+x /opt/mbrola/tts
Pour configurer ktts, deux solutions :
- à partir de KSayIt : Settings/Configure KSayIt/Launch Control Center
- en lançant kttsmgr à partir de la ligne de commande
Puis nous allons configurer kttsmgr pour qu'il utilise le couple lliaphon/mbrola :
- Talkers / Ajouter / Langue: autre / Synthesizer: Show all - commande
- Choisir la langue dans la fenêtre qui apparaît
- Entrez la commande : /opt/mbrola/tts %t %f %w
Et voila, relancez Konqueror et vous avez maintenant une option pour lire le texte séléctionné :
Et vous entendez :
Quelques mots sur festival
festival est un moteur de synthèse vocale complet et open-source. Mais il ne fonctionne pas directement en français même s'il semble possible d'arranger cela (voir ci-dessous) Pour l'installer :
sudo apt-get install festival
Pour le tester :
echo "hello, I'm a computer" | festival --tts
Vous pouvez aussi l'utiliser très facilement avec KTTS.
Bonus : lire les titres d'un flux RSS
Je me suis amusé à faire un petit script python qui récupère un flux rss et en fait un mp3. Il nécessite :
- la bibliothèque feedparser qu'il vous suffit de décompresser dans le même répertoire que mon script,
- lame pour l'encodage mp3,
- et lliaphon / mbrola bien entendu
Pour l'utiliser c'est très simple :
$ ./rss2mp3.py usage: ./rss2mp3.py <RssFeedUrl> [NbTitles] exple: ./rss2mp3.py http://kubuntu.free.fr/blog/rss.php 5 création d'un mp3 des titres des 5 derniers articles de mon blog
Vous pouvez le télécharger la : rss2mp3.py
Si vous avez installé dans d'autres répertoires que moi, changez les variables en début de script
Pour aller plus loin
- Essayer franfest qui permet d'intégrer le français dans le moteur open-source festival 1.4.3. voir ici
- Essayer kttsd-contrib-plugins qui permet d'intégrer mbrola/txt2pho directement dans KTTS
- Un bon résumé sur festival et le français : KTTS and the French Connection
- Regarder emofilt un logiciel open-source qui permet d'ajouter de l'émotion à la parole
- Annoncer les changement de pistes dans amaroK
- Jouer avec les paramètres de mbrola (frequence, vitesse ...) pour améliorer la voix
- Trouver un moyen d'améliorer la prosodie ?
- Ressources utiles :
23 commentaires :: aucun trackback :: Tags: