ed2df993884471d155f5e552c9419396525f0702
[vlc.git] / modules / audio_filter / spatializer / allpass.hpp
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
7 #ifndef _allpass_
8 #define _allpass_
9 #include "denormals.h"
10
11 class allpass
12 {
13 public:
14         allpass();
15         void    setbuffer(float *buf, int size);
16         inline  float   process(float inp);
17         void    mute();
18         void    setfeedback(float val);
19         float   getfeedback();
20 // private:
21         float   feedback;
22         float   *buffer;
23         int     bufsize;
24         int     bufidx;
25 };
26
27
28 // Big to inline - but crucial for speed
29
30 inline float allpass::process(float input)
31 {
32         float output;
33         float bufout;
34         
35         bufout = buffer[bufidx];
36         undenormalise(bufout);
37         
38         output = -input + bufout;
39         buffer[bufidx] = input + (bufout*feedback);
40
41         if(++bufidx>=bufsize) bufidx = 0;
42
43         return output;
44 }
45
46 #endif//_allpass
47
48 //ends