Publié le 1 mai 2016 - par

Donnez la parole à votre Raspberry Pi

parole_250pxParfois les choses se télescopent comme dirait un astronome… Hier à Nevers un des visiteurs (radioamateur) sur les Premières Rencontres Nationales du Raspberry Pi prépare un relais (radio) et m’a demandé si le Raspberry Pi pouvait générer des messages. Les messages ne peuvent pas être enregistrés car il faut par exemple retourner la puissance du signal reçu ou la température… Sinon il faudrait enregistrer une quantité de messages… importante.

Synthèse vocale sur le Raspberry Pi

Vendredi j’avais acheté le numéro 193 de Linux Magazine France. Or ce numéro contient un article intitulé : « Il ne lui manque que la parole… ».

Profitant de cette aubaine, j’ai rebranché un Raspberry Pi (bin oui j’avais emmené tous mes joujoux à Nevers 🙂 ) et une enceinte. Juste pour le fun (loi de Gombretin oblige) j’avais fait tourner en boucle Big Buck Bunny sur HDMIPI pendant 2 jours en non stop, avec le son et cette enceinte. Arrivé à Nevers je rebranche le tout, je lance le film et pas de son ! bin oui ! Gombretin et Murphy se sont ligués contre moi. Pas moyen de récupérer le son. Là je viens de tout rebrancher. Devinez ? hihihi ça fonctionne ! Je suis vert 🙁

Bon revenons à nos moutons.

SVOX Pico TTS

La lecture de l’article (très intéressant) de Linux Magazine France m’a amené à tester SVOX Pico TTS (TTS = Text To Speach).

L’installation ne pose pas de problème particulier. Après les sempiternels

sudo apt-get update
sudo apt-get upgrade

on passe à l’installation du synthétiseur vocal :

sudo apt-get install libttspico-utils

Et puis… c’est tout. C’est prêt

Un premier test : Vas y, cause

L’installation de Pico TTS  ajoute un utilitaire destiné à générer un fichier .wav à partir du texte :

pico2wave   -w   helloworld.wav    "Hello world, happy new year, my tailor is rich oups "

Bon, si vous avez d’autres idées pour la phrase, ne vous gênez pas 🙂

Voilà on obtient un fichier .wav avec une vois qui a quand même un fort accent américain…

Do you speak français ?

Non, sérieux… Vous imaginez un relais radioamateur français qui vous répond avec un accent du Michigan ? Voyons voir s’il est possible d’arranger ça. On peut régler la langue du synthétiseur. Il y a peu de langues disponibles

Le seul moyen d’avoir la liste des langues est d’en utiliser une qui ne figure pas dans la liste.

pi@raspi-7p-officiel:~/parole $ pico2wave -l fr-BE -w "Allez, une fois"
Unknown language: fr-BE
Valid languages:
en-US
en-GB
de-DE
es-ES
fr-FR
it-IT

Usage: pico2wave <words>
-w, --wave=filename.wav     Write output to this WAV file (extension SHOULD
be .wav)
-l, --lang=lang             Language (default: "en-US")

Help options:
-?, --help                  Show this help message
--usage                 Display brief usage message

Bon, on voit qu’il n’y a ni le Mandarin, ni le serbo-croate mais au moins on trouve le français ! il faudra utiliser fr-FR pour que le RasPi s’exprime dans la langue de Molière.

On teste ?

pico2wave  -l  fr-FR  -w  framboise.wav  "Bienvenue sur framboise trois quatorze !"

Cela génère un fichier framboise.wav qu’on peut écouter :

pi@raspi-7p-officiel:~/parole $ omxplayer -o local framboise.wav                Audio codec pcm_s16le channels 1 samplerate 16000 bitspersample 16
Subtitle count: 0, state: off, index: 1, delay: 0
have a nice day

Sortir le son directement sur le jack audio

C’est une peu contraignant de devoir créer un fichier .wav à chaque fois, puis de l’écouter avec omxplayer.
Comme tout bon informaticien, je suis un « bon » fainéant. Je ne vais pas refaire des dizaines de fois la même suite de commandes. J’applique le principe : « Si tu dois écrire plus de deux fois les mêmes commandes, écris un script »
La revue Linux Magazine France propose un script qui fonctionne très bien.
J’ai créé un fichier dit.sh

nano dit.sh

Ajoutez ces lignes dans le fichier, enregistrez le (CTRL X)

#!/bin/bash
pico2wave -l fr-FR -w /tmp/test.wav "$1"
aplay -q /tmp/test.wav
rm /tmp/test.wav

Le fichier .wav est créé de façon temporaire, lu, puis supprimé. $1 représente la phrase que vous passerez en paramètre sur la ligne de commande.

Rendez le programme exécutable.

sudo chmod 755 dit.sh

Si vous ne voyez pas à quoi ça sert, lisez l’article sur les droits Linux, indispensables si vous voulez savoir comment modifier les droits des fichiers et répertoires…

Réglage du volume

La sortie peut sembler un peu faible, vous pouvez modifier le niveau sonore en réglant le volume. Non, non, ne cherchez pas le bouton qu’il faut tourner, on est en ligne de commande !

amixer sset 'PCM' 95%

Vous pouvez aller jusque 100%… après le « bouton » se bloque 🙂

Quelques tests

 ./dit.sh "La température est de douze virgule six degrés "
 ./dit.sh "Votre signal arrive esse sept sur le relais "
 ./dit.sh "Désolé F1GYT, le relais est actuellement en maintenance "

 

Juste pour vous amuser essayez « La température est de 6,8°C » ou encore « La distance est de 35km », « vous pesez 97kg » (ouais je sais…), « le RaspberryPi pèse environ 45g et coûte 40€ », « le disque dur pidrive a une capacité de 314Mo », « nous sommes le 1/5/2016 », « il est 22h30 » etc…
Pico TTS lit parfaitement ces phrases avec les unités 🙂

Et si voulez lire le manuel (si, si, c’est bien, RTFM) il est disponible en ligne.

 

Conclusion

Un grand merci à Linux Magazine France dont je vous conseille la lecture. Vous y trouverez également les informations pour installe X11VNC ou encore les bases du QR Code.

De nombreuses applications utilisent la synthèse vocale, mais c’est souvent intégré à des distributions ou à des applications. Dans le domaine de la robotique, de la domotique ou de l’alarme vous pouvez avoir besoin de donner la parole à votre framboise. Vous avez ici les bases pour rendre votre RasPi bavard. N’en abusez quand même pas, au bout d’un moment on n’a qu’une envie… Débrancher le haut -parleur 😉

Il faut parfois jongler avec l’orthographe pour arriver à obtenir le son voulu mais ce n’est pas trop compliqué (pour les fois où j’ai eu à le faire). Je trouve le son d’une qualité tout à fait acceptable pour une voix synthétique. N’hésitez pas à dire ce que vous en pensez dans les commentaires 🙂

Pour répondre à la question posée hier à Nevers : Oui, en plus de gérer le fonctionnement du relais, pourquoi ne pas confier à un Raspberry Pi la génération des messages de service ?

Sources

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. Auteur de plusieurs livres sur le Raspberry Pi publiés aux Editions ENI.

48 réflexions au sujet de « Donnez la parole à votre Raspberry Pi »

  1. Ping : Donnez la parole à votre Raspberry Pi – Radioamateur France

  2. drckjp

    Franchement juste terrible ton article 🙂 J’ai adoré et testé, juste le top !
    J’aimerais tant en savoir au moins autant que toi sur cette bestiole (RPi) mais avec le taf, j’ai pas assez de temps… Et heureusement qu’il y a des gens comme toi, passionnés, qui partagent toutes ces trouvailles.
    Big merci à toi

    Répondre
    1. François MOCQ Auteur de l’article

      merci drckjp
      bah je n’en sais pas tant que ça, je suis plutôt un généraliste 🙂
      mais je me dis que ce qui m’intéresse peut en intéresser d’autres
      alors… voilà
      bonne fin de journée
      cordialement
      François

      Répondre
  3. msg

    Bonsoir ,
    Pico , c’est la fonction Pi-pelette . 😀
    Je l’ai sur mon smartphone Android pour le GPS , on peut sélectionner la voix masculine et la vitesse de diction .

    C’est super de pouvoir utiliser cette fonction sur la RPi .
    Merci François .

    Répondre
  4. Damien

    Merci pour cet article. Le rendu de la voix est plutôt correct, même en français, et ça évite de faire appel à des services en ligne tel que Google Translate…
    A quand la version Speech To Text en offline ? 🙂

    Répondre
    1. François MOCQ Auteur de l’article

      bonjour Damien
      les dames auraient peut être préféré une voix masculine mais je n’ai pas ça en magasin
      je vais vois si ça se fait…
      cordialement
      François

      Répondre
  5. Fabrice

    Hello,
    J’ai un petit défis supplémentaire 😉 Je travaille actuellement à l’élabaroration d’un petit robot qui parle utilisant déjà une des possibilités décritent dans le Tuto. Mon robot utilise également un ring neo-pixel.
    Et là ca coince, dès que je met le neo-pixel en route, on dirait qu’il y a un conflit avec le son.
    Le neo-pixel fonctionne très bien tant qu’aucun son n’a été utilisé. mais dès que j’envoie une commande vocale, c’est terminé.
    Donc voilà, si queqlqu’un a une idée pour contourner se problème ?

    Fabrice.

    Répondre
  6. Ping : Donnez la parole à votre Raspberry Pi | ...

  7. saez0pub

    Salut,

    J’avais même poussé le vice pour lui appendre à écouter sans aucun windows qui traine… (j’avais publié sur https://github.com/saez0pub/lmondo), chose que je n’avais pas pu pousser à fond, faute d’un micro correct et de la reconnaissance vocale qui n’est pas assez complète pour le français à mon gout.
    mais pour parler, il suffit d’utiliser la commande espeak, avec le pack mbrola qui a de bonnes voix :
    espeak -v mb/mb-fr4 -s 130 -p 40 « salut la compagnie »

    Répondre
  8. Jeoffrey Bauvin

    Bonjour,
    Pour ma part, j’ai laissé tomber pico2wave car la qualité n’est pas top top.

    Pour ma part, j’utilise l’API de Google Translate pour récupérer mon son en MP3. La voix est de très bonne qualité !

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour Jeoffrey
      si on remet les choses dans le contexte, un relais radio amateur est situé en montagne, en haut d’une colline dans un bois…
      pas sur que l’accès à l’API Google soit assuré 🙂
      cordialement
      François

      Répondre
  9. Philippe

    Bonjour François et félicitation pour tes articles.
    Pour ma part, (je suis radioamateur aussi) je suis sur une balise météo qui émet tous les 15 minutes sur une fréquence radioamateur,les infos de ces capteurs (température, pression,force et direction du vent) avec en plus la date et l’heure.
    J’utilise « espeak » et après plusieurs réglages, c’est une voie féminine avec un fort accent Bavarois qui annonce la météo. cela reste très compréhensible. J’ai malheureusement des problèmes avec mon capteur de vitesse du vent. Voici un lien pour voire le montage http://f5saz.jimdo.com/projets/
    merci et bonne continuation François
    Philippe

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour Philippe
      je viens de faire un tour sur ta page un projet déjà bien avancé 🙂
      j’ai dans mes cartons un jeu de capteurs (anémomètre, girouette et pluviomètre) je pense qu’ils sont de la même provenance
      j avais récupéré un programme pour gérer tout ça sur arduino : https://github.com/trunet/weatherstation/blob/master/weatherstation_casa.ino
      anémomètre interrupt fermeture contact = 2.4 Km/h /clic/sec
      ça pourra peut-être t’avancer
      et… si tu veux faire une description de la station sur framboise314 ce sera un plaisir 😉
      73’s
      François

      Répondre
    2. Jacques D

      Bonjour Philippe,

      J’ai jeté un oeil sur ton projet et il me semble que ton problème d anémomètre proviens de « divisions entières ».
      Remplace « p = pulse / 10 » et « t = temps /1000 » par « p = pulse / 10. » et « t = temps /1000. »
      Alors p et t seront des réels et non plus des entiers, ton problème sera résolu.
      Cordialement,
      Jacques

      Répondre
      1. Philippe

        Merci Jacques

        Super! maintenant le résultat est cohérent , mais j’ai encore un pb qui plante la boucle après 30 minutes!
        je n’ai pas dit mon dernier mots.

        bonne journée à tous
        Philippe

        Répondre
  10. bruno71

    Bonjour à vous.
    jouer avec la syntaxe pour ajuster les intonations me rappel l’époque des sound blaster 16 et autres cartes audio dorénavant… vintage… 🙂
    Surtout qu’à l’époque, pas de module français, tout en anglais, du coup on abandonnait vite fait !!!
    vive le progrès

    Répondre
    1. François MOCQ Auteur de l’article

      bonjour Bruno
      La vie est un éternel recommencement 🙂
      Mais bon, avec le Raspberry Pi arriver à avoir une voix en français à peu près correct ne demande pas trop d’efforts.
      Cordialement
      François

      Répondre
  11. Tux61

    François, merci pour ton très intéressant article. Je viens d’essayer sur… Ubuntu.
    Etonnant comme ça fonctionne bien !

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour
      j’en suis resté à la conclusion de l’article concernant eSpeak je cite « Tentons maintenant l’expérience en français … la phrase est plus compréhensible bien que l’on ait l’impression de se retrouver face à un robot de film de scifi des années 1980 »
      du coup… j ai choisi Pico TTS
      cordialement
      François

      Répondre
  12. Ping : Faite parler votre Raspberry… | Do It Yourself

  13. Dan simon

    Bonjour
    Moi aussi mon prof m’a appris
    Terminal
    Espeak
    Mbrola
    Gnome,
    Ou Google translater
    Lecture vocale avec voix télécharger mbrola masculine ou féminine
    Pour projet robotique
    Avec en plus micro et au choix hark de l université de kīotö ou pocket sphinx en acquisition

    Traiter le text
    1 enregistre text dans terminal capteur mic logiciel hark ou pocket sphinx
    2 envoyer à Google translater
    Ou fonction gnome
    3article défi wiki pédiatre
    4 retour programmation de réponse
    5 lecture du texte traduit en douze langue
    Dans espeak avec une voix mbrola défini

    Voilà j espère que ça vous plait miam.miam!
    Voilà qui résume et vous donne l oreille en plus d la voix

    Radio amateur moi aussi
    Merci à tous me renvoyer un timbre si vous voulez me soutenir

    Nécessite j’essaie ros hark pocket sphinx gnome espeak mbrola routeur et Wikipedia
    Needs helps
    Comment réaliser un script de la logique de cette article comment automatiser les étapes svp ? merci
    Je vous aide alors aider moi
    Cordialement salutation
    Xwandhook Dan Simon G
    2bis

    Répondre
  14. FJacques

    Bonjour et merci, c’est opérationnel !

    Par contre j’essaie de l’utiliser dans une page PHP pour que mon pi parle lorsqu’il reçois une requete, mais ça ne fonctionne pas… Aurais-tu une idées ?…

    Je fait des exec avec les mêmes appels que dans ton dit.sh, le fichier est bien créé et supprimé mais rien n’est lu.

    Répondre
  15. CDBI30

    J’ai enfin fait « causer » mes scrips python
    Fonctionne très bien sur la sortie Jack et en Bluetooth
    Très aléatoire ou incompréhensible sur HDMI
    J’ai essayé de mettre mon bash et ma fonction python ici, mais refusé

    Répondre
  16. kiboost

    Bonjour,

    Super article qui m’a permis très simplement d’installer picoTTS sur mon rasp, que j’ai ensuite intégré à Jeedom. Avec un equalizer la voix est beaucoup mieux et je l’utilise pour pas mal de notifications du coup.

    Par contre, comment peut on lui faire dire un mot anglais dans une phrase française ?
    Par exemple, faites lui dire « C’est le weekend ! » le résultat est inutilisable… J’ai changé en « fin de semaine », j’ai essayé en phonétique mais j’y arrive pas…

    Merci

    Répondre
  17. max pothier

    Bonjour,
    depuis quelque temps quand j’essaie d’installer le paquet sur une nouvelle carte SD il me dit (malheureusement sur l’écran):
    Lecture des listes de paquets… Fait
    Construction de l’arbre des dépendances
    Lecture des informations d’état… Fait
    Aucune version du paquet libttspico-utils n’est disponible, mais il existe dans la base
    de données. Cela signifie en général que le paquet est manquant, qu’il est devenu obsolète
    ou qu’il n’est disponible que sur une autre source

    E: Le paquet « libttspico-utils » n’a pas de version susceptible d’être installée
    ce qui est « trait » dommage car je l’utilise souvent…

    Répondre
  18. marieme

    Bonjour,
    quelqu’un pourrait m’aider j’essaye d’installer le paquet avec sudo apt-get install libttspico-utils sur ma raspberry pi 4 et voila ce que j’ai comme message:
    Lecture des listes de paquets… Fait
    Construction de l’arbre des dépendances
    Lecture des informations d’état… Fait
    E: Le paquet « libttspico-utils » n’a pas de version susceptible d’être installée

    Répondre
    1. François MOCQ Auteur de l’article

      bonjour
      bin… comme c’est mon blog, je choisis ce que je veux 🙂
      et si tu penses connaitre une meilleure solution, je te propose d’écrire un article sur sa mise en oeuvre
      je le publierai avec plaisir 😉
      Un truc qui m’agace sur les forums (ou ici) c’est quand quelqu’un pose une question sur une solution qu’il a choisie et qu’on lui répond de prendre une autre solution !!
      Après l’article date de mai 2016 et depuis les choses ont sans doute évolué, d’autres logiciels sont apparus ou se sont développés… il faut aussi en tenir compte quand on fait des critiques
      ps : j’accepte les critiques avec plaisir, quand elles sont constructives

      Répondre
  19. Pascalou

    Bonjour et bravo pour ce tuto qui a donné de la voix à un de mes raspberry !

    Mon raspberry ‘bavard’ est installé dans le salon, je l’utilisais jusqu’à présent uniquement comme serveur d’imprimante wifi.
    Est il possible de faire causer ce raspberry à partir d »un autre raspberry via une requete http ou autre ?
    Je m’intéresse à la reconnaissance de forme avec le raspberry et sa camera et j’aimerai mettre en place un systeme de cameras intelligentes avec annonces vocales lorsqu’elle detectera des personnes dans son champ de vision.

    J’ai aussi des capteurs à base de ESP8266 un peu partout, peut être est il possible de lancer des requetes sur le rasp du salon à partir de ces capteurs ?
    J’ignore si c’est possible mais ça serait vraiment très pratique de pouvoir centraliser toutes les alertes vocales au même endroit.

    Bonne continuation et merci pour le partage.

    Répondre
  20. Dylan

    Bonjour François,
    Votre site est une mine ressources , a chaque fois que je recherche quelque chose pour mon PI je tombe sur ce site !

    Je voulais savoir s’il est possible d’utiliser PICOTTS pour réaliser des appel téléphonique et lancer un message personnalisé ?

    Ou dois-je m’orienter ? avez vous une idée ?

    Par exemple GPIO1 obtient une information , je compose un numéro et la au moment ou je décroche j’entend « PICOTTS : attention Porte ouvert ‘Lieux' »

    En vous remerciant par avance !

    Répondre
  21. Ping : Merveilleux Rasperry Pi Zero W | Le Blog de Jean Gaillat

  22. tarneo

    Bonjour monsieur tarte aux framboises,
    j’ai eu le problème suivant plusieurs fois (il y a un an pareil) en installant le prog:
    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    Package libttspico-utils is not available, but is referred to by another package.
    This may mean that the package is missing, has been obsoleted, or
    is only available from another source

    E: Package ‘libttspico-utils’ has no installation candidate
    Je pense pas qu’il faut être très intelligent pour comprendre que les dépôts ne le contiennent plus..
    Une idée?

    Répondre
      1. tarneo

        J’ai finalement réussi à l’installer avec les commandes suivantes:
        wget http://ftp.us.debian.org/debian/pool/non-free/s/svox/libttspico0_1.0+git20130326-9_armhf.deb
        wget http://ftp.us.debian.org/debian/pool/non-free/s/svox/libttspico-utils_1.0+git20130326-9_armhf.deb
        *sudo apt-get install -f ./libttspico0_1.0+git20130326-9_armhf.deb ./libttspico-utils_1.0+git20130326-9_armhf.deb
        Tout marche bien maintenant (je pense qu’il serait bon de mettre à jour l’article)

        Répondre
  23. Ping : Éviter le blocage de votre Raspberry Pi en cas de défaillance d'un disque externe - Framboise 314, le Raspberry Pi à la sauce française....

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.