Attention, ce billet est insuffisant pour configurer de maniĂšre satisfaisante la synthĂšse vocale de votre Linux, mais câest une base qui peut vous aider dans vos propres recherches.
Vos commentaires sont les bienvenusâŠ
Les solutions de synthĂšses vocale sous Linux sont plutĂŽt en retard comparĂ© Ă ce que lâon trouve sous dâautres plateformes.
Sur le fond, il nây a pas de raison, la plupart des solutions utilisĂ©es sur les autres plateformes Ă©tant open-source
. DâoĂč mon hypothĂšse, câest un problĂšme dâintĂ©gration et de configuration.
AprÚs un temps de recherche non négligeable, je suis arrivé à une qualité trÚs respectable en utilisant les paquets existant dans les dépÎts standard. Voici, les informations nécessaires pour utiliser la synthÚse vocale sous Linux.
festival
Voici un synthétiseur vocal (ou TTS, pour Text To Speech) qui semble prometteur, mais qui ne supporte pas encore la langue française.
Pour lâinstaller :
sudo apt install festival festvox-kallpc16k
- festival est un synthétiseur vocal,
- festvox-kallpc16k une voix pour festival, attention le français ne fait pas partie des langues supportées pour le moment.
Festival sâutilise comme suit :
echo "Hello, I speak English" | festival --tts
eSpeak et Mbrola
Pour le couple eSpeak-Mbrola, vous aurez besoin des paquets suivant :
sudo apt install espeak mbrola mbrola-en1 mbrola-fr1 mbrola-fr4
- espeak est un synthĂ©tiseur vocal multi-langue, que lâon utilisera uniquement pour la conversion phonĂ©tique,
- mbrola est un synthétiseur vocal multi-langue qui offre un meilleur rendu que espeak mais qui ne prend pas en charge la conversion phonétique. Ce synthétiseur et les voix françaises présentent dans les dépÎts standards sont depuis début 2019 sous licence GNU GPL3 Afero,
- mbrola-en1 une voix masculine pour lâanglais (utile seulement ici pour la comparaison),
- mbrola-fr1 une voix masculine pour le Français,
- mbrola-fr4 une voix féminine pour le Français.
La commande eSpeak permet de faire « parler » votre ordinateur trÚs simplement :
espeak "Hello, I speak English"
Pour de lâanglais nâest pas si mal, bien que le rĂ©sultat soit une caricature de voix de robot. Par contre si on met du français, câest catastrophique :
espeak "salut ceci est du français" # Exemple Ă ne pas suivreâŠ
Il faudra donc préciser la langue à un moment donné.
Changeons de modÚle de voix :
espeak -v mb-en1 "Hello, I speak English"
En anglais, câest dĂ©jĂ beaucoup plus naturel comme voix.
Passons au Français :
espeak -v mb-fr1 "Bonjour, je parle français."
Il y a un gros progrĂšs, câest au moins comprĂ©hensible, mais on doit pouvoir faire mieux, non ?
Il faut savoir quâil existe diffĂ©rentes solutions pour faire du TTS sur Linux. Ces solutions ne sont pas forcĂ©ment concurrentes, et toute lâidĂ©e est quelque part de pouvoir standardiser la mĂ©thode dâappel. Câest ce que la suite de ce billet va montrer.
La commande eSpeak permet dâobtenir des phonĂšmes dâun texte donnĂ©e.
espeak -v fr "Bonjour, Ceci est un essai. Je parle français ?" -x -q
On peut mĂȘme adapter les phonĂšmes au synthĂ©tiseur :
espeak -v mb-fr4 "Bonjour, Ceci est un essai. Je parle français ?" -x -q
Du coup, on peut utiliser une séquence du type :
espeak -v mb-fr1 -q --pho --phonout=/tmp/phoneme.pho "Bonjour, Ceci est un essai. Je parle français ?"
mbrola -t 1.7 -e -C "n n2" /usr/share/mbrola/fr1/fr1 /tmp/phoneme.pho /tmp/bonjour.wav # converti les phonĂšmes en fichier son
aplay /tmp/bonjour.wav # joue le son.
La premiÚre commande génÚre les phonÚmes, la seconde construit un fichier son et la troisiÚme joue le son.
Voici comment on peut faire la mĂȘme chose en utilisant un pipeline de commandes consistant Ă prendre le rĂ©sultat de la commande prĂ©cĂ©dente comme valeur dâentrĂ©e de la suivante.
espeak -v mb-fr1 -q --pho "Bonjour, Ceci est un essai. Je parle français ?" # utilise la sortie standard
Du coup, on peut faire en 2 lignes :
espeak -v mb-fr1 -q --pho "Bonjour, Ceci est un essai. Je parle français ?" | mbrola -t 1.7 -e -C "n n2" /usr/share/mbrola/fr1/fr1 - /tmp/bonjour.wav
aplay --file-type wav /tmp/bonjour.wav # force le type
Pour passer en un seul pipeline, on va utiliser une astuce de la commande mbrola consistant Ă typer la sortie standard -.au.
espeak --pho -v mb-fr1 "Bonjour, Ceci est un essai. Je parle français ?" -q | mbrola -t 1.5 -e -C "n n2" /usr/share/mbrola/fr1/fr1 - -.au | aplay
On peut changer la voix en utilisant :
espeak --pho -v mb-fr4 "Bonjour, Ceci est un essai. Je parle français ?" -q | mbrola -t 1.5 -e -C "n n2" /usr/share/mbrola/fr4/fr4 - -.au | aplay
Ici on utilise eSpeak et Mbrola sans utiliser de fichier intermĂ©diaire, on verra plus loin un usage concret de ce type dâĂ©criture.
pico2wave
pico2wave est une autre solution de TTS basĂ© sur lâalgorithme « Hidden Markov Model » (HMM). Il sâagit de la solution gĂ©nĂ©ralement utilisĂ©e par les applications Android, lâinstallation se fait comme suit :
sudo apt install libttspico-utils
Et sâutilise :
pico2wave -l fr-FR -w /tmp/test.wav "Bonjour, je parle le français aussi bien que vous. Ou presque." && aplay /tmp/test.wav && rm /tmp/test.wav
Speech Dispatcher
Speech Dispatcher est un outil qui permet de choisir le module par défaut de votre systÚme pour la synthÚse vocale.
Speech Dispatcher offre un outil de configuration et dâaide au diagnostique. Bien quâinsuffisant en termes de possibilitĂ© de configuration spd-conf a le mĂ©rite de crĂ©er la structure de base.
spd-conf
La commande permettant de faire est spd-say :
spd-say "Bonjour, Ceci est un essai. Je parle français ?"
Le fichier de configuration de Speech Dispatcher pour lâutilisateur courant :
~/.config/speech-dispatcher/speechd.conf
Le fichier de configuration global que je vous dĂ©courage de modifier si vous nâavez pas de bonnes raisons :
/etc/speech-dispatcher/speechd.conf
On retrouve la mĂȘme hiĂ©rarchie dans ~/.config/speech-dispatcher/
et dans /etc/speech-dispatcher/
.
Dans chacun de ces répertoires on trouvera un dossier modules
, par exemple :
~/.config/speech-dispatcher/modules/pico-generic.conf
spd-say "Bonjour, Ceci est un essai. Je parle français ?"
Rédémarrer le service speech-dispatcherd
sudo systemctl restart speech-dispatcher.service
Références
- [Simon, le moteur de reconnaissance vocale Linux]
https://fr.xvgmag.com/articles/linux/meet-simon-the-linux-speech-recognition-engine.html
(lien cassé) - ici on parle de la solution inverse qui consiste à transformer la voix en texte, - Synthétiseur vocal eSpeak sur le site Ubuntu-fr,
- Using Mbrola with eSpeak sur le forum Ubuntu,
- Projet github eSpeak NG Text-to-Speech,
- Projet github MBROLA,
- MBROLA Voices sur github,
- How can I change the voice used by Firefox Reader View (Narrator) in Ubuntu? sur Ask Ubuntu,
- La SynthĂšse vocale sur Ubuntu,
- A partir de Mozilla Firefox 49 la parole est donnée au mode lecture (depuis fin 2016),
- MBROLA VOICES sur Source Forge,
- Fichier espeak-ng-mbrola-generic.conf,
- Fichier [espeak-generic.conf]
https://github.com/brailcom/speechd/blob/master/config/modules/espeak-generic.conf
â EDIT: Le lien nâest plus disponible, rendez-vous sur le dĂ©pĂŽt de speechd pour une alternative, - Fichier [pico-generic.conf]
https://github.com/brailcom/speechd/blob/master/config/modules/pico-generic.conf
â EDIT: Le lien nâest plus disponible, rendez-vous sur le dĂ©pĂŽt de speechd pour une alternative,
኿