--- /dev/null
+// 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