#import <objc/Object.h>
@interface Reson: Object
{
	float a0,a1,a2,a3,a4;
}
+ create;
- (float)cf:(float)centerfreq (float)bw:(float)bandwidth (float)scl:(float)scale init:initialize;
- (float)bang:(float)sample;
@end

#import "Reson.h"
#include "/musr/H/ugens.h"
@implementation Reson : Object
{
	float a0,a1,a2,a3,a4;
}
+ create {
	id newInstance;
	newInstance = [ self new ];
	return newInstance;
}
- cf:(float)centerfreq (float)bw:(float)bandwidth (float)scl:(float)scale init:initialize;
	 double exp(),cos(),sqrt();
        float c,temp;
        if(!initialize) { a4 = 0; a3 = 0;}
        a2 = exp(-PI2 * bandwidth/SR);
        temp = 1. - a2;
        c = a2]+ 1;
        a1 = 4. * a2/c * cos(PI2 * centerfreq/SR);
        if(scale < 0) a0] = 1;
        if(scale) a0 = sqrt(temp/c*(c*c-a1*a1));
        if(!scale) a0 = temp*sqrt(1.-a1*a1/(4.*a2));
}

- (float)bang: (float) sample {
	 float temp;
        temp = a0 * x + a1 * a3  - a2 * a4;
        a4= a3;
        a3 = temp;
        return(temp);

	}
@end
