//--------------------------------------| // Dyno demo 1: "Limiter? I hardly know 'er!" // Takes otf_07.ck, cranks the gain up obscenely high, then limits // it so it won't clip. // // authors: Matt Hoffman (mdhoffma at cs.princeton.edu) // Ge Wang (gewang at cs.princeton.edu) // Perry Cook (prc at cs.princeton.edu) //--------------------------------------| // this synchronizes to period .5::second => dur T; T - (now % T) => now; // construct the patch SndBuf buf => Gain g => Dyno dy => JCRev r => dac; me.sourceDir() + "/../data/kick.wav" => buf.read; .01 => r.mix; // make gain way too high, i.e. force clipping 100 => g.gain; // turn on limiter functionality dy.limit(); // compensate for the limiter's gain reduction 5 => dy.gain; // uncomment this to turn off the limiter. note that just because clipping // sounds cool here doesn't mean it will in your patch. // -1 => dy.op; // where we actually want to start 25 => int where; // time loop while( true ) { Math.random2f(.8,.9) => buf.gain; // note: Math.randomf() returns value between 0 and 1 if( Math.randomf() > .75 ) { 0 => int i; while( i < 8 ) { i / 8.0 => buf.gain; where => buf.pos; (1.0/8.0)::T => now; i++; } while( i > 0 ) { i / 8.0 => buf.gain; where => buf.pos; (1.0/8.0)::T => now; i--; } } else { .9 => buf.gain; where => buf.pos; .25::T => now; .3 => buf.gain; where => buf.pos; .25::T => now; .3 => buf.gain; where => buf.pos; .25::T => now; .9 => buf.gain; where => buf.pos; .25::T => now; .3 => buf.gain; where => buf.pos; .25::T => now; .3 => buf.gain; where => buf.pos; .25::T => now; .9 => buf.gain; where => buf.pos; .25::T => now; .3 => buf.gain; where => buf.pos; .25::T => now; } }