Skip to content

Commit 38a4bbf

Browse files
committed
Tank Cloning Draft
1 parent 8d46506 commit 38a4bbf

File tree

2 files changed

+127
-97
lines changed

2 files changed

+127
-97
lines changed

Plateau2/Plateau2.cpp

Lines changed: 122 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ Plateau2::Plateau2(const InstanceInfo& info)
88
GetParam(kDry)->InitPercentage("Dry", 100);
99
GetParam(kFreeze)->InitBool("Global Freeze", false);
1010
GetParam(kClear)->InitBool("Global Clear", false);
11+
GetParam(kCopy1to2)->InitBool("Copy Tank 1 to 2", false);
1112

1213
GetParam(kEnable1)->InitBool("Tank 1 Enable", true);
1314
GetParam(kWet1)->InitPercentage("Wet 1", 50);
@@ -257,10 +258,12 @@ Plateau2::Plateau2(const InstanceInfo& info)
257258

258259
Switches[7] = new LEDSwitch(IRECT::MakeXYWH(3, 170, 102, 102), LEDScale, LedOffSVG, LedOn1SVG, LedOn2SVG, kSoftClip1, kSoftClip2);
259260

261+
Switches[8] = new LEDSwitch(IRECT::MakeXYWH(3, 450, 102, 102), LEDScale, LedOffSVG, LedOnBothSVG, LedOnBothSVG, kCopy1to2, kCopy1to2);
262+
260263
//Routing page Switches
261-
Switches[8] = new LEDSwitch(IRECT::MakeXYWH(106.5, 374, 102, 102), LEDScale, LedOffSVG, LedOn1SVG, LedOn2SVG, k1to2, k2to1);
264+
Switches[9] = new LEDSwitch(IRECT::MakeXYWH(106.5, 374, 102, 102), LEDScale, LedOffSVG, LedOn1SVG, LedOn2SVG, k1to2, k2to1);
262265

263-
for (int i = 5; i <= 8; i++) {
266+
for (int i = 5; i <= 9; i++) {
264267
pGraphics->AttachControl(Switches[i]);
265268
Switches[i]->Hide(true);
266269
}
@@ -338,13 +341,13 @@ void Plateau2::UpdatePageVisibility()
338341
for (int i = kPreDelayKnob; i <= kVarianceKnob; i++) {
339342
Knobs[i]->Hide(currentPage != 1);
340343
}
341-
for (int i = 5; i <= 7; i++) {
344+
for (int i = 5; i <= 8; i++) {
342345
Switches[i]->Hide(currentPage != 1);
343346
}
344347
Buttons[2]->Hide(currentPage != 1);
345348

346349
//Routing page
347-
Switches[8]->Hide(currentPage != 2);
350+
Switches[9]->Hide(currentPage != 2);
348351

349352
for (int i = kInputKnob; i <= kPanKnob; i++) {
350353
Knobs[i]->Hide(currentPage != 2);
@@ -370,47 +373,70 @@ bool Plateau2::WindowIsOpen() {
370373
return pGraphics && pGraphics->WindowIsOpen();
371374
}
372375

373-
void Plateau2::OnParamChange(int index)
376+
void Plateau2::OnParamChange(int index) {
377+
if (copy1to2) {
378+
if (index >= kEnable1 && index <= k1to2HighDamp) //Tank 1 range
379+
{
380+
UpdateParameter(index);
381+
UpdateParameter(index + kEnable2 - kEnable1); //Copy to tank 2
382+
}
383+
else if (index < kEnable1 || index > k2to1HighDamp) //Other
384+
{
385+
UpdateParameter(index);
386+
}
387+
}
388+
else {
389+
UpdateParameter(index);
390+
}
391+
}
392+
393+
void Plateau2::UpdateParameter(int index)
374394
{
375-
switch (index) {
395+
switch (index) {
376396
case kDry:
377397
dryParam = GetParam(kDry)->Value() / 100;
378-
break;
398+
break;
379399
case kClear:
380400
if (GetParam(kClear)->Value() >= 0.5 && lastGlobalClear < 0.5) {
381-
clear1 = true;
382-
clear2 = true;
401+
clear1 = true;
402+
clear2 = true;
383403
}
384-
lastGlobalClear = GetParam(kClear)->Value();
404+
lastGlobalClear = GetParam(kClear)->Value();
385405
break;
386406
case kFreeze:
387407
reverb1.freeze(GetParam(kFreeze1)->Value() >= 0.5 || GetParam(kFreeze)->Value() >= 0.5);
388408
reverb2.freeze(GetParam(kFreeze2)->Value() >= 0.5 || GetParam(kFreeze)->Value() >= 0.5);
389-
break;
409+
break;
410+
case kCopy1to2:
411+
copy1to2 = GetParam(kCopy1to2)->Value() >= 0.5;
412+
/*if (copy1to2) {
413+
414+
}*/
415+
break;
390416
case kEnable1:
391417
tank1Enabled = GetParam(kEnable1)->Value() >= 0.5;
392418
break;
393419
case kClear1:
394420
if (GetParam(kClear1)->Value() >= 0.5 && lastClear1 < 0.5) {
395-
clear1 = true;
421+
clear1 = true;
396422
}
397-
lastClear1 = GetParam(kClear1)->Value();
423+
lastClear1 = GetParam(kClear1)->Value();
398424
break;
399425
case kFreeze1:
400426
reverb1.freeze(GetParam(kFreeze1)->Value() >= 0.5 || GetParam(kFreeze)->Value() >= 0.5);
401427
break;
402-
case kWet1:
403-
wet1Param = GetParam(kWet1)->Value() / 100;
404-
break;
428+
case kWet1:
429+
wet1Param = GetParam(kWet1)->Value() / 100;
430+
break;
405431
case kInput1:
406432
input1Param = GetParam(kInput1)->Value() / 100;
407433
break;
408434
case kSoftClip1:
409435
softClip1Param = GetParam(kSoftClip1)->Value() >= 0.5;
410436
break;
411-
case kWidth1:
412-
width1Param = GetParam(kWidth1)->Value() / 100;
413-
break;
437+
case kWidth1:
438+
width1Param = GetParam(kWidth1)->Value() / 100;
439+
break;
414440
case kPreDelay1:
415441
reverb1.setPreDelay(GetParam(index)->Value());
416442
break;
@@ -424,7 +450,7 @@ void Plateau2::OnParamChange(int index)
424450
case kTunedMode1:
425451
{
426452
double size = GetParam(kSize1)->Value();
427-
if (GetParam(kTunedMode1)->Value()>=0.5) {
453+
if (GetParam(kTunedMode1)->Value() >= 0.5) {
428454
reverb1.setTimeScale(0.0025f * powf(2.f, size * 5.f));
429455
}
430456
else {
@@ -460,29 +486,29 @@ void Plateau2::OnParamChange(int index)
460486
reverb1.setTankModShape(GetParam(index)->Value());
461487
break;
462488
case kDiffuseInput1:
463-
reverb1.enableInputDiffusion(GetParam(index)->Value()>=0.5);
489+
reverb1.enableInputDiffusion(GetParam(index)->Value() >= 0.5);
464490
break;
465-
case kNesting1:
466-
reverb1.setTankDiffusionNesting(GetParam(index)->Value()>=0.5);
491+
case kNesting1:
492+
reverb1.setTankDiffusionNesting(GetParam(index)->Value() >= 0.5);
467493
break;
468494
case kDiffusionDecay1:
469495
{
470496
double scaled = scale<double>(GetParam(index)->Value(), 0, 100, 0, 1.3);
471497
if (!GetParam(kDanger)->Value()) {
472-
//Clip to safe values
498+
//Clip to safe values
473499
scaled = clip<double>(scaled, 0.3, 1);
474500
}
475-
reverb1.setTankDiffusionDecay(scaled);
501+
reverb1.setTankDiffusionDecay(scaled);
476502
break;
477503
}
478-
case kVariance1:
479-
reverb1.setTankVariance(GetParam(index)->Value());
480-
break;
504+
case kVariance1:
505+
reverb1.setTankVariance(GetParam(index)->Value());
506+
break;
481507
case kStereoSource1:
482-
sourceBalance1 = balanceFactors(GetParam(kStereoSource1)->Value()/100);
508+
sourceBalance1 = balanceFactors(GetParam(kStereoSource1)->Value() / 100);
483509
break;
484510
case kPan1:
485-
panBalance1 = balanceFactors(GetParam(kPan1)->Value()/100);
511+
panBalance1 = balanceFactors(GetParam(kPan1)->Value() / 100);
486512
break;
487513
case k1to2:
488514
send1to2 = tank1Enabled && GetParam(k1to2)->Value() >= 0.5;
@@ -493,39 +519,39 @@ void Plateau2::OnParamChange(int index)
493519
case k1to2Delay:
494520
send1To2Delay.setDelayTime(GetParam(k1to2Delay)->Value() * GetSampleRate());
495521
break;
496-
case k1to2LowDamp:
497-
send1To2HP.setCutoffFreq(pitch2freq(10.f - GetParam(index)->Value()));
498-
break;
499-
case k1to2HighDamp:
500-
send1To2LP.setCutoffFreq(pitch2freq(GetParam(index)->Value()));
501-
break;
502-
case kModVariance1:
503-
reverb1.setTankModVariance(GetParam(index)->Value());
504-
break;
505-
506-
case kEnable2:
507-
tank2Enabled = GetParam(kEnable2)->Value() >= 0.5;
508-
break;
509-
case kClear2:
510-
if (GetParam(kClear2)->Value() >= 0.5 && lastClear2 < 0.5) {
511-
clear2 = true;
512-
}
513-
break;
514-
case kFreeze2:
522+
case k1to2LowDamp:
523+
send1To2HP.setCutoffFreq(pitch2freq(10.f - GetParam(index)->Value()));
524+
break;
525+
case k1to2HighDamp:
526+
send1To2LP.setCutoffFreq(pitch2freq(GetParam(index)->Value()));
527+
break;
528+
case kModVariance1:
529+
reverb1.setTankModVariance(GetParam(index)->Value());
530+
break;
531+
532+
case kEnable2:
533+
tank2Enabled = GetParam(kEnable2)->Value() >= 0.5;
534+
break;
535+
case kClear2:
536+
if (GetParam(kClear2)->Value() >= 0.5 && lastClear2 < 0.5) {
537+
clear2 = true;
538+
}
539+
break;
540+
case kFreeze2:
515541
reverb2.freeze(GetParam(kFreeze2)->Value() >= 0.5 || GetParam(kFreeze)->Value() >= 0.5);
516-
break;
517-
case kWet2:
518-
wet2Param = GetParam(kWet2)->Value() / 100;
519-
break;
520-
case kInput2:
521-
input2Param = GetParam(kInput2)->Value() / 100;
522-
break;
523-
case kSoftClip2:
524-
softClip2Param = GetParam(kSoftClip2)->Value() >= 0.5;
525-
break;
526-
case kWidth2:
527-
width2Param = GetParam(kWidth2)->Value() / 100;
528-
break;
542+
break;
543+
case kWet2:
544+
wet2Param = GetParam(kWet2)->Value() / 100;
545+
break;
546+
case kInput2:
547+
input2Param = GetParam(kInput2)->Value() / 100;
548+
break;
549+
case kSoftClip2:
550+
softClip2Param = GetParam(kSoftClip2)->Value() >= 0.5;
551+
break;
552+
case kWidth2:
553+
width2Param = GetParam(kWidth2)->Value() / 100;
554+
break;
529555
case kPreDelay2:
530556
reverb2.setPreDelay(GetParam(index)->Value());
531557
break;
@@ -539,7 +565,7 @@ void Plateau2::OnParamChange(int index)
539565
case kTunedMode2:
540566
{
541567
double size = GetParam(kSize2)->Value();
542-
if (GetParam(kTunedMode2)->Value()>=0.5) {
568+
if (GetParam(kTunedMode2)->Value() >= 0.5) {
543569
reverb2.setTimeScale(0.0025f * powf(2.f, size * 5.f));
544570
}
545571
else {
@@ -575,7 +601,7 @@ void Plateau2::OnParamChange(int index)
575601
reverb2.setTankModShape(GetParam(index)->Value());
576602
break;
577603
case kDiffuseInput2:
578-
reverb2.enableInputDiffusion(GetParam(index)->Value()>=0.5);
604+
reverb2.enableInputDiffusion(GetParam(index)->Value() >= 0.5);
579605
break;
580606
case kNesting2:
581607
reverb2.setTankDiffusionNesting(GetParam(index)->Value());
@@ -590,52 +616,52 @@ void Plateau2::OnParamChange(int index)
590616
reverb2.setTankDiffusionDecay(scaled);
591617
break;
592618
}
593-
case kVariance2:
594-
reverb2.setTankVariance(GetParam(index)->Value());
595-
break;
619+
case kVariance2:
620+
reverb2.setTankVariance(GetParam(index)->Value());
621+
break;
596622
case kStereoSource2:
597-
sourceBalance2 = balanceFactors(GetParam(kStereoSource2)->Value()/100);
623+
sourceBalance2 = balanceFactors(GetParam(kStereoSource2)->Value() / 100);
598624
break;
599625
case kPan2:
600-
panBalance2 = balanceFactors(GetParam(kPan2)->Value()/100);
626+
panBalance2 = balanceFactors(GetParam(kPan2)->Value() / 100);
601627
break;
602-
case k2to1:
628+
case k2to1:
603629
send2to1 = tank2Enabled && GetParam(k2to1)->Value() && GetParam(kDanger)->Value() >= 0.5;
604-
break;
605-
case k2to1Level:
606-
level2to1Param = GetParam(k2to1Level)->Value() / 100;
607-
break;
630+
break;
631+
case k2to1Level:
632+
level2to1Param = GetParam(k2to1Level)->Value() / 100;
633+
break;
608634
case k2to1Delay:
609635
send2To1Delay.setDelayTime(GetParam(k2to1Delay)->Value() * GetSampleRate());
610636
break;
611-
case k2to1LowDamp:
612-
send2To1HP.setCutoffFreq(pitch2freq(10.f - GetParam(index)->Value()));
613-
break;
614-
case k2to1HighDamp:
615-
send2To1LP.setCutoffFreq(pitch2freq(GetParam(index)->Value()));
616-
break;
617-
case kModVariance2:
618-
reverb2.setTankModVariance(GetParam(index)->Value());
619-
break;
620-
621-
case kDanger:
622-
if (GetParam(kDanger)->Value()<=0.5) {
623-
//Reset the plugin when danger is turned off for safety
624-
clear1 = true;
625-
clear2 = true;
626-
}
627-
if (WindowIsOpen()) {
637+
case k2to1LowDamp:
638+
send2To1HP.setCutoffFreq(pitch2freq(10.f - GetParam(index)->Value()));
639+
break;
640+
case k2to1HighDamp:
641+
send2To1LP.setCutoffFreq(pitch2freq(GetParam(index)->Value()));
642+
break;
643+
case kModVariance2:
644+
reverb2.setTankModVariance(GetParam(index)->Value());
645+
break;
646+
647+
case kDanger:
648+
if (GetParam(kDanger)->Value() <= 0.5) {
649+
//Reset the plugin when danger is turned off for safety
650+
clear1 = true;
651+
clear2 = true;
652+
}
653+
if (WindowIsOpen()) {
628654
UpdateSendVisibility();
629655
Knobs[kDiffusionDecayKnob]->Bound = GetParam(kDanger)->Value() ? 135.f : 72.6923f;
630656

631-
SetParameterValue(kDiffusionDecay1, clip<double>(GetParam(kDiffusionDecay1)->Value(), 23.0769, 76.92307)/100);
632-
SetParameterValue(kDiffusionDecay2, clip<double>(GetParam(kDiffusionDecay2)->Value(), 23.0769, 76.92307)/100);
657+
SetParameterValue(kDiffusionDecay1, clip<double>(GetParam(kDiffusionDecay1)->Value(), 23.0769, 76.92307) / 100);
658+
SetParameterValue(kDiffusionDecay2, clip<double>(GetParam(kDiffusionDecay2)->Value(), 23.0769, 76.92307) / 100);
633659

634660
Knobs[kDiffusionDecayKnob]->SetValue((tank2Selected ? GetParam(kDiffusionDecay2)->Value() : GetParam(kDiffusionDecay1)->Value()) / 100);
635-
Knobs[kDiffusionDecayKnob]->SetDirty(false);
636-
}
661+
Knobs[kDiffusionDecayKnob]->SetDirty(false);
662+
}
637663
break;
638-
}
664+
}
639665
}
640666

641667

Plateau2/Plateau2.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ enum EParams
1919
kDry,
2020
kFreeze,
2121
kClear,
22+
kCopy1to2,
2223

2324
kEnable1,
2425
kWet1,
@@ -117,7 +118,7 @@ enum EKnobs {
117118
kNumKnobs
118119
};
119120

120-
const int kNumSwitches = 9;
121+
const int kNumSwitches = 10;
121122
const int kNumButtons = 3;
122123
const int kNumPages = 3;
123124
const int kNumSVGs = 5;
@@ -135,6 +136,7 @@ class Plateau2 final : public Plugin
135136
void UpdatePageVisibility();
136137
void UpdateSendVisibility();
137138
void OnParamChange(int index) override;
139+
void UpdateParameter(int index);
138140
bool WindowIsOpen();
139141
void SelectTank(bool tank2);
140142
#endif
@@ -195,6 +197,8 @@ class Plateau2 final : public Plugin
195197
double dryParam = 1;
196198
double lastGlobalClear = 0;
197199

200+
bool copy1to2 = false;
201+
198202
bool tank1Enabled = true;
199203
bool tank2Enabled = false;
200204

0 commit comments

Comments
 (0)