Logo Mon Club Elec

Processing – Synthèse vocale avec espeak : annonce vocale de l’adresse IP de l’interface wifi et éthernet sous Ubuntu.

http://web.archive.org/web/20210804223007/https://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertSerie

La synthèse vocale est un outil très pratique qui permet aux utilisateurs de communiquer avec leur ordinateur sans avoir à utiliser un clavier ou une souris. Avec le logiciel Processing et le moteur de synthèse vocale Espeak, il est possible de créer des annonces vocales de l’adresse IP de l’interface wifi et éthernet sous Ubuntu. Dans cet article, nous allons vous montrer comment configurer et utiliser Processing et Espeak pour créer des annonces vocales de l’adresse IP de l’interface wifi et éthernet sous Ubuntu.

Processing – Synthèse vocale avec espeak : annonce vocale de l’adresse IP de l’interface wifi et éthernet sous Ubuntu.

Explication

  • Ce script va extraire l’IP de l’interface wifi à partir du résultat de l’exécution de la commande ifconfig à partir de Processing, sous Ubuntu.
  • Ensuite, la chaine obtenue est synthétisée à l’aide du logiciel espeak, toujours à partir de Processing.
  • Une procédure comparable est réalisée pour l’interface éthernet.
  • A noter que ce programme indique également si aucune interface n’est disponible.
  • L’intérêt de ce programme est de connaître l’IP attribuée à un PC embarqué auto-connectable au wifi et/ou à l’éthernet pour pouvoir faire un accès distant.
  • On pourra utiliser ce programme sous forme d’une application autonome lancée automatiquement au démarrage d’Ubuntu.

Le programme

// Programme processing
// généré avec le générateur de code Processing
// www.mon-club-elec.fr
// par X. HINAULT – Aout 2011 – tous droits réservés

/////////////// Description du programme ////////////

// XXXXXXXXXXXXXXXXXXXXXX ENTETE DECLARATIVE XXXXXXXXXXXXXXXXXXXXXX

// inclusion des librairies utilisées

// déclaration objets
String[] command ;

String inputString;
String adresseIP;

int compt=0; // variable de comptage des passages

// déclaration variables globales

// XXXXXXXXXXXXXXXXXXXXXX  Fonction SETUP XXXXXXXXXXXXXXXXXXXXXX

void setup(){ // fonction d’initialisation exécutée 1 fois au démarrage

} // fin fonction Setup

// NB : si pas de fonction draw, le programme s’arrête.

// XXXXXXXXXXXXXXXXXXXXXX Fonction Draw XXXXXXXXXXXXXXXXXXXX

void  draw() { // fonction exécutée en boucle

// — initialisation des objets et fonctionnalités utilisées —

delay(2000); // pause 10 seconde pour laisser temps à la connexion wifi de se lancer
//direTexte(« Glapbox opérationnelle « );
direTexte(« GLAP-Boxe opérationnelle ! »);
direTexte(« Acquisition des adresses réseaux wifi et éthernète en cours « );
direTexte(« Merci de patienter quelques instants »);

// pause 20 secondes pour laisser temps à la connexion wifi de se lancer
delay(5000); // pause 5 secondes

direTexte(« 15 segondes restantes »);

delay(5000); // pause 5 secondes

direTexte(« 10 segondes restantes »);

delay(5000); // pause 5 secondes

direTexte(« 5 segondes restantes »);

delay(5000); // pause 5 secondes

//—- analyse adresse wifi —
getIPwifi();

print(« Adresse IP wifi : « );
println(inputString);

String[] subIP; // crée tableau de String

if (inputString!=null)   {

  subIP=split(inputString, ‘.’); // coupe entre les .  si la chaine reçue n’est pas nulle

  if (subIP.length==4) { // si le tableau contient 4 valeurs

      direTexte(« L’adresse I P utilisée pour l’interface wifi est « );
      direTexte(subIP[0] +« point »+subIP[1] +« point »+subIP[2] +« point »+subIP[3]);

  }

   else {

  direTexte(« Aucune adresse réseau wifi disponible ! »);

  } // fin else if (subIP.length==4)

} // fin if (inputString!=null)  

  else {

  direTexte(« Aucune interface réseau wifi disponible ! »);

} // fin else if (inputString!=null)  

//—– analyse adresse lan —–

getIPlan();

subIP = null; // réinitialise le tableau subIP

print(« Adresse IP ethernète : « );
println(inputString);

if (inputString!=null)  {

  subIP = split(inputString, ‘.’); // coupe entre les .  si la chaine reçue n’est pas nulle

  if (subIP.length==4) { // si le tableau contient 4 valeurs

    direTexte(« L’adresse I P utilisée pour l’interface ethernète est « );

    direTexte(subIP[0] +« point »+subIP[1] +« point »+subIP[2] +« point »+subIP[3]);

  }

  else {

    direTexte(« Aucune adresse réseau ethernète disponible ! »);

  } // fin else if subIP.length==4

} // fin (inputString!=null)

  else {

    direTexte(« Aucune interface réseau ethernète disponible ! »);

  } // fin else if (inputString!=null)  

exit(); // pour stopper exécution du programme à partir de Draw

//while(true); // stoppe boucle draw

} // fin de la fonction draw()

// XXXXXXXXXXXXXXXXXXXXXX Autres Fonctions XXXXXXXXXXXXXXXXXXXXXX

void getIPwifi() {
  // le paquet espeak doit etre installé sous Ubuntu (depuis la logithèque)

command = new String[1];
// espeak -v fr -s 140 « lecture texte espeak »
// espeak -v fr -s 80 -p 30 \ »moteur droit en marche avant\ »
command[0] = « ifconfig »;
//command[1] = «  »;
//command[2]= » »;
//command[3]= » »;  
//command[4]= » »;
//command[5]= » »;  
//command[6]= » »;
//command[7]= » »;

//— exécution de la ligne de commande
try {
    Process p = exec(command); // exécute la commande

    //— récupère la sortie de la commande dans la console de Processing
    BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String ligne = null;
    while ((ligne = in.readLine()) != null) { // lit la sortie console ligne à ligne

      System.out.println(ligne); // affiche la ligne courante issue de la console

      //—– prise en compte de la ligne qui suit ligne avec chaine caractère wlan0 —
      if (compt==1) { // si un premier passage a eu lieu
      // mis avant détection wlan0 pour éviter prise en compte lors 1er passage

        inputString=ligne; // on mémorise la ligne
        compt=2; // incrémente compt pour éviter prise en compte des lignes non voulues

        //—- traitement de la chaine de la deuxième ligne = extraction de l’IP
        inputString=trim(inputString);

        String[] subString = split(inputString, ‘:’); // coupe entre les :
        inputString=subString[1]; // garde la sous-chaine :192….Bcast:

        String[] subString2 = split(inputString, ‘ ‘); // coupe entre les :
        inputString=subString2[0]; // garde la sous-chaine d’adresse IP

      }

      //———- recherche la première ligne qui concerne l’interface —
      String[] testString = match(ligne, « wlan »); // recherche la chaine dans la ligne – pas numéro pour éviter problème

      if (testString != null) { // si le tableau n’est pas vide = si la chaine a été trouvée        
        inputString=ligne;
        compt=1;
      }

    }

  }
  catch (IOException e) {
    e.printStackTrace();
  }  

}

//—————– fin getIPwifi() —–

//—— fonction getIPlan() —
void getIPlan() {

  // le paquet espeak doit etre installé sous Ubuntu (depuis la logithèque)

command = new String[1];
// espeak -v fr -s 140 « lecture texte espeak »
// espeak -v fr -s 80 -p 30 \ »moteur droit en marche avant\ »
command[0] = « ifconfig »;
//command[1] = «  »;
//command[2]= » »;
//command[3]= » »;  
//command[4]= » »;
//command[5]= » »;  
//command[6]= » »;
//command[7]= » »;

//— exécution de la ligne de commande
try {
    Process p = exec(command); // exécute la commande

    //— récupère la sortie de la commande dans la console de Processing
    BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String ligne = null;
    while ((ligne = in.readLine()) != null) { // lit la sortie console ligne à ligne

      System.out.println(ligne); // affiche la ligne courante issue de la console

      //—– prise en compte de la ligne qui suit ligne avec chaine caractère wlan0 —
      if (compt==1) { // si un premier passage a eu lieu
      // mis avant détection wlan0 pour éviter prise en compte lors 1er passage

        inputString=ligne; // on mémorise la ligne
        compt=2; // incrémente compt pour éviter prise en compte des lignes non voulues

        //—- traitement de la chaine de la deuxième ligne = extraction de l’IP
        inputString=trim(inputString);

        String[] subString = split(inputString, ‘:’); // coupe entre les :
        inputString=subString[1]; // garde la sous-chaine :192….Bcast:

        String[] subString2 = split(inputString, ‘ ‘); // coupe entre les :
        inputString=subString2[0]; // garde la sous-chaine d’adresse IP

      }

      //———- recherche la première ligne qui concerne l’interface —
      String[] testString = match(ligne, « eth »); // recherche la chaine dans la ligne – pas numéro pour éviter problème

      if (testString != null) { // si le tableau n’est pas vide = si la chaine a été trouvée        
        inputString=ligne;
        compt=1;
      }

    }

  }
  catch (IOException e) {
    e.printStackTrace();
  }  

}

//—————– fin getIPlan() —–

//—– fonction direTexte — synthèse vocale à partir d’une chaine

void direTexte(String texte) {
  // le paquet espeak doit etre installé sous Ubuntu (depuis la logithèque)

command = new String[8];
// espeak -v fr -s 140 « lecture texte espeak »
// espeak -v fr -s 80 -p 30 \ »moteur droit en marche avant\ »
command[0] = « espeak »;
command[1] = « -v »;
command[2]=« fr+fast »;
// les voix sont dans /usr/share/espeak-data/voices/!v
// les variantes dispo sont : croak  f1  f2  f3  f4  fast  klatt  klatt2  klatt3  m1  m2  m3  m4  m5  m6  m7  whisper
// pour utiliser une variante faire :  espeak -ven+m3
command[3]=« -s »; // la vitesse
command[4]=« 90 »; // entre 30 et 200
command[5]=« -p »; // la tonalité
command[6]=« 60 »; // entre 0 et 99
command[7]=« \ »« +texte+« \ »« ; // le texte entre guillemets

//— exécution de la ligne de commande
try {
    Process p = exec(command); // exécute la commande

    //— récupère la sortie de la commande dans la console de Processing
    BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line = null;
    while ((line = in.readLine()) != null) {
      System.out.println(line);

    }

  }
  catch (IOException e) {
    e.printStackTrace();
  }  

}

/* >>>>>>>>>>>>>>>>>>>>>>>>> page man de espeak <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

ESPEAK(1)                                                            ESPEAK(1)

NAME
       espeak – A multi-lingual software speech synthesizer.

SYNOPSIS
       espeak [options] [<words>]

DESCRIPTION
       espeak  is  a  software  speech synthesizer for English, and some other
       languages.

OPTIONS
       -h     Show summary of options.

       -f <text file>
              Text file to speak

       –stdin
              Read text input from stdin instead of a file

       If neither -f nor –stdin, <words> are spoken, or if none then text  is
       spoken from stdin, each line separately.

       -q     Quiet, don’t produce any speech (may be useful with -x)

       -a <integer>
              Amplitude, 0 to 20, default is 10

       -l <integer>
              Line  length. If not zero (which is the default), consider lines
              less than this length as and-of-clause

       -p <integer>
              Pitch adjustment, 0 to 99, default is 50

       -s <integer>
              Speed in words per minute, default is 160

       -v <voice name>
              Use voice file of this name from espeak-data/voices

       -b     Input text is 8-bit encoding

       -m     Indicates that the text contains SSML (Speech  Synthesis  Markup
              Language) tags or other XML tags. Those SSML tags which are sup&#8208;
              ported are interpreted. Other tags, including HTML, are ignored,
              except  that  some HTML tags such as <hr> <h2> and <li> ensure a
              break in the speech.
      -w <wave file name>
              Write output to this WAV file, rather than speaking it directly

       -x     Write phoneme mnemonics to stdout

       -X     Write phonemes mnemonics and translation  trace  to  stdout.  If
              rules  files  have been built with –compile=debug, line numbers
              will also be displayed.

       –stdout
              Write speech output to stdout

       –compile=<voice name>
              Compile the pronunciation rules and dictionary  in  the  current
              directory.  =<voice  name>  is optional and specifies which lan&#8208;
              guage

       –path=<path>
              Specifies the directory containing the espeak-data directory

       –phonout=<filename>
              Write output from -x -X commands and mbrola phoneme data to this
              file

       –punct= »<characters> »
              Speak  the  names  of punctuation characters during speaking. If
              =<characters> is omitted, all punctuation is spoken.

       -k <integer>
              Indicate capital letters with: 1=sound, 2=the  word  « capitals »,
              higher values = a pitch increase (try -k20).

       –voices[=<language code>]
              Lists  the available voices. If =<language code> is present then
              only those voices which  are  suitable  for  that  language  are
              listed.

       –compile=voicename
              Compile  the  pronunciation  rules and dictionary in the current
              directory. =<voice name> is optional and  specifies  which  lan&#8208;
              guage

       –compile=debug
              Compile  the  pronunciation  rules and dictionary in the current
              directory as above, but include line  numbers,  that  get  shown
              when -X is used.

AUTHOR
       eSpeak  was written by Jonathan Duddington <jonsd@jsd.clara.co.uk>. The
       webpage  for  this  package  can  be  found  at   http://espeak.source&#8208;
       forge.net/.

       This manual page was written by Luke Yelavich <themuso@ubuntu.com>, for
       the Ubuntu project (but may be used by others).

                                 July 25, 2007                       ESPEAK(1)

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
*/

 

Noter cet article

Laisser un commentaire

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

Archive Mon Club Elec

Articles populaires

Newsletter

Inscrivez-vous maintenant et bénéficiez d'un soutien continu pour réaliser vos travaux électriques en toute sécurité.