!7 static JButton button; static volatile Capturer cap; static File wavFile; static Q recognizerQueue; p-substance { showControls(jCenteredLine(button = jbutton("Record!", f recordOrStop))); recognizerQueue = new Q("Recognizer Queue", true); thread { kevin(""); } // init speech synthesizer } svoid recordOrStop { if (cap != null) { cap.stop(); byte[] pcm = cap.getPCM(); infoMessage("Got " + l(pcm) + " bytes PCM!"); pcmToWAVE(pcm, cap.format(), wavFile); //infoBox("Wrote " + f2s(wavFile) + " (" + wavFile.length() + " bytes)"); cap = null; setText(button, "Record!"); recognizeAudio(wavFile); } else { AudioLine line = first(allTargetDataLines()); assertNotNull("Need audio input line!", line); DataLine dataLine = cast line.open(); print("Capturing"); wavFile = prepareProgramFile(ymd_minus_hms() + ".wav"); cap = captureAudioFromLine2(dataLine, sphinxAudioFormat()); setText(button, "Stop"); } } svoid recognizeAudio(final File wavFile) { recognizerQueue.add(r { loading { print("Recognizing audio..."); /*File mp3File = new File(wavFile.getPath() + ".mp3"); wavToMP3(wavFile, mp3File);*/ S line = witAI_recognizeWAV(wavFile); print("Done recognizing"); infoBox("You said: " + line); kevin(line); // repeat what user said } }); }