Skip to content

Commit 6fe1dd8

Browse files
committed
Nested APF and Danger
1 parent be10960 commit 6fe1dd8

File tree

13 files changed

+493
-111
lines changed

13 files changed

+493
-111
lines changed

Plateau2/Plateau2.cpp

Lines changed: 99 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ Plateau2::Plateau2(const InstanceInfo& info)
1111

1212
GetParam(kEnable1)->InitBool("Tank 1 Enable", true);
1313
GetParam(kWet1)->InitPercentage("Wet 1", 50);
14-
GetParam(kPreDelay1)->InitSeconds("Pre Delay 1", 0., 0., 0.5, 0.01);
1514
GetParam(kInputLowDamp1)->InitDouble("Input Low Damp 1", 10., 0., 10., 0.01);
1615
GetParam(kInputHighDamp1)->InitDouble("Input High Damp 1", 10., 0., 10., 0.01);
1716
GetParam(kSize1)->InitDouble("Size 1", 0.5, 0., 1., 0.01);
@@ -26,10 +25,15 @@ Plateau2::Plateau2(const InstanceInfo& info)
2625
GetParam(kClear1)->InitBool("Clear 1", false);
2726
GetParam(kTunedMode1)->InitBool("Tuned Mode 1", false);
2827
GetParam(kDiffuseInput1)->InitBool("Diffuse Input 1", true);
28+
GetParam(kPreDelay1)->InitSeconds("Pre Delay 1", 0., 0., 0.5, 0.01);
29+
GetParam(kNesting1)->InitBool("Nested Tank Diffusion 1", false);
30+
GetParam(kInputNesting1)->InitBool("Nested Input Diffusion 1", false);
31+
//GetParam(kDiffusionDecay1)->InitPercentage("Tank Diffusion Decay 1", 75, 20, 130);
32+
GetParam(kDiffusionDecay1)->InitPercentage("Tank Diffusion Decay 1", 100);
33+
2934

3035
GetParam(kEnable2)->InitBool("Tank 2 Enable", false);
3136
GetParam(kWet2)->InitPercentage("Wet 2", 50);
32-
GetParam(kPreDelay2)->InitSeconds("Pre Delay 2", 0., 0., 0.5, 0.01);
3337
GetParam(kInputLowDamp2)->InitDouble("Input Low Damp 2", 10., 0., 10., 0.01);
3438
GetParam(kInputHighDamp2)->InitDouble("Input High Damp 2", 10., 0., 10., 0.01);
3539
GetParam(kSize2)->InitDouble("Size 2", 0.5, 0., 1., 0.01);
@@ -44,6 +48,13 @@ Plateau2::Plateau2(const InstanceInfo& info)
4448
GetParam(kClear2)->InitBool("Clear 2", false);
4549
GetParam(kTunedMode2)->InitBool("Tuned Mode 2", false);
4650
GetParam(kDiffuseInput2)->InitBool("Diffuse Input 2", true);
51+
GetParam(kPreDelay2)->InitSeconds("Pre Delay 2", 0., 0., 0.5, 0.01);
52+
GetParam(kNesting2)->InitBool("Nested Tank Diffusion 2", false);
53+
GetParam(kInputNesting2)->InitBool("Nested Input Diffusion 2", false);
54+
GetParam(kDiffusionDecay2)->InitPercentage("Tank Diffusion Decay 2", 100);
55+
56+
57+
GetParam(kDanger)->InitBool("DANGER! Allow Unsafe Feedback Settings", false);
4758

4859

4960
reverb1.setSampleRate(GetSampleRate());
@@ -91,17 +102,21 @@ Plateau2::Plateau2(const InstanceInfo& info)
91102
Knobs[9] = new NeedleKnob(IRECT::MakeXYWH(56, 518, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kModSpeed1, kModSpeed2);
92103
Knobs[10] = new NeedleKnob(IRECT::MakeXYWH(203, 518, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kModDepth1, kModDepth2);
93104
Knobs[11] = new NeedleKnob(IRECT::MakeXYWH(130, 543, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kModShape1, kModShape2);
94-
95-
Knobs[12] = new NeedleKnob(IRECT::MakeXYWH(140, 140, 35, 35), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kPreDelay1, kPreDelay2);
96105

97106
for (int i = 0; i <= 11; i++) {
98107
pGraphics->AttachControl(Knobs[i]);
99108
}
109+
110+
Knobs[12] = new NeedleKnob(IRECT::MakeXYWH(140, 140, 35, 35), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kPreDelay1, kPreDelay2);
111+
Knobs[13] = new NeedleKnob(IRECT::MakeXYWH(203, 310, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kDiffusionDecay1, kDiffusionDecay2);
112+
Knobs[13]->StartAngle = -72.6923f;
113+
Knobs[13]->EndAngle = 72.6923f;
100114

101-
for (int i = 12; i <= 12; i++) {
115+
for (int i = 12; i <= 13; i++) {
102116
pGraphics->AttachControl(Knobs[i]);
103117
Knobs[i]->Hide(true);
104118
}
119+
105120
NextButtonControl = new NavigatorButton(IRECT::MakeXYWH(220.572f, 125.695f, 82.306f, 30.f), [this, PageBackgrounds, NextButtons, PrevButtons](IControl* pCaller) {
106121
ChangePage(1, PageBackgrounds, NextButtons, PrevButtons);
107122
}, pGraphics->LoadSVG(NEXTEXTRAS_FN));
@@ -114,6 +129,10 @@ Plateau2::Plateau2(const InstanceInfo& info)
114129
const ISVG LedOn2SVG = pGraphics->LoadSVG(LEDON2_FN);
115130
const ISVG LedOnBothSVG = pGraphics->LoadSVG(LEDONBOTH_FN);
116131

132+
const ISVG DangerOffSVG = pGraphics->LoadSVG(DANGEROFF_FN);
133+
const ISVG DangerOnSVG = pGraphics->LoadSVG(DANGERON_FN);
134+
135+
//Main page Switches
117136
Switches[0] = new LEDSwitch(IRECT::MakeXYWH(-11.526f, 404.802f-45, 102, 102), LEDScale, LedOffSVG, LedOnBothSVG, LedOnBothSVG, kFreeze, kFreeze);
118137
Switches[1] = new LEDSwitch(IRECT::MakeXYWH(-11.526f, 404.802f+30, 102, 102), LEDScale, LedOffSVG, LedOn1SVG, LedOn2SVG, kFreeze1, kFreeze2);
119138
Switches[2] = new LEDSwitch(IRECT::MakeXYWH(-14, 216, 102, 102), LEDScale, LedOffSVG, LedOn1SVG, LedOn2SVG, kTunedMode1, kTunedMode2);
@@ -129,14 +148,25 @@ Plateau2::Plateau2(const InstanceInfo& info)
129148
pGraphics->AttachControl(Buttons[i]);
130149
}
131150

132-
//Tank Enable Button
151+
//Tank Enable Switch
133152
Switches[4] = new LEDSwitch(IRECT::MakeXYWH(106.5f, 112, 102, 102), LEDScale, LedOffSVG, LedOn1SVG, LedOn2SVG, kEnable1, kEnable2);
134153
Switches[4]->SetValue(1);
135154

136-
for (int i = 0; i < kNumSwitches; i++) {
155+
156+
for (int i = 0; i <= 4; i++) {
137157
pGraphics->AttachControl(Switches[i]);
138158
}
139159

160+
Switches[5] = new LEDSwitch(IRECT::MakeXYWH(228, 216, 102, 102), LEDScale, LedOffSVG, LedOn1SVG, LedOn2SVG, kNesting1, kNesting2);
161+
162+
//DANGER switch
163+
Switches[6] = new LEDSwitch(IRECT::MakeXYWH(130, 329, 56, 56).GetScaledAboutCentre(2), 1, DangerOffSVG, DangerOnSVG, DangerOnSVG, kDanger, kDanger);
164+
165+
for (int i = 5; i <= 6; i++) {
166+
pGraphics->AttachControl(Switches[i]);
167+
Switches[i]->Hide(true);
168+
}
169+
140170

141171
LEDRadio* tank1Select = new LEDRadio(IRECT::MakeXYWH(106.5 - 20, 40, 102, 102), LEDScale, LedOffSVG, LedOn1SVG, [this](IControl* radioControl) {SelectTank(false);});
142172
LEDRadio* tank2Select = new LEDRadio(IRECT::MakeXYWH(106.5 + 20, 40, 102, 102), LEDScale, LedOffSVG, LedOn2SVG, [this](IControl* radioControl) {SelectTank(true);});
@@ -200,9 +230,12 @@ void Plateau2::UpdatePageVisibility()
200230
}
201231

202232
//Extras page
203-
for (int i = 12; i <= 12; i++) {
233+
for (int i = 12; i <= 13; i++) {
204234
Knobs[i]->Hide(currentPage != 1);
205235
}
236+
for (int i = 5; i <= 6; i++) {
237+
Switches[i]->Hide(currentPage != 1);
238+
}
206239
}
207240

208241

@@ -284,6 +317,17 @@ void Plateau2::OnParamChange(int index)
284317
case kDiffuseInput1:
285318
reverb1.enableInputDiffusion(GetParam(index)->Value());
286319
break;
320+
case kNesting1:
321+
reverb1.setTankDiffusionNesting(GetParam(index)->Value());
322+
break;
323+
case kDiffusionDecay1:
324+
if (GetParam(kDanger)->Value()) {
325+
reverb1.setTankDiffusionDecay(scale<double>(GetParam(index)->Value(), 0, 100, 0, 1.3));
326+
}
327+
else {
328+
reverb1.setTankDiffusionDecay(scale<double>(GetParam(index)->Value(), 0, 100, .3, 1));
329+
}
330+
break;
287331

288332
case kPreDelay2:
289333
reverb2.setPreDelay(GetParam(index)->Value());
@@ -337,6 +381,53 @@ void Plateau2::OnParamChange(int index)
337381
case kDiffuseInput2:
338382
reverb2.enableInputDiffusion(GetParam(index)->Value());
339383
break;
384+
case kNesting2:
385+
reverb2.setTankDiffusionNesting(GetParam(index)->Value());
386+
break;
387+
case kDiffusionDecay2:
388+
if (GetParam(kDanger)->Value()) {
389+
reverb2.setTankDiffusionDecay(scale<double>(GetParam(index)->Value(), 0, 100, 0, 1.3));
390+
}
391+
else {
392+
reverb2.setTankDiffusionDecay(scale<double>(GetParam(index)->Value(), 0, 100, .3, 1));
393+
}
394+
break;
395+
396+
case kDanger:
397+
if (GetParam(kDanger)->Value()) {
398+
//Allow the user to set the diffusion decay to unsafe values
399+
GetParam(kDiffusionDecay1)->SetDefault(76.9230);
400+
GetParam(kDiffusionDecay2)->SetDefault(76.9230);
401+
402+
SetParameterValue(kDiffusionDecay1, scale<double>(GetParam(kDiffusionDecay1)->Value(), 0, 100, .230769, .7692307));
403+
GetParam(kDiffusionDecay2)->Set(scale<double>(GetParam(kDiffusionDecay2)->Value(), 0, 100, 23.0769, 76.92307));
404+
405+
if (initalizedInterface)
406+
{
407+
Knobs[13]->StartAngle = -135.f;
408+
Knobs[13]->EndAngle = 135.f;
409+
}
410+
}
411+
else {
412+
GetParam(kDiffusionDecay1)->SetDefault(100);
413+
GetParam(kDiffusionDecay2)->SetDefault(100);
414+
415+
SetParameterValue(kDiffusionDecay1, clip<double>(scale<double>(GetParam(kDiffusionDecay1)->Value(), 23.0769, 76.92307, 0, 1),0,100));
416+
GetParam(kDiffusionDecay2)->Set(clip<double>(scale<double>(GetParam(kDiffusionDecay2)->Value(), 23.0769, 76.92307, 0, 100),0,100));
417+
418+
SetParameterValue(kClear, 1);
419+
420+
if (initalizedInterface)
421+
{
422+
Knobs[13]->StartAngle = -72.6923f;
423+
Knobs[13]->EndAngle = 72.6923f;
424+
}
425+
}
426+
if (initalizedInterface) {
427+
Knobs[13]->SetValue((tank2Selected ? GetParam(kDiffusionDecay2)->Value() : GetParam(kDiffusionDecay1)->Value()) / 100);
428+
Knobs[13]->SetDirty(false);
429+
}
430+
break;
340431
}
341432
}
342433

Plateau2/Plateau2.h

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ enum EParams
3636
kTunedMode1,
3737
kDiffuseInput1,
3838
kPreDelay1,
39+
kNesting1,
40+
kInputNesting1,
41+
kDiffusionDecay1,
42+
3943
kEnable2,
4044
kWet2,
4145
kInputLowDamp2,
@@ -53,11 +57,17 @@ enum EParams
5357
kTunedMode2,
5458
kDiffuseInput2,
5559
kPreDelay2,
60+
kNesting2,
61+
kInputNesting2,
62+
kDiffusionDecay2,
63+
64+
kDanger,
65+
5666
kNumParams
5767
};
5868

59-
const int kNumKnobs = 13;
60-
const int kNumSwitches = 5;
69+
const int kNumKnobs = 14;
70+
const int kNumSwitches = 7;
6171
const int kNumButtons = 2;
6272
const int kNumPages = 2;
6373

Plateau2/config.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,3 +77,5 @@
7777
#define LEDON1_FN "LEDButtonOn1.svg"
7878
#define LEDON2_FN "LEDButtonOn2.svg"
7979
#define LEDONBOTH_FN "LEDButtonGradient.svg"
80+
#define DANGEROFF_FN "DangerOff.svg"
81+
#define DANGERON_FN "DangerOn.svg"

Plateau2/controls/NeedleKnob.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class NeedleKnob : public IKnobControlBase
2020
void Draw(IGraphics& g) override
2121
{
2222
g.DrawSVG(mDialBg, mRECT);
23-
g.DrawRotatedSVG(mDialPointer, mRECT.MW(), mRECT.MH(), mRECT.W(), mRECT.H(), mStartAngle + GetValue() * (mEndAngle - mStartAngle), &mBlend);
23+
g.DrawRotatedSVG(mDialPointer, mRECT.MW(), mRECT.MH(), mRECT.W(), mRECT.H(), StartAngle + GetValue() * (EndAngle - StartAngle), &mBlend);
2424
g.DrawFittedBitmap(tank2 ? mDialFg2 : mDialFg1, mRECT);
2525
}
2626

@@ -34,13 +34,14 @@ class NeedleKnob : public IKnobControlBase
3434
SetParamIdx(tank2 ? mParam2Idx : mParam1Idx, 0, true);
3535
}
3636

37+
float StartAngle = -135.f;
38+
float EndAngle = 135.f;
39+
3740
private:
3841
IBitmap mDialFg1;
3942
IBitmap mDialFg2;
4043
ISVG mDialBg;
4144
ISVG mDialPointer;
42-
float mStartAngle = -135.f;
43-
float mEndAngle = 135.f;
4445
int mParam1Idx;
4546
int mParam2Idx;
4647
bool tank2 = false;

0 commit comments

Comments
 (0)