//--------------------------------------| // Dyno demo 3: "Ducker? She didn't even throw a punch!" // Shows how to make one sound fade out when another comes up. This is // probably more often used by radio DJs than electronic musicians, but // what the hey. // // authors: Matt Hoffman (mdhoffma at cs.princeton.edu) //--------------------------------------| // A kick drum that will get quieter when the SinOsc swells. SndBuf buf => Gain g1 => Dyno dy => JCRev r => dac; me.sourceDir() + "/../data/kick.wav" => buf.read; .05 => r.mix; // A SinOsc that, when its volume swells, will make the kick drum get quieter. SinOsc s => Gain g2 => r; 220 => s.freq; // Make dy go into ducker mode dy.duck(); // spork the shred that makes the kick kick. spork ~ playKick(); // th is the phase of the low-freq sine that modulates the SinOsc's gain 0 => float th; // make the SinOsc a bit less annoying 0.5 => g2.gain; // loop while( true ) { // modulate the SinOsc's gain Math.sin(th) + 1.0 => s.gain; // send the SinOsc's last sample to dy (manually. yes, this is a pain.) s.last() => dy.sideInput; // advance the modulating sine's phase a tiny bit th + 0.00003 => th; // advance time by one sample. 1::samp => now; } // retriggers the kick drum over and over and over and over and over. fun void playKick() { while(true) { 0 => buf.pos; 500::ms => now; } }