1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
import javax.speech.*;
import t2s.son.LecteurTexte;
import javax.speech.recognition.*;
import javax.speech.synthesis.Synthesizer;
import javax.speech.synthesis.Voice;
import java.io.FileReader;
import java.util.Locale;
public class Recon extends ResultAdapter {
static Recognizer recognizer = null;
static Voice voice = null;
static Synthesizer synth = null;
// Permet de jouer une string en synthèse vocale
public static void lectureVocale(String reponse) {
LecteurTexte lt = new LecteurTexte(reponse);
lt.playAll();
}
// Call à la détection d'un nouvel ordre
public void resultCreated(ResultEvent e) {
System.out.println("Result Created...");
}
// Call à la detection d'un nouveau mot ou syllabe?
public void resultUpdated(ResultEvent e) {
Result r = (Result)(e.getSource());
System.out.println("Result Updated... "+r);
}
// Call si rien n'est trouvé (bruit ambiant...)
@Override
public void resultRejected(ResultEvent e) {
System.out.println("Result Rejected... ");
}
// Call si match avec un élément de la grammaire
@Override
public void resultAccepted(ResultEvent re) {
try {
Result res = (Result) (re.getSource());
// On récupère le meilleur token
ResultToken tokens[] = res.getBestTokens();
String phrase = "";
String gst = "";
for (int i = 0; i < tokens.length; i++) {
gst = tokens[i].getSpokenText();
phrase += gst + " ";
System.out.print(gst + " ");
}
System.out.println();
phrase = phrase.trim();
// Si égale à STOP on stop la recon
if (gst.equals("STOP")) {
recognizer.deallocate();
System.out.println(Constante.RECON_STOP);
lectureVocale(Constante.RECON_STOP);
System.exit(0);
} else {
// On met la recon en pause pour que la réponse ne face pas d'interférence
recognizer.pause();
// On cherche une réponse
String reponse = Constante.retournerReponse(phrase);
// Si réponse alors on joue le son OK et la réponse avec la synthèse vocale
if (!reponse.equals("")) {
Sound.jouerSon(Constante.PATH_SON_OK);
lectureVocale(reponse);
} else {
// Sinon on joue le son KO
Sound.jouerSon(Constante.PATH_SON_KO);
}
recognizer.resume();
}
} catch (Exception ex) {
System.out.println("Erreur: " + ex);
}
}
public static void main(String args[]) {
try {
// On initialise le moteur de reco
recognizer = Central.createRecognizer(new EngineModeDesc(Locale.ROOT));
recognizer.allocate();
// On lui indique le fichier de grammaire
FileReader grammar = new FileReader(Constante.PATH_GRAMM);
RuleGrammar rg = recognizer.loadJSGF(grammar);
rg.setEnabled(true);
// On lui indique que le mode dictation est activé en plus de la grammaire
DictationGrammar dictation;
dictation = recognizer.getDictationGrammar("dictation");
dictation.setEnabled(true);
SpeakerManager speakerManager = recognizer.getSpeakerManager();
// On applique le profil de reco Windows
SpeakerProfile profile = new SpeakerProfile();
SpeakerProfile[] profs = speakerManager.listKnownSpeakers();
for(int i=0;i<profs.length; i++) {
System.out.println("Found Profile "+i+" = "+profs[i].getName());
profile = profs[i];
}
speakerManager.setCurrentSpeaker(profile);
System.out.println("Current Profile set to "+speakerManager.getCurrentSpeaker().getName());
// On ajoute un listener
recognizer.addResultListener(new Recon());
lectureVocale(Constante.RECON_ACTIVE);
System.out.println(Constante.RECON_ACTIVE);
recognizer.commitChanges();
recognizer.requestFocus();
recognizer.resume();
} catch (Exception e) {
System.out.println("Exception: " + e.toString());
e.printStackTrace();
System.exit(0);
}
}
} |
Partager