diff options
author | Robin Gareus <robin@gareus.org> | 2016-02-03 20:42:47 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-02-22 22:06:47 +0100 |
commit | 7d7f63363b13c06cd02e0f810523d897921e660a (patch) | |
tree | bd97ad9cbaa4b1342ea833dcf41e3e67991624f4 /libs/ardour/ardour/dsp_filter.h | |
parent | 4303fbfc0532cc6253d7b36c2dd1162f79d15e98 (diff) |
basic DSP lib (for lua bindings)
Diffstat (limited to 'libs/ardour/ardour/dsp_filter.h')
-rw-r--r-- | libs/ardour/ardour/dsp_filter.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/libs/ardour/ardour/dsp_filter.h b/libs/ardour/ardour/dsp_filter.h new file mode 100644 index 0000000000..ae2928de93 --- /dev/null +++ b/libs/ardour/ardour/dsp_filter.h @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2016 Robin Gareus <robin@gareus.org> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ +#ifndef _dsp_filter_h_ +#define _dsp_filter_h_ + +#include <stdint.h> +#include "ardour/libardour_visibility.h" + +namespace ARDOUR { namespace DSP { + + void memset (float *data, const float val, const uint32_t n_samples); + void mmult (float *data, float *mult, const uint32_t n_samples); + + + class LIBARDOUR_API LowPass { + public: + LowPass (double samplerate, float freq); + void proc (float *data, const uint32_t n_samples); + void ctrl (float *data, const float val, const uint32_t n_samples); + void set_cutoff (float freq); + void reset () { _z = 0.f; } + private: + float _rate; + float _z; + float _a; + }; + + class LIBARDOUR_API BiQuad { + public: + enum Type { + LowPass, + HighPass, + BandPassSkirt, + BandPass0dB, + Notch, + AllPass, + Peaking, + LowShelf, + HighShelf + }; + + BiQuad (double samplerate); + BiQuad (const BiQuad &other); + + void run (float *data, const uint32_t n_samples); + void compute (Type, double freq, double Q, double gain); + void reset () { _z1 = _z2 = 0.0; } + private: + double _rate; + float _z1, _z2; + double _a1, _a2; + double _b0, _b1, _b2; + }; + +} } /* namespace */ +#endif |