Advanced Filters

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

var a = new maximJs.maxiOsc();
var xs = [0,0,0], ys = [0,0,0];
var a0, a1, a2, b0, b1, b2;
var f0 = 400; //THE FREQUENCY
var Q = 1.0;

var mySwitchableOsc = new maximJs.maxiOsc();


var cos = Math.cos;
var w0 = 2*Math.PI*f0/44100;
var alpha = Math.sin(w0)/(2*Q);
// Band-pass reson:
// b0 =   alpha;
// b1 =   0;
// b2 =  -1 * alpha;
// a0 =   1 + alpha;
// a1 =  -2*cos(w0);
// a2 =   1 - alpha;

//Notch:
b0 =   1;
b1 =  -2*cos(w0);
b2 =   1;
a0 =   1 + alpha;
a1 =  -2*cos(w0);
a2 =   1 - alpha;

//LPF:
// b0 =  (1 - cos(w0))/2;
// b1 =   1 - cos(w0);
// b2 =  (1 - cos(w0))/2;
// a0 =   1 + alpha;
// a1 =  -2*cos(w0);
// a2 =   1 - alpha;



audio.play = function() {//this is where the magic happens. Very slow magic.
	xs[0] = mySwitchableOsc.sawn(400);
	ys[0] = (b0/a0)*xs[0] + (b1/a0)*xs[1] + (b2/a0)*xs[2]
	- (a1/a0)*ys[1] - (a2/a0)*ys[2];

	this.output = ys[0];

	ys[2] = ys[1]; ys[1] = ys[0];
	xs[2] = xs[1]; xs[1] = xs[0];
}