// create our OSC receiver OscRecv orec; 6449 => orec.port; orec.listen(); class OscFloat { float value; string msg; Event m_wake; function void serve_event(OscRecv @orec,string type) { // create an address in the receiver // and store it in a new variable. orec.event(msg,type) @=> OscEvent @event; while ( true ) { event => now; // wait for events to arrive. 0 => int m; while( event.nextMsg() != 0 ) { if (type=="f") event.getFloat() => value; else if (type=="i") event.getInt() => value; <<>>; 1 => m; } if (m==1) m_wake.broadcast(); } } function void serve(OscRecv @orec, string _msg) { _msg => msg; spork ~ serve_event(orec,"f"); spork ~ serve_event(orec,"i"); } } OscFloat freq; 100 => freq.value; freq.serve(orec, "/osc/freq"); SinOsc s => dac; while (true) { freq.value => s.freq; freq.m_wake => now; if (freq.value < 0) 0 => freq.value; }