Drum Machine

using samples to make a drum machine

var audio = new maximJs.maxiAudio();
audio.init();

var kick = new maximJs.maxiSample();
var snare = new maximJs.maxiSample();
var hat = new maximJs.maxiSample();

var timer = new maximJs.maxiOsc();

var currentCount,lastCount,playHead = 0;
var kickhit = [1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1]; //This is the sequence for the kick
var snarehit=[0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0];//This is the sequence for the snare
var hathit=[0,0,1,0, 0,0,1,0, 0,0,1,0, 0,0,1,1];//This is the sequence for the snare

var kicktrigger,snaretrigger, hattrigger;
var sampleOut;

audio.loadSample('audio/kick1.wav', kick);
audio.loadSample('audio/snare1.wav', snare);
audio.loadSample('audio/hat12.wav', hat);


audio.play = function(){
	// if(kick.isReady() && snare.isReady()){
	currentCount=Math.floor(timer.phasor(8));//this sets up a metronome that ticks 8 times a second
	
	
	if (lastCount!=currentCount) {//if we have a new timer int this sample, play the sound
		
		kicktrigger=kickhit[playHead%16];//get the value out of the array for the kick
		snaretrigger=snarehit[playHead%16];//same for the snare
		hattrigger=hathit[playHead%16];

		playHead++;//iterate the playhead
		lastCount=0;//reset the metrotest
	}

	if (kicktrigger==1) {//if the sequence has a 1 in it
		kick.trigger();//reset the playback position of the sample to 0 (the beginning)
		
	}
	
	if (snaretrigger==1) {
		snare.trigger();//likewise for the snare
		
	}

	if (hattrigger==1) {
		hat.trigger();//likewise for the snare	
	}
	
	sampleOut=hat.playOnce()*0.2+kick.playOnce()+snare.playOnce();//just play the files. No looping.
	
	this.output=sampleOut;//left channel

	kicktrigger = 0;//set trigger to 0 at the end of each sample to guarantee retriggering.
	snaretrigger = 0;
	hattrigger = 0;
}