La synthèse vocale (ou TTS, pour Text To Speech) consiste à transformer un texte en suite de sons se rapprochant autant que possible de la parole humaine. Une des applications les plus évidentes de la synthèse vocale est l'accessibilité pour les mal-voyants. Il existe plusieurs synthétiseurs vocaux sous Linux, cette page ne se veut pas exhaustive.
La synthèse vocale procède en trois temps :
Pour en savoir plus : Wikipedia (fr), Llia_Phon (fr).
Ce document a pour but de présenter la mise en œuvre de quelques solutions.
Comme la reconnaissance vocale va de pair avec la synthèse vocale vous serez sans doute intéressé par le site VoxForge.org. Vous pouvez y enregistrer un texte qui permettra d'intégrer votre voix dans les modèles de reconnaissance vocale, et ainsi les améliorer.
Il ne s'agit en fait souvent que d'interface se basant sur un moteur de synthèse vocale (festival, espeak, etc.) :
La synthèse vocale dans Pidgin avec :
Vous pouvez installer :
Il suffit d'installer l'extension readtext (compatible Festival, Pico et Espeak).
Cliquer ici pour installer l'extension FIREVOX, pour firefox (clicspeak y est intégré)
Basé sur Clickspeak.
Compatible :SAPI 5, Java FreeTTS, et ORCA
Voir le forum Ubuntu anglais pour l'installation de clicspeak : et mettre à jour cette partie. Merci.
Vous pouvez également utiliser Mathspeak pour la lecture de formule mathématique.
Il est possible d'intégrer ces solutions dans votre environnement de bureau, afin de faire lire le contenu des répertoires ou des pages internet par exemple.
Voici quelques exemples d'intégration pour l'environnement Gnome. Pensez à adapter la configuration du script à votre convenance.
Pour faire marcher ce script, enregistrez-le où vous voulez et rendez-le exécutable. Il faut installer le paquet xclip. Ensuite, aller dans les préférences générales de Compiz (Menu Système → Préférences → Advanced Desktop Effects Settings → General Option). Sous l'onglet « Commands », choisissez une ligne vide et rentrez-y le chemin vers votre script, sous la forme « /chemin/vers/le/script/nom_du_script ». Ensuite, sous l'onglet « Actions » et la sous-partie « Commands », éditez le raccourci correspondant à la ligne où vous avez rentré le script (personnellement, j'utilise Ctrl–D en raccourci clavier, mais c'est vous qui voyez). L'utilisation est simple, vous sélectionnez du texte à l'écran, puis vous tapez votre raccourci. Une seconde pression sur le raccourci pendant la lecture l'interrompt.
#!/bin/bash ######### Début de la section de configuration ######### # définition de la voix à utiliser par Mbrola, à adapter selon la voix choisie et son chemin VOIX=/opt/fr2/fr2 # TYPE=mb/mb-fr4 # à décommenter si vous avez téléchargé une voix de femme # TYPE=mb/mb-fr1 # à décommenter si vous avez téléchargé une voix d'homme ######### Fin de la section de configuration ######### # on teste si la lecture est en cours, pour l'arrêter le cas échéant if [ ! -z $(ps -A | grep mbrola | awk '{ print $1 }' ) ]; then kill $(ps -A | grep mbrola | awk '{ print $1 }' ) else # On traduit la sélection en phonèmes grâce à espeak, et on l'envoie à Mbrola xclip -o | espeak -v $TYPE -s 150 -p 40 "$@" | mbrola $VOIX - -.au | aplay fi
Edit d'un autre utilisateur : Ou bien ci-dessous, une alternative avec un menu Zenity pour choisir la langue. Il faut bien sûr ne pas oublier de télécharger cette langue (us1 dans mon exemple) comme vous l'avez fait pour la langue fr4. J'ai aussi changé la boucle “if-else” pour un meilleur fonctionnement si Mbrola est déjà en cours.
#!/bin/bash ##### Affiche le menu Zenity ##### choix=`zenity --list --title="Choisissez la langue" --column="N°" --column="Langue" --height="200" \ 1 français \ 2 anglais ` ##### Sélection automatique de la langue choisie dans le menu Zenity ##### case $choix in 1 ) VOIX=/opt/fr2/fr2 && TYPE=mb/mb-fr4 ;; # pour une voix de femme en français 2 ) VOIX=/opt/us1/us1 && TYPE=mb/mb-us1 ;; # pour une voix de femme en anglais esac # on teste si la lecture est en cours, pour l'arrêter le cas échéant if [ ! -z $(ps -A | grep mbrola | awk '{ print $1 }' ) ]; then kill $(ps -A | grep mbrola | awk '{ print $1 }' ) && sleep 2 fi # On traduit la sélection en phonèmes grâce à Espeak, et on l'envoie à Mbrola xclip -o | espeak -v $TYPE -s 150 -p 40 "$@" | mbrola $VOIX - -.au | aplay
Placez ce script dans « /home/VOTRE_LOGIN/.gnome2/nautilus-scripts/ » et le rendre exécutable. Il permet, par un clic droit sur un fichier, menu Scripts → nom_de_votre_script, de lire le contenu de ce fichier. Refaire cette opération pendant la lecture en cours interrompra la lecture.
#!/bin/bash ######### Début de la section de configuration ######### # définition de la voix à utiliser par Mbrola, à adapter selon la voix choisie et son chemin : VOIX=/opt/fr2/fr2 TYPE=mb/mb-fr4 # TYPE=mb/mb-fr1 # à décommenter si vous avez téléchargé une voix d'homme ######### Fin de la section de configuration ######### # on teste si la lecture est en cours, pour l'arrêter le cas échéant if [ ! -z $(ps -A | grep mbrola | awk '{ print $1 }' ) ]; then kill $(ps -A | grep mbrola | awk '{ print $1 }' ) else # On traduit le fichier en phonèmes grâce à espeak, et on l'envoie à Mbrola espeak -v $TYPE -s 150 -f "$@" | mbrola $VOIX - -.au | aplay fi
Placez ce script dans /home/VOTRE_LOGIN/.gnome2/nautilus-scripts/ et le rendre exécutable. Il permet par un clic droit sur un répertoire, menu scripts / nom_de_votre_script de lire le contenu de ce répertoire. Refaire cette opération pendant la lecture en cours interrompra la lecture.
#!/bin/bash ######### Début de la section de configuration ######### # définition de la voix à utiliser par Mbrola, à adapter selon la voix choisie et son chemin VOIX=/opt/fr2/fr2 # TYPE=mb/mb-fr4 # à décommenter si vous avez téléchargé une voix de femme # TYPE=mb/mb-fr1 # à décommenter si vous avez téléchargé une voix d'homme ######### Fin de la section de configuration ######### # on teste si la lecture est en cours, pour l'arrêter le cas échéant if [ ! -z $(ps -A | grep mbrola | awk '{ print $1 }' ) ]; then kill $(ps -A | grep mbrola | awk '{ print $1 }' ) else #On liste les fichiers contenus dans le répertoire ou bien ceux sélectionnés par la souris FICHIERS=`ls -1 --quoting-style=c "$@"` for TEXTE in $FICHIERS do # On traduit le fichier texte temporaire en phonèmes grâce à Espeak, et on l'envoie à Mbrola espeak -v $TYPE -s 140 -p 40 $TEXTE | mbrola $VOIX - -.au | aplay done fi
(ou de la sélection, à l'aide d'un raccourci clavier)
Au préalable, installez les paquets xclip recode xbindkeys
Ensuite Installation du script diphorect ⇐cliquez ici, ou voir plus haut
Une fois ces paquets et le script installé, faites :
gedit "$HOME/.gnome2/nautilus-scripts/Lit le presse papier par synthèse vocale"
Copiez-y le script suivant : Lien vers le forum
Sauvegardez et rendez le script exécutable par un :
sudo chmod +X "$HOME/.gnome2/nautilus-scripts/Lit le presse papier par synthèse vocale"
À partir de là vous pouvez faire lire votre sélection de texte ou le contenu du presse-papier (texte copié par [Ctrl+C] par exemple) en cliquant avec le bouton droit sur le bureau ou une fenêtre nautilus et en choisissant “scripts / lit le contenu…”
Pour définir un raccourci clavier regardez la section xbindkeys de la page comment_creer_raccourcis_clavier Pour utiliser par exemple [ctrl+F12] pour démarrer arrêter la lecture, utilisez :
"$HOME'/.gnome2/nautilus-scripts/Lit le presse papier par synthèse vocale'" Control+Mod2 + F12
dans le fichier de configuration de xbindkeys.
Et voilà, en principe tout marche !
Que ce soit pour me le faire savoir ou parce qu'au contraire vous avez un problème… N'hésitez pas à m'envoyer un message par ici : mysteroid.
Voici une liste de fil traitant de divers scripts comportant tous une synthèse vocale.
http://forum.ubuntu-fr.org/viewtopic.php?id=413950
Voilà en espérant que tout cela pourra servir à d'autre…
KDE offre une manière élégante et simple 1)2) de lire du texte affiché à l'écran : KTTS .
Pour le mettre en place il suffit d'installer les paquets kttsd ksayit.
Commençons par créer un script qui enchaîne les différentes étapes, créer /opt/mbrola/tts et insérer :
#!/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
Sans oublier de donner les droits d'éxecution :
chmod u+x /opt/mbrola/tts
Pour configurer ktts, deux solutions :
Puis nous allons configurer kttsmgr pour qu'il utilise le couple lliaphon/mbrola :
Festival est un synthétiseur vocal, pour lequel il n'existe apparemment pas de voix française directement pour l'instant (avis aux amateurs…).
Mais il existe un patch (ou un fork) pour festival afin d'avoir les voix françaises : Franfest.
De même festival peut utiliser les voix française de Mbrola - (et Sapi).
Il peut fonctionner en mode interactif, même si ça n'a pas l'air très intuitif de prime abord…
Site officiel : http://www.cstr.ed.ac.uk/projects/festival/
Pour l'installer, il suffit d'installer le paquet festival, et d'autres voix anglaises. ( voir également plus d'information relative sur wikipedia )
Un exemple simple :
echo "That's really a pity I'm not able to speak French" | festival --tts
Pour connaître les options :
festival --help
gedit ~/.festivalrc
Puis, on y met:
(Parameter.set 'Audio_Command "aplay -t wav -r $SR $FILE") (Parameter.set 'Audio_Method 'Audio_Command) (Parameter.set 'Audio_Required_Format 'wav)
Assez connu des utilisateurs d'Android, ce synthétiseur vocal offre de bon résultat, surtout en français.
Licence : https://launchpad.net/ubuntu/precise/+source/svox/+copyright
Activez les dépots multiverse (une librairie de transformation rapide en série de Fourier n'est pas libre) puis installez le paquet libttspico-utils.
Un exemple simple :
pico2wave -l fr-FR -w test.wav "Faites demi-tour dès que possible !"; play test.wav;
SVOX a été racheté par Nuance et a plus ou moins abandonnée le projet, certainement pour ne pas concurencer son moteur TTS payant. Google continue de développer ce moteur sur son Dépôt GIT.
Lien complémentaire : http://forum.ubuntu-fr.org/viewtopic.php?id=108430
Ce synthétiseur vocal étant disponible dans les dépôts Ubuntu il vous suffira d'installer son 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
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 : http://askubuntu.com/questions/82118/espeak-returns-error-on-ubuntu-server)
Le projet MBROLA est développé à la faculté Polytechnique de Mons, et comporte un grand nombre de langages/voix.
Site officiel : http://tcts.fpms.ac.be/synthesis/mbrola.html
Pour l'installer, il suffit d'installer le paquet mbrola.
Désormais, un certain nombre de voix pour mbrola - pour diverses langues - sont présentes dans les dépôts (chercher mbrola dans Synaptic).
En outre l'ensemble des voix sont téléchargeables depuis le site officiel deuxième partie de la page. Extraire le fichier zip dans « /usr/share/mbrola/voices/ » (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. 3) 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).
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 Hardy : les fichiers de configuration d'Espeak pour Mbrola ne sont pas présents dans la version fournie dans les dépôts officiels d'Ubuntu. Pour pouvoir l'utiliser, il faut télécharger la version officielle d'Espeak. Ensuite, dézippez le fichier puis copiez le répertoire espeak-data/voices/mb dans le répertoire /usr/share/espeak-data/voices/. (Il vous faudra les droits superutilisateur).
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
On peut ajouter les options4) -e, -C et -R à Mbrola :
exemple :
mbrola -e -C "n n2 s z3" /opt/fr2/fr2 - -.au
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
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
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 !
Pages officielles de ces projets, et d'autres :
Sur la documentation ubuntu anglaise.
Wiki rassemblant des liens de synthese vocale :
Les voix françaises de mbrola (non libre):
Reconnaissance vocale (Opération inverse)
Contributeurs : Page initiale par Skippy le Grand Gourou, herberts, Balkoth et Dud, à partir du sujet http://forum.ubuntu-fr.org/viewtopic.php?pid=1469124. Corrections et compléments par Mysteroïd, Psychederic mohican : refonte pour la simplicité d'abord, et ajout de compléments.