// Robert Twomey rtwomey@u.washington.edu import processing.serial.*; // voice recognition variables Sphinx listener; String s = ""; // receipt printer variables Serial myPort; static int LF = 10; static boolean doprint = true; // behavior parameters static int silenttime = 180000; int lastevent = 0; boolean waiting; void setup() { size(400, 400); background(0); // setup printer if necessary if(doprint) setupPrinter(); // setup speech recognition listener = new Sphinx(this,"bochner.slm.config.xml"); // set-up intra-utterance timing lastevent = 0; waiting = true; } void setupPrinter() { // serial init println(Serial.list()); // I know that the first port in the serial list on my mac // is always my Keyspan adapter, so I open Serial.list()[0]. // Open whatever port is the one you're using. myPort = new Serial(this, Serial.list()[0], 4800); //init receipt printer // myPort.write(ESC); // myPort.write("@"); // fast feed myPort.write(ESC); myPort.write('d'); myPort.write(8); // line feed // myPort.write(LF); // cut paper // myPort.write(ESC); // myPort.write('i'); delay(1000); } void dispose() { listener.dispose(); } void draw() { // check how long it has been silent if(!waiting && ((millis()-lastevent) > silenttime)) { // advance and cut, set state to wait for new input advanceAndCut(); waiting = true; } } void advanceAndCut() { // fast feed paper myPort.write(ESC); myPort.write('d'); myPort.write(8); // feed this many lines // cut paper myPort.write(ESC); myPort.write('i'); } void doQuit() { // // advance paper and cut // if(doprint) // advanceAndCut(); // close and dispose exit(); } void SphinxEvent(Sphinx _l) { int now = millis(); int delaytime = 0; waiting = false; s = _l.readString(); // returns the recognized string // echo to screen // System.out.print("["+now+"] sphinx heard: "+s); System.out.print("["+now+"] "+s); // intra-utterance timing System.out.println(" ("+(now-lastevent)+" since last utterance)"); lastevent=now; // send to printer if necessary if(doprint) { // _l.stopListening(); myPort.write(s); myPort.write(LF); /* delaytime = 100*ceil(s.length()/42.0); // Epson TM-267II prints 42 columns per line, 2.1 LPS System.out.print("pausing "+str(delaytime)+" ms at "+millis()); //delay(delaytime); System.out.println("resuming listening at "+millis()); _l.startListening();*/ } // check for stop command if((s.lastIndexOf("quit") >= 0) || (s.lastIndexOf("exit") >= 0)) doQuit(); if(s.lastIndexOf("cut")>=0 || s.lastIndexOf("stop")==0) advanceAndCut(); } void keyPressed() { if(key==' ') { listener.toggleListening(); } }