// towers of annoy // demonstrates: recursion, arrays, stereo, sndbuf, // questionable sonification // number of disks 10 => int disks; // min duration for each move 200::ms => dur wait => dur the_wait; // step number 0 => int STEPS; // gain to pan to dac Gain g => Pan2 pan; // stereo from here pan.left => NRev r1 => dac.left; pan.right => NRev r2 => dac.right; // set gain .5 => g.gain; // set mix .1 => r1.mix => r2.mix; // the pegs (0 not used - for easy indexing) SndBuf pegs[4]; // load files me.dir() + "/data/snare-chili.wav" => pegs[1].read; me.dir() + "/data/kick.wav" => pegs[2].read; me.dir() + "/data/snare-hop.wav" => pegs[3].read; // connect to gain for( 1 => int i; i < pegs.size(); i++ ) pegs[i] => g; // the hanoi fun void hanoi( int num, int src, int dest, int other ) { // move all except the biggest if( num > 1 ) hanoi( num - 1, src, other, dest ); // increment steps STEPS++; // move the biggest <<< "step", STEPS, " | move disk from peg", src, " -> ", "peg", dest >>>; // sonify 0 => pegs[dest].pos; // gain Math.random2f( .2, .9 ) => pegs[dest].gain; // pan .8 * (dest - 2) => pan.pan; // advance time the_wait => now; // move onto the biggest if( num > 1 ) hanoi( num - 1, other, dest, src ); } // start it hanoi( disks, 1, 3, 2 ); <<<"done!">>>; // let time pass for reverb to go... 2::second => now;