22#include " IPlug_include_in_plug_src.h"
33#include " IControls.h"
44
5-
6-
75#include " ./controls/SVGLayerKnob.cpp"
86
7+ #include " ./controls/IBButtonHold.cpp"
98
109Plateau::Plateau (const InstanceInfo& info)
1110: iplug::Plugin(info, MakeConfig(kNumParams , kNumPresets ))
@@ -26,9 +25,12 @@ Plateau::Plateau(const InstanceInfo& info)
2625 GetParam (kFreeze )->InitBool (" Freeze" , false );
2726 GetParam (kClear )->InitBool (" Clear" , false );
2827 GetParam (kTunedMode )->InitBool (" Tuned Mode" , false );
29- GetParam (kDiffuseInput )->InitBool (" Diffuse Input" , false );
30-
28+ GetParam (kDiffuseInput )->InitBool (" Diffuse Input" , true );
3129
30+ reverb.setSampleRate (GetSampleRate ());
31+ envelope.setSampleRate (GetSampleRate ());
32+ envelope.setTime (0 .004f );
33+ envelope._value = 1 .f ;
3234
3335#if IPLUG_EDITOR // http://bit.ly/2S64BDd
3436 mMakeGraphicsFunc = [&]() {
@@ -63,22 +65,126 @@ Plateau::Plateau(const InstanceInfo& info)
6365 pGraphics->AttachControl (new IBSwitchControl (IRECT::MakeXYWH (-14 , 184 , 102 , 102 ), LedPNG, kTunedMode ));
6466 pGraphics->AttachControl (new IBSwitchControl (IRECT::MakeXYWH (228 , 184 , 102 , 102 ), LedPNG, kDiffuseInput ));
6567
66- pGraphics->AttachControl (new IBButtonControl (IRECT::MakeXYWH (238 , 400 , 102 , 102 ), LedPNG,[this ](IControl* freezeControl) {}));
67-
68+ pGraphics->AttachControl (new IBButtonHoldControl (IRECT::MakeXYWH (238 , 400 , 102 , 102 ), LedPNG, [this ](IControl* clearControl) {SetParameterValue (kClear , 1 );}));
6869 };
6970#endif
7071}
7172
73+ void Plateau::OnParamChange (int index)
74+ {
75+ switch (index) {
76+ case kPreDelay :
77+ reverb.setPreDelay (GetParam (index)->Value ());
78+ break ;
79+ case kInputLowDamp :
80+ reverb.setInputFilterLowCutoffPitch (10 .f - GetParam (index)->Value ());
81+ break ;
82+ case kInputHighDamp :
83+ reverb.setInputFilterHighCutoffPitch (GetParam (index)->Value ());
84+ break ;
85+ case kSize :
86+ case kTunedMode :
87+ {
88+ float size = GetParam (kSize )->Value ();
89+ bool tunedMode = GetParam (kTunedMode )->Value ();
90+ if (tunedMode) {
91+ reverb.setTimeScale (0 .0025f * powf (2 .f , size * 5 .f ));
92+ }
93+ else {
94+ reverb.setTimeScale (scale (size * size, 0 .f , 1 .f , 0 .01f , 4 .0f ));
95+ }
96+ break ;
97+ }
98+ case kDiffusion :
99+ reverb.setTankDiffusion (GetParam (index)->Value ());
100+ break ;
101+ case kDecay :
102+ {
103+ float decay = GetParam (index)->Value ();
104+ reverb.setDecay (2 .f * decay - decay * decay);
105+ break ;
106+ }
107+ case kReverbLowDamp :
108+ reverb.setTankFilterLowCutFrequency (10 .f - GetParam (index)->Value ());
109+ break ;
110+ case kReverbHighDamp :
111+ reverb.setTankFilterHighCutFrequency (GetParam (index)->Value ());
112+ break ;
113+ case kModSpeed :
114+ {
115+ float modSpeed = GetParam (index)->Value ();
116+ reverb.setTankModSpeed (modSpeed * modSpeed * 99 .f + 1 .f );
117+ break ;
118+ }
119+ case kModDepth :
120+ reverb.setTankModDepth (GetParam (index)->Value ());
121+ break ;
122+ case kModShape :
123+ reverb.setTankModShape (GetParam (index)->Value ());
124+ break ;
125+ case kDiffuseInput :
126+ reverb.enableInputDiffusion (GetParam (index)->Value ());
127+ break ;
128+ }
129+ }
130+
131+
72132#if IPLUG_DSP
73133void Plateau::ProcessBlock (sample** inputs, sample** outputs, int nFrames)
74134{
75- const double gain = GetParam (kDry )->Value () / 100 .;
135+ const bool clearParam = GetParam (kClear )->Value ();
136+ const bool freezeParam = GetParam (kFreeze )->Value ();
137+ const double dryParam = GetParam (kDry )->Value ()/100 ;
138+ const double wetParam = GetParam (kWet )->Value ()/100 ;
76139 const int nChans = NOutChansConnected ();
77140
78141 for (int s = 0 ; s < nFrames; s++) {
79- for (int c = 0 ; c < nChans; c++) {
80- outputs[c][s] = inputs[c][s] * gain;
81- }
142+ if (clearParam && !clear && cleared) {
143+ cleared = false ;
144+ clear = true ;
145+ }
146+ else if (!clearParam && cleared) {
147+ clear = false ;
148+ }
149+
150+ if (clear) {
151+ if (!cleared && !fadeOut && !fadeIn) {
152+ fadeOut = true ;
153+ envelope.setStartEndPoints (1 .f , 0 .f );
154+ envelope.trigger ();
155+ }
156+ if (fadeOut && envelope._justFinished ) {
157+ reverb.clear ();
158+ fadeOut = false ;
159+ fadeIn = true ;
160+ envelope.setStartEndPoints (0 .f , 1 .f );
161+ envelope.trigger ();
162+ }
163+ if (fadeIn && envelope._justFinished ) {
164+ fadeIn = false ;
165+ cleared = true ;
166+ envelope._value = 1 .f ;
167+ SetParameterValue (kClear ,0 );
168+ }
169+ }
170+ envelope.process ();
171+
172+ if (freezeParam && !frozen) {
173+ frozen = true ;
174+ reverb.freeze (frozen);
175+ }
176+ else if (!freezeParam && frozen) {
177+ frozen = false ;
178+ reverb.freeze (frozen);
179+ }
180+
181+ reverb.process ((double )(inputs[0 ][s] * envelope._value ), (double )(inputs[nChans>1 ?1 :0 ][s] * envelope._value ));
182+
183+ outputs[0 ][s] = inputs[0 ][s] * dryParam + reverb.getLeftOutput () * wetParam;
184+ if (nChans > 1 )
185+ {
186+ outputs[1 ][s] = inputs[1 ][s] * dryParam + reverb.getRightOutput () * wetParam;
187+ }
82188 }
83189}
84190#endif
0 commit comments