!7 import edu.cmu.sphinx.util.TimeFrame; import edu.cmu.sphinx.api.AbstractSpeechRecognizer; // Version that keeps allocated recognizer sclass StreamSpeechRecognizer2 extends AbstractSpeechRecognizer { bool allocated; *(Configuration configuration) throws IOException { super(configuration); } public void startRecognition(InputStream stream) { startRecognition(stream, TimeFrame.INFINITE); } public void startRecognition(InputStream stream, TimeFrame timeFrame) { if (!allocated) { recognizer.allocate(); allocated = true; } context.setSpeechSource(stream, timeFrame); } public void stopRecognition() {} } p { S text = or2(smartJoin(args), "hello"); print("TEXT: " + text); File mp3 = william_silent(text); //try { playMp3(mp3); } catch {} File wavFile1 = prepareProgramFile("speech-big.wav"); File wavFile = prepareProgramFile("speech.wav"); mp3ToWAV_2(mp3, wavFile1); convertWAVForSphinx(wavFile1, wavFile); // direct conversion leads to robot voice bug // convertWAVForSphinx(mp3, wavFile); print("WAV: " + wavFile + " (" + wavFile.length() + ")"); pcall { playWAV(wavFile); } // Try to suppress logging // java.util.logging.LogManager.getLogManager().reset(); // no workie // java.util.logging.Logger.getLogger("global").setLevel(java.util.logging.Level.SEVERE); java.util.logging.Logger.getLogger("").setLevel(java.util.logging.Level.SEVERE); StreamSpeechRecognizer2 recognizer2 = new StreamSpeechRecognizer2(makeSphinxConfig()); print("Recognizing " + wavFile); new L times; new L lines; for (int i = 0; i < 10; i++) { long time = now(); recognizer.startRecognition(new FileInputStream(wavFile)); SpeechResult result; print("loop"); lines = new L; while ((result = recognizer.getResult()) != null) { S line = result.getHypothesis(); lines.add(line); print("Hypothesis: " + line); } print("done"); recognizer.stopRecognition(); times.add(now()-time); } print("Recognition times: " + struct(times)); S recognized = trim(fromLines(lines)); print("recognized: " + recognized); if (match(text, recognized)) print("perfect match!!!"); else { print("not quite."); print("input was: " + text); } }