// towers of annoy // demonstrates: recursion, arrays, sndbuf, stereo, questionable sonification // number of disks 11 => int disks; // duration for each move 200::ms => dur wait; // step number 0 => int STEPS; // gain to pan to dac Gain g => Pan2 pan => JCRev r => dac; // set gain .5 => g.gain; // set mix .15 => r.mix; // the pegs (0 not used - for easy indexing) SndBuf pegs[4]; // load files "data/hihat-open.wav" => pegs[1].read; "data/hihat.wav" => pegs[2].read; "data/snare-chili.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; // pan dest - 2 => pan.pan; // advance time wait => now; // move onto the biggest if( num > 1 ) hanoi( num - 1, other, dest, src ); } hanoi( disks, 1, 3, 2 ); <<< "done.", "" >>>; // let time pass for reverb to go... 2::second => now;