Date created: Wednesday, June 2, 2010 10:21:28 PM. Last modified: Thursday, December 13, 2012 11:41:20 AM
Bass-Kick-Hi-Hat
This is my first ChucK script so its as basic as they get but its a start.
There are three scripts here: one for a bass drum, one for a snare drum and one for a hi-hat (why do I make the names of my menu items so cryptic?).
Play these all together with ChucK and you should get a complete beat (albeit a small one, only 1 bar long based on 1 second beats in 4/4 at 60 BMP):
Bass Drum:
// Get this file in sync: // I have used 1 second from now as it is longer than any // individual note length and is plenty of time for the machine // to get everythign loaded etc... 1::second => dur durDif; durDif - (now % durDif) => now; // Create a sound buffer for the bass drum, connect it to a gain // unit, and then out to the sound card SndBuf buffKick => Gain gainKick => dac; // Read our wav file into the sound buffer "kick.wav" => buffKick.read; // Set a gain level, no skill here just trial and error :S .4 => gainKick.gain; // Start an infinite loop in which we are setting the sound buffer position // to the start, allowing time to pass which allows for the buffer to read // through, and then reset the position of the sound buffer and allow more // time to pass, playing the sound again, varying the duration of time that // passed givnig us a sequence as it were while( true ) { 0 => buffKick.pos; 2::second => now; 0 => buffKick.pos; .5::second => now; 0 => buffKick.pos;; 1.5::second => now; } // Seeing as this is all based around one second time intivals, // this becomes a 60 BMP track and basic maths allows us to calculate // location of the off beats for the hi-hat and snares
Snare Drum:
// Get this file in sync: // I have used 1 second from now as it is longer than any // individual note length and is plenty of time for the machine // to get everythign loaded etc... 1::second => dur durDif; durDif - (now % durDif) => now; // Create a sound buffer for the snare drum, connect it to a gain // unit, and then out to the sound card SndBuf buffSnare => Gain gainSnare => dac; // Read our wav file into the sound buffer "snare.wav" => buffSnare.read; // Set a gain level, no skill here just trial and error :S .5 => gainSnare.gain; // Start an infinite loop to play some riddims based on our // seqeunce outlined below! while( true ) { 1::second => now; 0 => buffSnare.pos; 2::second => now; 0 => buffSnare.pos; 1::second => now; }
Hi-Hat:
// Get this file in sync: // I have used 1 second from now as it is longer than any // individual note length and is plenty of time for the machine // to get everythign loaded etc... 1::second => dur durDif; durDif - (now % durDif) => now; // Create a sound buffer for the hi-hat, connect it to a gain // unit, and then out to the sound card SndBuf buffHat => Gain gainHat => dac; // Read our wav file into the sound buffer "hihat.wav" => buffHat.read; // Set a gain level, no skill here just trial and error :S .1 => gainHat.gain; // Start an infinite loop to play some riddims based on our // seqeunce outlined below! while( true ) { .25::second => now; 0 => buffHat.pos; .25::second => now; 0 => buffHat.pos; .5::second => now; }
Need Sounds? In my scripts I reference some WAV files, I haven't included them here but they are included in ChucK when you download it.
Previous page: Valgrind Notes
Next page: Fight Ring