|
- //
- // Biquad.h
- //
- // Created by Nigel Redmon on 11/24/12
- // EarLevel Engineering: earlevel.com
- // Copyright 2012 Nigel Redmon
- //
- // For a complete explanation of the Biquad code:
- // http://www.earlevel.com/main/2012/11/26/biquad-c-source-code/
- //
- // License:
- //
- // This source code is provided as is, without warranty.
- // You may copy and distribute verbatim copies of this document.
- // You may modify and use this source code to create binary code
- // for your own purposes, free or commercial.
- //
-
- #ifndef Biquad_h
- #define Biquad_h
-
- namespace rack_plugin_Autodafe {
-
- enum {
- bq_type_lowpass = 0,
- bq_type_highpass,
- bq_type_bandpass,
- bq_type_notch,
- bq_type_peak,
- bq_type_lowshelf,
- bq_type_highshelf
- };
-
- class Biquad {
- public:
- Biquad();
- Biquad(int type, double Fc, double Q, double peakGainDB);
- ~Biquad();
- void setType(int type);
- void setQ(double Q);
- void setFc(double Fc);
- void setPeakGain(double peakGainDB);
- void setBiquad(int type, double Fc, double Q, double peakGain);
- float process(float in);
-
- protected:
- void calcBiquad(void);
-
- int type;
- double a0, a1, a2, b1, b2;
- double Fc, Q, peakGain;
- double z1, z2;
- };
-
- inline float Biquad::process(float in) {
- double out = in * a0 + z1;
- z1 = in * a1 + z2 - b1 * out;
- z2 = in * a2 - b2 * out;
- return out;
- }
-
- } // namespace rack_plugin_Autodafe
-
- #endif // Biquad_h
|