// Idea with inspiration from Michael Berger // incoming OSC data values float XYZ[3]; 0.5 => XYZ[0]; 0.5 => XYZ[1]; 0.5 => XYZ[2]; // create our OSC receiver OscRecv rec; 8000 => rec.port; // start listening (launch thread) rec.listen(); rec.event("/accelerometer/0, f") @=> OscEvent accelX; rec.event("/accelerometer/1, f") @=> OscEvent accelY; rec.event("/accelerometer/2, f") @=> OscEvent accelZ; // spork the shreds // OSC listeners spork ~ ListenerAccel(accelX, 0); spork ~ ListenerAccel(accelY, 1); spork ~ ListenerAccel(accelZ, 2); 1 => int check; fun void ListenerAccel( OscEvent event, int index ) { while ( true ) { event => now; while( event.nextMsg() ) { if (check == 1) { <<<"message received">>>; 0 => check; } event.getFloat() => XYZ[index]; //<<>>; } } } SndBuf sampler => Envelope samplerEnv => dac; "amen.wav" => sampler.read; 10::ms => samplerEnv.duration; while (true) { samplerEnv.target(0.0); sampler.length() => dur totalFile; XYZ[0] + XYZ[1] + XYZ[2] => float total; total / 3 => total; ((total + 1.0) * 0.5) * totalFile => dur start; 100::ms => dur duration; start + duration => dur end; if (end > totalFile) { end - duration => start; } sampler.pos((start / samp) $ int); samplerEnv.target(1.0); sampler.rate(total); sampler.gain(total); duration => now; }