Main

Référence : Fonctions Pyduino

Pyduino Multimedia : speak


Description

  • Cette fonction permet de faire parler vos applications à partir d'une simple chaîne texte str ! Avec cette fonction, vous entrez dans le monde de la synthèse vocale, ni plus, ni moins...
  • Plus exactement, cette fonction va faire ce que l'on appelle du "text to speech" (ou TTS) , du texte à la voix : pour cela on va utiliser un "moteur TTS" qui fonctionne sous Gnu/Linux. Il en existe plusieurs. La fonction speak va permettre d'utiliser au choix l'un des deux moteurs TTS de voix française suivant :
    • le moteur espeak qui fournit une synthèse vocale un peu métallique, féminine ou masculine.
    • le moteur pico-tts qui fournit une seule voix féminine, mais de très bonne qualité, voix qui est retrouvée sur les systèmes Android notamment.
  • Il y a d'autres moteurs TTS possibles sous Gnu/Linux, mais le choix s'est porté sur les solutions les plus simples à installer et donnant un bon résultat.

Pré-requis

NOUVEAU : L'installation des dépendances multimédia est automatiquement effectuée en 1 fois par l'installation du paquet *.deb PyduinoMultimedia

Interface audio du système

  • Il est tout d'abord nécessaire de disposer d'une interface audio opérationnelle sur le système :
    • sur le rapsberrypi, c'est le cas en natif avec la distribution raspbian
    • sur le pcduino, il faut installer les paquets suivants qui fournissent une interface audio classique sur un système Gnu/Linux (réglage volume, choix des entrées / sorties audio, etc...) :
$ sudo apt-get install pulseaudio
$ sudo apt-get install pavucontrol

Les moteurs TTS utilisés

  • Cette fonction nécessite l'installation préalable des moteurs TTS utilisés :
    • le moteur espeak qui s'installe avec la commande suivante :
$ sudo apt-get install espeak
$ sudo apt-get install gespeaker # interface graphique pour le moteur TTS espeak
  • le moteur pico-tts :
    • qui nécessite tout l'ajout de sources de logiciels multiverse : on commence par ouvrir le fichier /etc/apt/sources.list avec la commande :
$ sudo geany /etc/apt/sources.list
  • puis on ajoute en fin du fichier les lignes suivantes :
# ajout pour pico
deb http://ports.ubuntu.com/ubuntu-ports/ precise main multiverse
deb-src http://ports.ubuntu.com/ubuntu-ports/ precise main multiverse
deb http://ports.ubuntu.com/ubuntu-ports/ precise-updates main multiverse
deb-src http://ports.ubuntu.com/ubuntu-ports/ precise-updates main multiverse
  • enregistrer puis installer en faisant :
$ sudo apt-get update
$ sudo apt-get install libttspico0 libttspico-utils libttspico-data

Matériel nécessaire

  • Pour ententre les sons, il est nécessaire de disposer d'une sortie audio sur le système. Cela dépend des plateformes :
    • sur le raspberrypi, on dispose d'une sortie HDMI et d'une sortie audio RCA sur Jack
    • sur le pcduino, on dispose uniquement d'une sortie HDMI
  • Selon les cas, on utilisera au choix :
    • les enceintes de l'écran HDMI connecté à la carte mini-PC
    • une mini-carte son USB reconnue par le système Gnu/Linux, qui aura l'avantage d'intégré à la fois une sortie et une entrée audio
    • un mini-ampli son connecté sur la sortie audio Jack avec enceintes ou H associé
    • voire même un simple casque audio...

Tests préalables

  • Il est utile de vérifier au préalable le bon fonctionnement de la sortie son. Le plus simple et le plus pratique pour des tests, mais aussi pour réaliser du traitement des fichiers sons est d'utiliser le logiciiel Audacity. A installer avec la commande :
$ sudo apt-get install audacity
  • Le logiciel Audacity se lance ensuite depuis le menu graphique Applications > Sound and Video > Audacity
  • Pour tester le son, aller dans le menu Generate et choisissez l'option de votre choix, par exemple DTMF et valider. Vous obtenez alors le tracé du son : cliquer sur Play. Vous devez entendre le son. Si ce n'est pas le cas, vérifiez les connexions, vérifiez le volume dans l'interface son et sur votre appareil de sortie son.
  • Tout fonctionne ? Vous êtes parés !

Syntaxe

speak(text)
speak(text, tts)

Paramètres

  • text : une chaine str . Noter que la chaîne pourra être multilignes !!
  • tts : identifiant du moteur tts à utiliser parmi PICO et ESPEAK. Si pas précisé, la voix pico est utilisée.

La fonction speak() supporte les variables numérique !! A vous les thermomètres à synthèse vocale et autres applications de ce genre !

Valeur renvoyée

Aucune

Explication technique

  • Cette fonction utilise :
    • soit le moteur TTS espeak
    • soit le moteur TTS pico

Exemple :

#!/usr/bin/python
# -*- coding: utf-8 -*-

# exemple pyDuino - par X. HINAULT - www.mon-club-elec.fr
# Juin 2013 - Tous droits réservés - GPLv3
# voir : https://github.com/sensor56/pyDuino

# test speak

from pyduinoMultimedia import * # importe les fonctions Arduino pour Python

# entete declarative
noLoop=True

#--- setup ---
def setup():

        speak("Bonjour, je mappelle ispik", ESPEAK)

        speak("Salut les amis. Je mappelle pico")
        speak ("Je vais compter jusqu'a dix")

        for i in range(0,11):
                speak(i)

        """
        # en plus rapide - 1 seule chaîne pour tous les chiffres
        comptage=str(range(0,11)) # tranformation du list en str
        comptage=comptage.replace('[', ' ')  # enleve crochet
        comptage=comptage.replace(']',' ')

        speak(str(comptage)) # pour transformer la list en str sans crochet
        """


        speak ("Voila, j'ai fini.")



# -- fin setup --

# -- loop --
def loop():
        return  # si vide

# -- fin loop --

#--- obligatoire pour lancement du code --
if __name__=="__main__": # pour rendre le code executable
        setup() # appelle la fonction main
        while not noLoop: loop() # appelle fonction loop sans fin
 

Exemple Multiligne :

  • La langue de Molière en synthèse vocale, çà vous tente ?? Regardez l'exemple qui suit !

#!/usr/bin/python
# -*- coding: utf-8 -*-

# exemple pyDuino - par X. HINAULT - www.mon-club-elec.fr
# Juin 2013 - Tous droits réservés - GPLv3
# voir : https://github.com/sensor56/pyDuino

# test speak dans la langue de moliere !

from pyduinoMultimedia import * # importe les fonctions Arduino pour Python

# entete declarative
noLoop=True

#--- setup ---
def setup():

        speak(""" je ne veux que ce que je vous ai dit :
        Belle Marquise, vos beaux yeux me font mourir damour."""
, ESPEAK)

        speak("""Il faut bien étendre un peu la chose.
        """
,PICO)

        speak(""" Non, vous dis-je, je ne veux que ces seules paroles-la
        dans le billet ; mais tournez a la mode ; bien arrangez comme il faut.
        Je vous prie de me dire un peu, pour voir, les diverses maniaires dont on les peut mettre.
        """
, ESPEAK)

        speak("""On les peut mettre premiairement comme vous avez dit.
        Belle Marquise, vos beaux yeux me font mourir damour.
        Ou bien : damour mourir me font, belle Marquise, vos beaux yeux.
        Ou bien : Vos yeux beaux damour me font, belle Marquise, mourir.
        Ou bien : Mourir vos beaux yeux, belle Marquise, damour me font.
        Ou bien : Me font vos yeux beaux mourir, belle Marquise, damour.
        """
,PICO)

        speak(""" Mais de toutes ces fassons-la,
        laquelle est la meilleure ?"""
, ESPEAK)

        speak("""Celle que vous avez dite : Belle Marquise, vos beaux yeux me font mourir damour.""", PICO)

# -- fin setup --

# -- loop --
def loop():
        return  # si vide

# -- fin loop --

#--- obligatoire pour lancement du code --
if __name__=="__main__": # pour rendre le code executable
        setup() # appelle la fonction main
        while not noLoop: loop() # appelle fonction loop sans fin
 

Truc d'utilisation

  • Eviter les é et les è dans les chaines et utiliser à la place une syllabe phonétiquement équivalente mais sans accent. Par exemple, pour dire père, écrivez paire !
  • Vous pouvez tester si le coeur vous en dit en manuel la synthèse vocale avec l'interface graphique Gspeaker depuis le menu Applications > Sound and Video

Commentaires utilisateurs

Pouvoir faire interagir aussi simplement la lecture de fichier son avec les entrées / sorties numériques ou analogiques, sympa !

Voir également


Page d'accueil de la référence Pyduino en français

Corrections, suggestions et nouvelle documentation peuvent être postées à l'adresse suivante : support_at_mon-club-elec_point_fr

Cette page a été réalisée par Xavier HINAULT (2013) (www.mon-club-elec.fr) et est sous licence Creative Commons Attribution-ShareAlike 3.0.