You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
791 B
49 lines
791 B
15 years ago
|
// 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
|