Menu | VisualVoice / Step2 | |
About Artistic Vision People Teams Contact us Publications Media Images/Movies Opportunities Related Links |
Sending PC values from MAX to the KuraFaceOnce the KuraFace is up and running in its own window, the next step is to try and connect to it. A simple MXJ object named "TryAgain", was coded with the following behaviour: i) Attempts a socket connection on port 4444 to the KuraFace, waiting as server. TryAgain is located in the SocketTest patcher, as shown here: The file TryAgain.java is shown in its entirety below -- comments are added at important points. import com.cycling74.max.*; import java.io.*; import java.net.*; public class TryAgain extends MaxObject { public TryAgain() { declareTypedIO("iffffffff", "m"); // initialize for safety for( int i = 0; i< 8; i++ ) { mults[i] = 0; } } // processes inlet data protected void inlet( int i ) { sending a 1 to the leftmost inlet triggers socket connection // left-most inlet opens or closes socket connection if( getInlet() == 0 ) { if( i == 1 && !isSending ) { try { kkSocket = new Socket( hostname, port); out = new PrintWriter(kkSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream())); isSending = true; System.out.println( "connected on port " + port ); } catch (UnknownHostException e) { System.err.println("Don't know about host: " + hostname); } catch (IOException e) { System.err.println("Couldn't get I/O for the connection to: " + hostname); } } else if( i == 0 && isSending ) { out.println( "Bye." ); out.close(); try { in.close(); kkSocket.close(); isSending = false; System.out.println( "disconnected from socket on port: " + port ); } catch(IOException io) { System.out.println("Could not close socket connection: " + io); } } } } receiving a value in one of the eight other inlets triggers an attempt to send values through the socket protected void inlet( float f ) { // other inlets if( isSending ) { int whichInlet = getInlet() - 1; mults[ whichInlet ] = f; String outputLine = ""; for( int i=0; i<8; i++ ) { outputLine += mults[i] + ";"; } out.println( outputLine ); try { String fromServer = in.readLine(); System.out.println( fromServer ); } catch(IOException io ) { System.out.println("could not read from server socket:" + io); } } } boolean isSending = false; // give these better default values? float mults[] = new float[8]; Socket kkSocket = null; PrintWriter out = null; BufferedReader in = null; int port = 4444; String hostname = "BrahmsOSX.local"; } The next step is to bring in a phoneme --> PC vector mapping, so that the sender object can process phoneme data, and convert it to facial parameters. |
|
View Edit Attributes History Attach Print Search Page last modified on August 21, 2008, at 08:37 AM |