Ceci est une ancienne révision du document !



Synthetiseur vocale eSpeak

Ce synthétiseur vocal étant disponible dans les dépôts Ubuntu il vous suffira d'installer le paquet Espeak.

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)

MBROLA

Le projet MBROLA est développé à la faculté Polytechnique de Mons, et comporte un grand nombre de langages/voix. Hélas MBROLA n'est pas libre.

Pour l'installer, il suffit d'installer le paquet mbrola.

Un certain nombre de voix pour mbrola - pour diverses langues - sont présentes dans les dépôts officiels, pour les installer faites une recherche dans votre gestionnaire de paquets avec me mot clé Mbrola.
Par défaut les voix de mbrola s'installent dans /usr/share/mbrola/. Pour le français il existe fr1, une voix masculine, et fr4 une voix féminine. Si vous les mettez ailleurs, espeak (voir plus bas) ne les trouvera pas.

Si vous souhaitez ajouter d'autres voix, elles sont téléchargeables depuis le site officiel. Extraire le fichier zip dans /usr/share/mbrola/ (Attention : les fichiers voix "fr1" "fr2" … ne doivent pas être dans un sous répertoire, ils doivent être directement sous …/voices/).

Les voix françaises de mbrola (non libre):

MBROLA est également disponible sous forme de fichiers binaires téléchargeables première partie de la page. 1) On extrait le fichier qui correspond à son architecture (le plus souvent i386) dans un répertoire au choix, de préférence /usr/bin/ (là où se fait l'installation par les dépôts).

Combinaison 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
Pour être compatible avec mbrola, le fichier .pho (qui est un fichier texte éditable) doit comprendre sur chaque ligne : un phonème suivi de sa durée suivi éventuellement d'indications de hauteur. Mettre en commentaire avec ; les autres lignes. Voir exemple ci-dessous.

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
Apparemment il n'y a pas besoin d'invoquer mbrola : espeak peut utiliser les voix mbrola lui-même (si elles ont été installées au bon endroit) :
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

Il semble que l'expression "on a" génère un phonème "n2" illisible par Mbrola. Pour contourner ce problème si vous l'avez également, voir ci-dessous
Solution n°1

On peut ajouter les options2) -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
Il vous faudra au préalable installer le script "diphorect" sur votre ordinateur comme indiqué ci-dessous

Installation du script diphorect

FIXME 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 :

Forum, sujet Diphorect

Ensuite rendez le script exécutable par :

sudo chmod +x /usr/bin/diphorect.sh

Et voilà, vous êtes prêt ! ;-)


1)
Il y a aussi des « .deb » ici (troisième ligne linux), je sais pas ce qu'il y a dedans…
2)
cf paragraphe « Renaming and Cloning phonemes » voir ce message en anglais ou idem
  • espeak.1460879794.txt.gz
  • Dernière modification: Le 17/04/2016, 09:56
  • par L'Africain