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.
56 lines
916 B
56 lines
916 B
15 years ago
|
// Comb filter class declaration
|
||
|
//
|
||
|
// Written by Jezar at Dreampoint, June 2000
|
||
|
// http://www.dreampoint.co.uk
|
||
|
// This code is public domain
|
||
|
|
||
|
#ifndef _comb_
|
||
|
#define _comb_
|
||
|
|
||
|
#include "denormals.h"
|
||
|
|
||
|
class comb
|
||
|
{
|
||
|
public:
|
||
|
comb();
|
||
|
void setbuffer(float *buf, int size);
|
||
|
inline float process(float inp);
|
||
|
void mute();
|
||
|
void setdamp(float val);
|
||
|
float getdamp();
|
||
|
void setfeedback(float val);
|
||
|
float getfeedback();
|
||
|
private:
|
||
|
float feedback;
|
||
|
float filterstore;
|
||
|
float damp1;
|
||
|
float damp2;
|
||
|
float *buffer;
|
||
|
int bufsize;
|
||
|
int bufidx;
|
||
|
};
|
||
|
|
||
|
|
||
|
// Big to inline - but crucial for speed
|
||
|
|
||
|
inline float comb::process(float input)
|
||
|
{
|
||
|
float output;
|
||
|
|
||
|
output = buffer[bufidx];
|
||
|
undenormalise(output);
|
||
|
|
||
|
filterstore = (output*damp2) + (filterstore*damp1);
|
||
|
undenormalise(filterstore);
|
||
|
|
||
|
buffer[bufidx] = input + (filterstore*feedback);
|
||
|
|
||
|
if(++bufidx>=bufsize) bufidx = 0;
|
||
|
|
||
|
return output;
|
||
|
}
|
||
|
|
||
|
#endif //_comb_
|
||
|
|
||
|
//ends
|