View  Edit  Attributes  History  Attach  Print  Search

ACCUEIL | ARDUINO > S'INSTALLER > DEBUTER > APPROFONDIR | PROCESSING | MECATRONIQUE | MATERIEL | OUTILS | TESTS | Plus...|
Python > Shell > ATELIERS Python + Qt > PyQt apps > PyQt+Arduino | Mes Robots | RepRap | Mes lib'Arduino | Mes shields Arduino | Mes distros | Les Mini-PC |
ATELIERS ARDUINO| VIDEOS | COMPRENDRE | REFERENCES | CODER | TECHNIQUE | GNU/LINUX | LIENS | Rien à voir |

Outils > Processing

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)


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