Ceci est une ancienne révision du document !
Synthetiseur vocale eSpeak
Pré-requis
Installation
Ce synthétiseur vocal étant disponible dans les dépôts Ubuntu il vous suffira d'installer le paquet Espeak.
Utilisation
Il suffit ensuite de donner votre texte en pâture à Espeak, soit par l'intermédiaire d'un fichier texte :
espeak -v fr -f texte.txt
soit directement en ligne de commande :
espeak -v fr "Votre texte à lire..."
ou encore par un "pipe" sur la sortie standard :
echo "Lis mon texte" | espeak -v fr
Lire une page html (c'est pas parfait mais l'option -m permet d'éviter la lecture des tags HTML) : wget -q0 -http://www.confessions-voleur.net/confessions/node1.html | espeak -m -vfr+11
L'option -v définit la langue/voix à utiliser. D'autres options peuvent être utiles, comme l'option -s qui permet de définir le nombre de mots par minutes, ou -p qui règle la hauteur (grave/aigu) de la voix. Pour plus d'options :
espeak --help
Malheureusement, le rendu d'Espeak n'est pas exceptionnel. Il est possible d'obtenir de meilleurs résultats, notamment en le combinant avec MBROLA.
Si vous recevez le message d'erreur "bt_audio_service_open: connect() failed: Connection refused (111)", enlevez le paquet bluez-alsa (support bluetooth audio).
Si vous avez lors du lancement une dizaine d'erreurs testant des périphériques bluetooth etc comme ceci :
ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side ALSA lib audio/pcm_bluetooth.c:1614:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5) ALSA lib audio/pcm_bluetooth.c:1614:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5) ALSA lib audio/pcm_bluetooth.c:1614:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5) ALSA lib audio/pcm_bluetooth.c:1614:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5) ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only playback stream ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave Cannot connect to server socket err = No such file or directory Cannot connect to server request channel jack server is not running or cannot be started
Une première solution (peut être pas optimale ?) consiste alors à lancer espeak ainsi :
espeak -v en "Hello i am espeak" --stdout|paplay
(après avoir installé paplay via pulseaudio-utils, : source)
Combinaison MBROLA avec espeak
MBROLA ne fait pas directement la transformation de texte en voix. Il traite des fichiers de phonèmes. Une autre application, capable de décomposer du texte en phonème est donc nécessaire. Les voix de Mbrola donnent un rendu plus naturel que les voix de eSpeak (lesquelles sont très "robotiques"), d'où l'intérêt de combiner les deux.
Avec eSpeak préalablement installé, on peut traduire un texte en phonèmes, en passant à l'option -v les arguments mb/mb-fr1 (voix masculine) ou mb/mb-fr4 (voix féminine). On crée un fichier de phonème dans un format compatible avec mbrola :
espeak -v mb/mb-fr4 -f votre_fichier_texte --pho --phonout=texte.pho
Fichier exemple : bonjour.pho
; bO~Z'ur
b 65
o~ 35 0 94 20 95 40 96 59 97 80 99 100 99
Z 65
u 40 0 117 80 109 100 109
R 65
Pour faire ensuite parler l'ordinateur, il suffit de lire les phonèmes avec MBROLA et de rediriger la sortie soit vers un lecteur audio :
mbrola /usr/share/mbrola/voices/fr1 texte.pho -.au | aplay
ou pour passer par pulseaudio
mbrola /usr/share/mbrola/voices/fr1 texte.pho -.au | paplay
soit vers un fichier wav :
mbrola /usr/share/mbrola/voices/fr1 texte.pho texte.wav
À la place d'utiliser un fichier contenant des phonèmes, on peut aussi directement envoyer à Mbrola la sortie standard :
espeak -v mb/mb-fr1 -f votre_fichier_texte --pho | mbrola /usr/share/mbrola/voices/fr1 - -.au | aplay
ou
espeak -v mb/mb-fr1 'votre texte ici' --pho | mbrola /usr/share/mbrola/voices/fr1 - -.au | aplay
espeak -v mb/mb-fr1 -f votre_fichier_texte
La voix féminine fr4 reste masculine si on n'utilise pas la commande mbrola.
Pour plus d'information sur les options disponibles :
man mbrola
Solution n°1
On peut ajouter les options1) -e, -C et -R à Mbrola :
- -e = IGNORE fatal errors on unkown diphone
- -C CL = Phoneme CLONE list of the form a A b B …
- -R RL = Phoneme RENAME list of the form a A b B …
exemple :
mbrola -e -C "n n2 s z3" /opt/fr2/fr2 - -.au
Solution n°2
substituer (commande « s ») à l’aide des expressions rationnelles/régulières de sed aux deux codes de phonèmes problématiques (en début de ligne), « n2 » et « z3 » respectivement « n » et « s » :
[entrée] | sed -e "s/^n2 /n /"| sed -e "s/^z3 /s /" | [sortie]
« ^ » dénotant le début de ligne.
Soit :
espeak -v mb/mb-fr1 'votre texte ici' | sed -e "s/^n2 /n /"| sed -e "s/^z3 /s /" | mbrola /usr/share/mbrola/voices/fr1 - -.au | aplay
NB cette solution n’implique pas l’emploi d’un fichier de phonèmes intermédiaire
Solution n°3
1- Il vous faudra dans ce cas procéder en 2 étapes, créez un fichier des phonèmes de votre texte à lire par :
espeak -v mb/mb-fr1 -f "votre_fichier_texte" > texte.pho
ou
espeak -v mb/mb-fr1 "votre texte à lire ici..." > texte.pho
2- Envoi des phonèmes (corrigés au passage) vers Mbrola puis aplay pour lecture.
diphorect.sh "texte.pho" | mbrola /opt/fr1/fr1 - -.au | aplay
Installation du script diphorect
mes tests ne me pose pas de problème.
script de conversion du phonème problématique "n2"
Créez (avec les droits administrateur) le fichier /usr/bin/diphorect.sh
Copiez et collez le script que vous trouverez ici :
Ensuite rendez le script exécutable par :
sudo chmod +x /usr/bin/diphorect.sh
Et voilà, vous êtes prêt !