| 
							- // Allpass filter declaration
 - //
 - // Written by Jezar at Dreampoint, June 2000
 - // http://www.dreampoint.co.uk
 - // This code is public domain
 - 
 - // adapted for use in VCV Rack by Martin Lueders
 - 
 - #ifndef _allpass_
 - #define _allpass_
 - #include "denormals.h"
 - 
 - class allpass
 - {
 - public:
 - 	allpass()
 - 	{
 - 		bufidx = 0;
 - 		buffer = 0;
 - 	};
 - 
 - 	~allpass()
 - 	{
 - 		if (buffer) delete buffer;
 - 	};
 - 
 -         void    makebuffer(float *buf, int size)
 -         {
 - 		if (buffer) delete buffer;
 -                 buffer = new float[size];
 -                 bufsize = size;
 - 		bufidx = 0;
 -         }
 - 
 -         void    deletebuffer()
 -         {
 -                 if(buffer) delete buffer;
 -                 bufsize = 0;
 -         };
 - 
 - 	void	setbuffer(float *buf, int size)
 - 	{
 - 		buffer = buf;
 - 		bufsize = size;
 - 	};
 - 
 - 	inline  float	process(float inp, float feedback);
 - 	void	mute()
 - 	{
 - 		for (int i=0; i<bufsize; i++) buffer[i] = 0.0;
 - 	};
 - 
 - // private:
 - 	float	*buffer;
 - 	int	bufsize;
 - 	int	bufidx;
 - };
 - 
 - 
 - // Big to inline - but crucial for speed
 - 
 - inline float allpass::process(float input, float feedback)
 - {
 - 	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
 
 
  |