// name: interpolate.ck // desc: using vec3 as a non-linear, slewing interpolator // this is quite useful to making a percentage progress // towards a goal, in an amount proportional to the slew // and some delta time // connect SinOsc foo => dac; // the interpolator vec3 i; // the interpolation rate 10::ms => dur irate; // set initial .value, .goal, .slew i.set( 440, 440, .05 * (second/irate) ); // spork interpolate function spork ~ interpolate( irate ); // main shred sets the goal while( true ) { // set interpolator goal i.update( Math.random2f(200,1000) ); // every so often 500::ms => now; } // function to drive interpolator(s) concurrently fun void interpolate( dur delta ) { while( true ) { // interpolate (can also get new value via .value) i.interp( delta ) => foo.freq; // advance time by rate delta => now; } }