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.

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.
  • L'intérêt de ce programme est de connaître l'IP attribuée à un PC embarqué auto-connectable au wifi 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 - Juillet 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(10000); // pause 10 seconde pour laisser temps à la connexion wifi de se lancer
getIP();

print("Adresse IP wlan : ");
println(inputString);

String[] subIP = split(inputString, '.'); // coupe entre les .

direTexte("L'adresse IP utilisée pour l'interface wifi w lane est ");
direTexte(subIP[0] +"point"+subIP[1] +"point"+subIP[2] +"point"+subIP[3]);
/*
direTexte(subIP[0] +"point");// découpe la diction du message pour pause entre chaque.
direTexte(subIP[1] +"point");
direTexte(subIP[2] +"point");
direTexte(subIP[3]);
*/


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 getIP() {
  // 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 getIP() -----

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+m4";
// 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]="30"; // 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)


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