Merge CV, ver=5.1; ops/methods from HV, and interface from CV where possible
[goodguy/history.git] / cinelerra-5.1 / plugins / freeverb / Components / comb.hpp
diff --git a/cinelerra-5.1/plugins/freeverb/Components/comb.hpp b/cinelerra-5.1/plugins/freeverb/Components/comb.hpp
new file mode 100644 (file)
index 0000000..b852c4e
--- /dev/null
@@ -0,0 +1,60 @@
+// Comb filter class declaration\r
+//\r
+// Written by Jezar at Dreampoint, June 2000\r
+// http://www.dreampoint.co.uk\r
+// This code is public domain\r
+\r
+#ifndef _comb_\r
+#define _comb_\r
+\r
+#include "denormals.h"\r
+\r
+class comb\r
+{\r
+public:\r
+                                       comb();\r
+                       void    setbuffer(float *buf, int size);\r
+       inline  float   process(float inp);\r
+                       void    mute();\r
+                       void    setdamp(float val);\r
+                       float   getdamp();\r
+                       void    setfeedback(float val);\r
+                       float   getfeedback();\r
+private:\r
+       float   feedback;\r
+       float   filterstore;\r
+       float   damp1;\r
+       float   damp2;\r
+       float   *buffer;\r
+       int             bufsize;\r
+       int             bufidx;\r
+};\r
+\r
+\r
+// Big to inline - but crucial for speed\r
+\r
+inline float comb::process(float input)\r
+{\r
+       float output;\r
+\r
+       output = buffer[bufidx];\r
+       undenormalise(output);\r
+\r
+       filterstore = (output*damp2) + (filterstore*damp1);\r
+       undenormalise(filterstore);\r
+\r
+       buffer[bufidx] = input + (filterstore*feedback);\r
+\r
+       if(++bufidx>=bufsize) bufidx = 0;\r
+\r
+       return output;\r
+}\r
+\r
+#endif //_comb_\r
+\r
+//ends\r
+\r
+\r
+\r
+\r
+\r