add auto zoombar/status color, fix 3 batchrender boobies, rotate plugin tweaks, add...
[goodguy/cinelerra.git] / cinelerra-5.1 / plugins / freeverb / Components / comb.hpp
1 // Comb filter class declaration\r
2 //\r
3 // Written by Jezar at Dreampoint, June 2000\r
4 // http://www.dreampoint.co.uk\r
5 // This code is public domain\r
6 \r
7 #ifndef _comb_\r
8 #define _comb_\r
9 \r
10 #include "denormals.h"\r
11 \r
12 class comb\r
13 {\r
14 public:\r
15                                         comb();\r
16                         void    setbuffer(float *buf, int size);\r
17         inline  float   process(float inp);\r
18                         void    mute();\r
19                         void    setdamp(float val);\r
20                         float   getdamp();\r
21                         void    setfeedback(float val);\r
22                         float   getfeedback();\r
23 private:\r
24         float   feedback;\r
25         float   filterstore;\r
26         float   damp1;\r
27         float   damp2;\r
28         float   *buffer;\r
29         int             bufsize;\r
30         int             bufidx;\r
31 };\r
32 \r
33 \r
34 // Big to inline - but crucial for speed\r
35 \r
36 inline float comb::process(float input)\r
37 {\r
38         float output;\r
39 \r
40         output = buffer[bufidx];\r
41         undenormalise(output);\r
42 \r
43         filterstore = (output*damp2) + (filterstore*damp1);\r
44         undenormalise(filterstore);\r
45 \r
46         buffer[bufidx] = input + (filterstore*feedback);\r
47 \r
48         if(++bufidx>=bufsize) bufidx = 0;\r
49 \r
50         return output;\r
51 }\r
52 \r
53 #endif //_comb_\r
54 \r
55 //ends\r
56 \r
57 \r
58 \r
59 \r
60 \r