Sequencing Example

var outputs = new Module.VectorDouble();
var moreoutputs = new Module.VectorDouble();//this data will be used to make an envelope. Value and time to value in ms.

var filtered,patch1,patch2,tune,delayed,mixed,ramp,filtered2,noise,pan,more;//a bunch of patch cables
var beat,lastbeat, morebeats, morebeats2,lastmorebeats;//some rhythmic elemts
// var env = [200,0,0,50];//the kick drum pitch envelope data
var env = GetArrayAsVectorDbl([200,0,0,50]);
// var env2 = [10000,0,9000,5,0,5];//the hi hat pitch envelope dat
var env2 = GetArrayAsVectorDbl([10000,0,9000,5,0,5]);
var melody = [600,0,0,650,0,0,400,0,0,425,0,300,0,315,0,315, 0];//the melody data
var rhythm1 = [1,0,0,1,0,0,1,0,0,1,0,0,1,0,1,0];//another way of doing a rhythm

var a = new maximJs.maxiOsc();
var c = new maximJs.maxiOsc();
var d = new maximJs.maxiOsc();
var e = new maximJs.maxiOsc();
var g = new maximJs.maxiOsc();
var h = new maximJs.maxiOsc();
var i = new maximJs.maxiOsc();
var j = new maximJs.maxiOsc();

var squarewave = new maximJs.maxiOsc();//some oscillators maxiOsc...

var b = new maximJs.maxiEnvelope();
var f  = new maximJs.maxiEnvelope();//two envelopers

var delay = new maximJs.maxiDelayline();//a delay line
var myfilter = new maximJs.maxiFilter();
var antia = new maximJs.maxiFilter();// a FAT filter
var mymix = new maximJs.maxiMix();
var bobbins = new maximJs.maxiMix();//some panning busses
var beats = new maximJs.maxiSample();

function setup() {//some inits
	outputs.push_back(0);
	outputs.push_back(0);

	moreoutputs.push_back(0);
	moreoutputs.push_back(0);
	
	b.amplitude=env.get(0);//starting value for envelope b
	f.amplitude=env2.get(0);//same for f
	// beats.load("/Users/chris/src/Maximilian/beat2.wav");//put a path to a soundfile here. Wav format only.
	loadSample("./beat2.wav", beats);

	// printf("Summary:\n%s", beats.getSummary());//get info on samples if you like
	
	OutputIsArray(true, 2);
}

function play() {//this is where the magic happens. Very slow magic.
	if(beats.isReady()){
	beat = Math.floor(c.phasor(8));//this oscillator is now a counter
	morebeats = Math.floor(e.phasor(0.5,0,16));//so is this one

	patch1 = b.line(4,env);//here's envelope b
	patch2 = f.line(6,env2);//here's envelop f

	tune=g.saw(melody[morebeats]*0.25);

	if (lastbeat!=beat) {//this is a nice sample and hold routine for the kick drum 
		f.trigger(0, env2.get(0));//it runs off the hi hat.
		
		if (rhythm1[morebeats]==1) {
			b.trigger(0, env.get(0));//and gets played when it's time.
			// console.log("B: " + morebeats);
		}
	}

	lastbeat=beat;//let's start again. It's a loop
	ramp=i.phasor(0.5,1,2048);//create a basic ramp
	pan=j.phasor(0.25);//some panning from a phasor (object is equal power)
	delayed=delay.dl(tune, ramp, 0.9)*0.125;//the delay line
	//then it all gets mixed.
	mixed=((a.sinewave(patch1)*0.5)+((d.saw(patch2))*0.125)+(delayed*0.3)*0.5);
	//add some noise
	noise=i.noise()*0.25;
	filtered2=beats.play(1*(1.0/16.0),0,beats.getLength());
	// filtered2=beats.play(-1);

	more=squarewave.pulse(melody[morebeats],pan)*0.05;
	

	//filter the noise! this lores takes values between 1 and 100 for res, and freq for cutoff.
	filtered=myfilter.lores(filtered2, 1+(pan*10000), 10)*0.4;
	
	//now we send the sounds to some stereo busses.
	mymix.stereo(more+mixed+delayed, outputs, 1-pan);
	bobbins.stereo(filtered, moreoutputs, pan);//invert the pan
	
	// mixing
	output[0]=outputs.get(0)+moreoutputs.get(0);//stick it in the out!!
	output[1]=outputs.get(1)+moreoutputs.get(1);
}	
}