// Listing 4.10 Using arrays to further improve your drum machine // Drum Machine, version 3.0 // by block-rockin programmer, Dec 31, 1999 // SndBufs for kick (bass) and snare drums SndBuf kick => Gain master => dac; // (1) kick, snare, and hihat SndBuf snare => master; // SndBufs into mixer to dac SndBuf hihat => master; // load up some samples of those me.dir()+"/audio/kick_01.wav" => kick.read; me.dir()+"/audio/snare_01.wav" => snare.read; me.dir()+"/audio/hihat_01.wav" => hihat.read; 0.3 => hihat.gain; 0.15 :: second => dur tempo; // scores (arrays) to tell drums when to play [1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0] @=> int kickHits[]; // (1) Arrays to control when kick [0,0,1,0,0,0,1,0,0,0,0,0,1,1,1,1] @=> int snareHits[]; // and snare play while (true) { 0 => int beat; while (beat < kickHits.cap()) { // play kick drum on based on array value if (kickHits[beat]) // Checks array at location { // beat to see if you should 0 => kick.pos; // play the kick drum now. } if (snareHits[beat]) // Checks array at location { // beat to see if you should 0 => snare.pos; // play the snare drum now. } // always play hihat 1 => hihat.pos; // Play hihat on every beat for now. tempo => now; // Advance time; lets sound synthesize. beat++; // Increments to next beat, and goes back } // and does the inner while loop again. }