Drum Machine

using samples to make a drum machine

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;

function setup(){
	// OutputIsArray(true, 2);
	loadSample('./kick1.wav', kick);
	loadSample('./snare1.wav', snare);
	loadSample('./hat12.wav', hat);

}

function play(){
	// 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.
	
	output=sampleOut;//left channel

	// output[0]=sampleOut;//left channel
	// output[1]=sampleOut;//right channel
	
	kicktrigger = 0;//set trigger to 0 at the end of each sample to guarantee retriggering.
	snaretrigger = 0;
	hattrigger = 0;
}