allpass.hpp
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:1k
源码类别:

midi

开发平台:

Unix_Linux

  1. // Allpass filter declaration
  2. //
  3. // Written by Jezar at Dreampoint, June 2000
  4. // http://www.dreampoint.co.uk
  5. // This code is public domain
  6. #ifndef _allpass_
  7. #define _allpass_
  8. #include "denormals.h"
  9. class allpass
  10. {
  11. public:
  12.         allpass();
  13.     void    setbuffer(float *buf, int size);
  14.     inline  float    process(float inp);
  15.     void    mute();
  16.     void    setfeedback(float val);
  17.     float    getfeedback();
  18. // private:
  19.     float    feedback;
  20.     float    *buffer;
  21.     int    bufsize;
  22.     int    bufidx;
  23. };
  24. // Big to inline - but crucial for speed
  25. inline float allpass::process(float input)
  26. {
  27.     float output;
  28.     float bufout;
  29.     bufout = undenormalise( buffer[bufidx] );
  30.     output = -input + bufout;
  31.     buffer[bufidx] = input + (bufout*feedback);
  32.     if(++bufidx>=bufsize) bufidx = 0;
  33.     return output;
  34. }
  35. #endif//_allpass
  36. //ends