import javax.speech.*;
import javax.speech.recognition.*;
import java.io.FileReader;
import java.util.Locale;

public class SimpleReconnaissance extends ResultAdapter {
  static Recognizer rec;
  public static void main(String args[]) {
    try {
      // Récupère un reconnaisseur pour la langue française.
      rec = Central.createRecognizer(
        new EngineModeDesc(Locale.FRENCH));
  
      // Lance ce reconnaisseur
      rec.allocate();

      // Charge un fichier contenant une grammaire
      // de règles, construit un objet RuleGrammar à
      // l'aide de ce fichier et le rend utilisable.
      FileReader reader = new FileReader(args[0]);
      RuleGrammar gram = rec.loadJSGF(reader);
      gram.setEnabled(true);

      // Associe un listener à ce reconnaisseur
      rec.addResultListener(new SimpleReconnaissance());

      // Avertit des changements d'états du 
      // reconnaisseur, ici sa création
      rec.commitChanges();

      // Demande le focus et lance l'écoute
      rec.requestFocus();
      rec.resume();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  // Reçoit uniquement les événements RESULT_ACCEPTED :
  // Ecrit ce qui a été reconnu.
  // Désalloue les ressources et termine le programme 
  public void resultAccepted(ResultEvent e) {
    Result r = (Result)(e.getSource());
    ResultToken tokens[] = r.getBestTokens();

    for (int i = 0; i < tokens.length; i++)
      System.out.print(tokens[i].getSpokenText() + " ");
    System.out.println();

    rec.deallocate();
    System.exit(0);
  }
}