Synthèse vocale sur Raspberry PI

Installer eSpeak-ng

Utiliser les commandes ci-dessous pour :

  • pour installer espeak-ng ;
  • pour lui faire dire “Hello Word” ;
  • pour obtenir la liste des voix ;
  • pour lui faire prononcer “Bonjour Monde” en français ;
  • pour installer la librairie Python qui accompagne espeak-ng (wrapper).
$ sudo apt-get install espeak-ng
$ espeak-ng "Hello Word"
$ espeak-ng --voices
$ espeak-ng -v fr-fr "Bonjour Monde"
$ pip3 install py-espeak-ng

Application de démo (horloge parlante)

from espeakng import ESpeakNG
import time

### Liste des mois
mois = ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre']

### Liste des jours de la semaine
jour = ['lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche']

##
## Prononce la date et l'heure
## @param t le moment (time)
##
def direHeure(t):
    esng = ESpeakNG(voice='fr')

    s = 'Nous sommes le ' + jour[t.tm_wday]

    if t.tm_mday == 1:
        s = s + ' premier'
    else:
        s = s + ' ' + str(t.tm_mday)
        
    s = s + ' ' + mois[t.tm_mon - 1] + '. ' + str(t.tm_year)

    if t.tm_hour == 12:
        s = s + 'Il est midi.'
    else:
        s = s + 'Il est : ' + str(t.tm_hour) + ' heure.'
    esng.say(s, sync=True)

##
## Prononce l'heure et les minutes
## @param t le moment (time)
##
def direHeureMin(t):
    esng = ESpeakNG(voice='fr')
    if t.tm_hour == 12:
        s = 'midi'
    else:
        s = str(t.tm_hour) + ' heure'
    esng.say(u'Il est : ' + s + ' ' + str(t.tm_min), sync=True)
  
##
## Prononce la date complète et l'heure
##  
def direTout():
    esng = ESpeakNG(voice='fr')

    esng.say('Bonjour.', sync=True)

    t = time.localtime()
    s = 'Nous sommes le '
    s = s + jour[t.tm_wday]

    if t.tm_mday == 1:
        s = s + ' premier'
    else:
        s = s + ' ' + str(t.tm_mday)
        
    s = s + ' ' + mois[t.tm_mon - 1]
    s = s + ' ' + str(t.tm_year)

    esng.say(s + '.', sync=True)

    s = 'Il est : '
    s = s + str(t.tm_hour) + ' heure'
    s = s + ' ' + str(t.tm_min) + ' et'
    s = s + ' ' + str(t.tm_sec) + ' seconde'

    esng.say(s + '.', sync=True)


##
## Début du programme
##
    
esng = ESpeakNG()
print(esng.voices)
    
direTout();

while True:
    t = time.localtime()
    if t.tm_sec == 0:        ## Minute entière
        if t.tm_min == 0:    ## Heure entière
            direHeure(t)                    
        else:
            direHeureMin(t)
    else:
        time.sleep(1);

Installer MBrola

Pour améliorer les voix françaises, on peut installer la synthèse MBrola développée par l’Université de Mons :

  • chargeons la définition du package MBrola pour ARM ;
  • puis installons là ;
  • puis installons la voix française MBrola n°1 ;
  • enfin, testons la.
$ wget https://raspberry-pi.fr/download/espeak/mbrola3.0.1h_armhf.deb -O mbrola.deb
$ sudo dpkg -i mbrola.deb
$ sudo apt install mbrola-fr1 -y
$ espeak-ng -v mb-fr1 "Bonjour Monde"

Les pipes

Les pipes sont un mécanisme de communication inter-applications. Ils se comportent un peu comme des fichiers, où une application écrit, pendant qu’une autre lit.

Ici on souhaite simplement lire les messages à prononcer dans une pipe nommée (named pipe).

C’est le but de cet atelier.

Références