// Allpass filter declaration // // Written by Jezar at Dreampoint, June 2000 // http://www.dreampoint.co.uk // This code is public domain #ifndef _allpass_ #define _allpass_ #include "denormals.h" class allpass { public: allpass(); void setbuffer(float *buf, int size); inline float process(float inp); void mute(); void setfeedback(float val); float getfeedback(); // private: float feedback; float *buffer; int bufsize; int bufidx; }; // Big to inline - but crucial for speed inline float allpass::process(float input) { float output; float bufout; bufout = buffer[bufidx]; undenormalise(&bufout); output = -input + bufout; buffer[bufidx] = input + (bufout*feedback); if(++bufidx>=bufsize) bufidx = 0; return output; } #endif//_allpass //ends