//---------------------------------------------------------------------------- //---------------------------------------------------------------------------- // create our OSC receiver OscIn oscin; // a thing to retrieve message contents OscMsg msg; // use port 12000 (default Wekinator output port) 12000 => oscin.port; // expecting 1 output dimensions 1 => int NUM_PARAMS; float myParams[NUM_PARAMS]; 5 => int NUM_CLASSES; // listen for "/wek/output" message with 5 floats coming in oscin.addAddress( "/wek/outputs, f" ); // print <<< "listening for OSC message from Wekinator on port 12000...", "" >>>; <<< " |- expecting \"/wek/outputs\" with 1 discrete parameter with 5 classes...", "" >>>; SndBuf sound => dac; me.dir() + "intro.wav" => sound.read; 10::second => now; 1 => sound.loop; 0 => int started; [ me.dir() + "snape.wav", me.dir() + "dumbledore.wav", me.dir() + "ron.wav", me.dir() + "hermione.wav", me.dir() + "harry.wav" ] @=> string files[]; string filename; -1 => int prev_val; -1 => int curr_val; fun void setParams( int params[] ) { // make sure we have enough params[0] => int val; if (val != prev_val) { files[val - 1] => filename; curr_val => prev_val; val => curr_val; } } // function to map incoming parameters to musical parameters fun void map2sound() { // time loop while( true ) { // if (prev_val == -1 && curr_val == -1 && started == 0) { // me.dir() + "tick.wav" => sound.read; // 1 => started; // } if (prev_val != curr_val ) { <<>>; filename => sound.read; curr_val => prev_val; } 10::ms => now; } } fun void waitForEvent() { // array to hold params int p[NUM_PARAMS]; // infinite event loop while( true ) { // wait for OSC message to arrive oscin => now; // grab the next message from the queue. while( oscin.recv(msg) ) { // print stuff cherr <= msg.address <= " "; // unpack our 5 floats into our array p for( int i; i < NUM_PARAMS; i++ ) { // put into array Std.ftoi(msg.getFloat(i)) => p[i]; // print cherr <= p[i] <= " "; } // print cherr <= IO.newline(); // set the parameters setParams( p ); } } } // spork osc receiver loop spork ~waitForEvent(); // spork mapping function spork ~ map2sound(); // time loop to keep everything going while( true ) 1::second => now;