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

midi

开发平台:

Unix_Linux

  1. // Comb filter class declaration
  2. //
  3. // Written by Jezar at Dreampoint, June 2000
  4. // http://www.dreampoint.co.uk
  5. // This code is public domain
  6. #ifndef _comb_
  7. #define _comb_
  8. #include "denormals.h"
  9. /**
  10. * Combination filter
  11. *Takes multiple audio channels and mix them for one ear
  12. */
  13. class comb
  14. {
  15. public:
  16.     comb();
  17.     void    setbuffer(float *buf, int size);
  18.     inline  float    process(float inp);
  19.     void    mute();
  20.     void    setdamp(float val);
  21.     float    getdamp();
  22.     void    setfeedback(float val);
  23.     float    getfeedback();
  24. private:
  25.     float    feedback;
  26.     float    filterstore;
  27.     float    damp1;
  28.     float    damp2;
  29.     float    *buffer;
  30.     int    bufsize;
  31.     int    bufidx;
  32. };
  33. // Big to inline - but crucial for speed
  34. inline float comb::process(float input)
  35. {
  36. /* FIXME
  37. * comb::process is not really ear-friendly the tunning values must
  38. * be changed*/
  39.     float output;
  40.     output = undenormalise( buffer[bufidx] );
  41.     filterstore = undenormalise(output*damp2);
  42.     buffer[bufidx] = input + filterstore*feedback;
  43.     if(++bufidx>=bufsize) bufidx = 0;
  44.     return output;
  45. }
  46. #endif //_comb_
  47. //ends