basic DSP lib (for lua bindings)
[ardour.git] / libs / ardour / ardour / dsp_filter.h
1 /*
2  * Copyright (C) 2016 Robin Gareus <robin@gareus.org>
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17  *
18  */
19 #ifndef _dsp_filter_h_
20 #define _dsp_filter_h_
21
22 #include <stdint.h>
23 #include "ardour/libardour_visibility.h"
24
25 namespace ARDOUR { namespace DSP {
26
27         void memset (float *data, const float val, const uint32_t n_samples);
28         void mmult (float *data, float *mult, const uint32_t n_samples);
29
30
31         class LIBARDOUR_API LowPass {
32                 public:
33                         LowPass (double samplerate, float freq);
34                         void proc (float *data, const uint32_t n_samples);
35                         void ctrl (float *data, const float val, const uint32_t n_samples);
36                         void set_cutoff (float freq);
37                         void reset () { _z =  0.f; }
38                 private:
39                         float _rate;
40                         float _z;
41                         float _a;
42         };
43
44         class LIBARDOUR_API BiQuad {
45                 public:
46                         enum Type {
47                                 LowPass,
48                                 HighPass,
49                                 BandPassSkirt,
50                                 BandPass0dB,
51                                 Notch,
52                                 AllPass,
53                                 Peaking,
54                                 LowShelf,
55                                 HighShelf
56                         };
57
58                         BiQuad (double samplerate);
59                         BiQuad (const BiQuad &other);
60
61                         void run (float *data, const uint32_t n_samples);
62                         void compute (Type, double freq, double Q, double gain);
63                         void reset () { _z1 = _z2 = 0.0; }
64                 private:
65                         double _rate;
66                         float  _z1, _z2;
67                         double _a1, _a2;
68                         double _b0, _b1, _b2;
69         };
70
71 } } /* namespace */
72 #endif