1 /*
2 ** Surge Synthesizer is Free and Open Source Software
3 **
4 ** Surge is made available under the Gnu General Public License, v3.0
5 ** https://www.gnu.org/licenses/gpl-3.0.en.html
6 **
7 ** Copyright 2004-2020 by various individuals as described by the Git transaction log
8 **
9 ** All source at: https://github.com/surge-synthesizer/surge.git
10 **
11 ** Surge was a commercial product from 2004-2018, with Copyright and ownership
12 ** in that period held by Claes Johanson at Vember Audio. Claes made Surge
13 ** open source in September 2018.
14 */
15 
16 #pragma once
17 #include "Effect.h"
18 #include "BiquadFilter.h"
19 #include "DspUtilities.h"
20 #include "AllpassFilter.h"
21 
22 #include "VectorizedSvfFilter.h"
23 
24 #include <vt_dsp/halfratefilter.h>
25 #include <vt_dsp/lipol.h>
26 
27 class Eq3BandEffect : public Effect
28 {
29     lipol_ps gain alignas(16);
30     lipol_ps mix alignas(16);
31 
32     float L alignas(16)[BLOCK_SIZE], R alignas(16)[BLOCK_SIZE];
33 
34   public:
35     enum eq3_params
36     {
37         eq3_gain1 = 0,
38         eq3_freq1,
39         eq3_bw1,
40 
41         eq3_gain2,
42         eq3_freq2,
43         eq3_bw2,
44 
45         eq3_gain3,
46         eq3_freq3,
47         eq3_bw3,
48 
49         eq3_gain,
50         eq3_mix,
51 
52         eq3_num_ctrls,
53     };
54 
55     Eq3BandEffect(SurgeStorage *storage, FxStorage *fxdata, pdata *pd);
56     virtual ~Eq3BandEffect();
get_effectname()57     virtual const char *get_effectname() override { return "EQ"; }
58     virtual void init() override;
59     virtual void process(float *dataL, float *dataR) override;
60     virtual void suspend() override;
61     void setvars(bool init);
62     virtual void init_ctrltypes() override;
63     virtual void init_default_values() override;
64     virtual const char *group_label(int id) override;
65     virtual int group_label_ypos(int id) override;
66 
67     virtual void handleStreamingMismatches(int streamingRevision,
68                                            int currentSynthStreamingRevision) override;
69 
70   private:
71     BiquadFilter band1, band2, band3;
72     int bi; // block increment (to keep track of events not occurring every n blocks)
73 };
74