/** * PATrecognizerTest creates a SphinxServer. It also uses Sphinx as a library * to recognize spoken questions. */ import java.io.*; import edu.cmu.sphinx.frontend.util.Microphone; import edu.cmu.sphinx.recognizer.Recognizer; import edu.cmu.sphinx.result.Result; import edu.cmu.sphinx.util.props.ConfigurationManager; import com.jaivox.recognizer.sphinx.*; import com.jaivox.util.*; public class PATrecognizerTest extends Thread { static int port = PATport_recognizer; static int waitTime = 1000; // one second static String work1 = "send PATrecognizer_0 {action: interpret, from: PATrecognizer, to: PATinterpreter, message: "; static String connect1 = "connect localhost PATport_interpreter"; static String who1 = "send PATrecognizer_0 {action: JviaWho, from: PATrecognizer, to: PATinterpreter, message: Jviawho}"; static String config = "PATrecognizer_config_file"; static void processSpeech (SphinxServer server) { ConfigurationManager cm = new ConfigurationManager ( PATrecognizerTest.class.getResource (config)); // allocate the recognizer Log.info ("Loading..."); Recognizer recognizer = (Recognizer) cm.lookup ("recognizer"); recognizer.allocate (); // start the microphone or exit if the programm if this is not possible Microphone microphone = (Microphone) cm.lookup ("microphone"); if (!microphone.startRecording ()) { Log.severe ("Cannot start microphone."); recognizer.deallocate (); System.exit (1); } System.out.println ("Sample questions are in PATlm_training_file"); // loop the recognition until the programm exits. while (true) { System.out.println ("Start speaking. Press Ctrl-C to quit.\n"); Result result = recognizer.recognize (); if (result != null) { String resultText = result.getBestResultNoFiller (); System.out.println ("You said: " + resultText + '\n'); String name = server.getServerId (); String message = work1 + "\"" + resultText + "\"}"; server.execute (message); try { Thread.sleep (4000); } catch (Exception e) { System.out.println (e.toString ()); break; } } else { System.out.println ("I can't hear what you said."); } } } public static void main (String args []) { SphinxServer Recognizer; Log log = new Log (); log.setLevelByName ("PATlog_level"); try { Recognizer = new SphinxServer ("PATrecognizer", PATport_recognizer); BufferedReader in = new BufferedReader ( new InputStreamReader (System.in)); Log.info ("Waiting to connect to PATinterpreter"); boolean connected = false; int waiting = 0; while (!connected && waiting < 1000) { sleep (waitTime); String result = Recognizer.executeReply (connect1); if (result.startsWith ("OK:")) { connected = true; break; } else { waiting++; System.out.println ("Waiting ... "+waiting); continue; } } if (!connected) { Log.severe ("Waiting for too long, terminating ..."); return; } else { Log.info ("Connected to PATinterpreter"); Log.info ("Waiting to establish who credentials"); } sleep (waitTime * 4); boolean established = false; waiting = 0; while (!established && waiting < 100) { sleep (waitTime); String result = Recognizer.executeReply (who1); if (result.startsWith ("OK:")) { established = true; break; } else { waiting++; Log.info ("Establishing credentials ... "+waiting); continue; } } if (!established) { Log.severe ("Establishing did not work, terminating ..."); return; } else { Log.info ("Established credentials with PATinterpreter"); Log.info ("Processing recognition results"); } sleep (waitTime * 4); // loop in SpeechInput processSpeech (Recognizer); System.out.println ("Terminating ..."); System.exit (1); } catch (Exception e) { e.printStackTrace (); } } }