Skip to content

Commit faa76d0

Browse files
committed
Functional Linking
1 parent 38a4bbf commit faa76d0

File tree

2 files changed

+62
-59
lines changed

2 files changed

+62
-59
lines changed

Plateau2/Plateau2.cpp

Lines changed: 59 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +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);
11+
GetParam(kLink1to2)->InitBool("Link Tank 1 to 2", false);
1212

1313
GetParam(kEnable1)->InitBool("Tank 1 Enable", true);
1414
GetParam(kWet1)->InitPercentage("Wet 1", 50);
@@ -195,7 +195,7 @@ Plateau2::Plateau2(const InstanceInfo& info)
195195
}, PrevButtons[0]);
196196
pGraphics->AttachControl(PrevButtonControl);
197197

198-
double LEDScale = 0.2453054f;
198+
constexpr double LEDScale = 0.2453054f;
199199

200200
const ISVG LedOffSVG = pGraphics->LoadSVG(LEDOFF_FN);
201201
const ISVG LedOn1SVG = pGraphics->LoadSVG(LEDON1_FN);
@@ -258,7 +258,7 @@ Plateau2::Plateau2(const InstanceInfo& info)
258258

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

261-
Switches[8] = new LEDSwitch(IRECT::MakeXYWH(3, 450, 102, 102), LEDScale, LedOffSVG, LedOnBothSVG, LedOnBothSVG, kCopy1to2, kCopy1to2);
261+
Switches[8] = new LEDSwitch(IRECT::MakeXYWH(3, 450, 102, 102), LEDScale, LedOffSVG, LedOnBothSVG, LedOnBothSVG, kLink1to2, kLink1to2);
262262

263263
//Routing page Switches
264264
Switches[9] = new LEDSwitch(IRECT::MakeXYWH(106.5, 374, 102, 102), LEDScale, LedOffSVG, LedOn1SVG, LedOn2SVG, k1to2, k2to1);
@@ -374,25 +374,26 @@ bool Plateau2::WindowIsOpen() {
374374
}
375375

376376
void Plateau2::OnParamChange(int index) {
377-
if (copy1to2) {
378-
if (index >= kEnable1 && index <= k1to2HighDamp) //Tank 1 range
377+
if (link1to2) {
378+
if (index >= kInputLowDamp1 && index <= kSoftClip1) //Tank 1 range
379379
{
380-
UpdateParameter(index);
381-
UpdateParameter(index + kEnable2 - kEnable1); //Copy to tank 2
380+
UpdateParameter(index, index);
381+
constexpr int offset = kEnable2 - kEnable1;
382+
UpdateParameter(index, index + offset); //Copy to tank 2
382383
}
383-
else if (index < kEnable1 || index > k2to1HighDamp) //Other
384+
else if (!(index >= kInputLowDamp2 && index <= kSoftClip2)) //Not tank 2 range
384385
{
385-
UpdateParameter(index);
386+
UpdateParameter(index, index);
386387
}
387388
}
388389
else {
389-
UpdateParameter(index);
390+
UpdateParameter(index, index);
390391
}
391392
}
392393

393-
void Plateau2::UpdateParameter(int index)
394+
void Plateau2::UpdateParameter(int sourceIndex, int targetIndex)
394395
{
395-
switch (index) {
396+
switch (targetIndex) {
396397
case kDry:
397398
dryParam = GetParam(kDry)->Value() / 100;
398399
break;
@@ -407,10 +408,10 @@ void Plateau2::UpdateParameter(int index)
407408
reverb1.freeze(GetParam(kFreeze1)->Value() >= 0.5 || GetParam(kFreeze)->Value() >= 0.5);
408409
reverb2.freeze(GetParam(kFreeze2)->Value() >= 0.5 || GetParam(kFreeze)->Value() >= 0.5);
409410
break;
410-
case kCopy1to2:
411-
copy1to2 = GetParam(kCopy1to2)->Value() >= 0.5;
412-
/*if (copy1to2) {
413-
411+
case kLink1to2:
412+
link1to2 = GetParam(kLink1to2)->Value() >= 0.5;
413+
/*if (link1to2) {
414+
414415
}*/
415416
break;
416417
case kEnable1:
@@ -432,25 +433,26 @@ void Plateau2::UpdateParameter(int index)
432433
input1Param = GetParam(kInput1)->Value() / 100;
433434
break;
434435
case kSoftClip1:
435-
softClip1Param = GetParam(kSoftClip1)->Value() >= 0.5;
436+
softClip1Param = GetParam(sourceIndex)->Value() >= 0.5;
436437
break;
437438
case kWidth1:
438439
width1Param = GetParam(kWidth1)->Value() / 100;
439440
break;
440441
case kPreDelay1:
441-
reverb1.setPreDelay(GetParam(index)->Value());
442+
reverb1.setPreDelay(GetParam(sourceIndex)->Value());
442443
break;
443444
case kInputLowDamp1:
444-
reverb1.setInputFilterLowCutoffPitch(10.f - GetParam(index)->Value());
445+
reverb1.setInputFilterLowCutoffPitch(10.f - GetParam(sourceIndex)->Value());
445446
break;
446447
case kInputHighDamp1:
447-
reverb1.setInputFilterHighCutoffPitch(GetParam(index)->Value());
448+
reverb1.setInputFilterHighCutoffPitch(GetParam(sourceIndex)->Value());
448449
break;
449450
case kSize1:
450451
case kTunedMode1:
451452
{
452-
double size = GetParam(kSize1)->Value();
453-
if (GetParam(kTunedMode1)->Value() >= 0.5) {
453+
bool source2 = sourceIndex == kSize2 || sourceIndex == kTunedMode2;
454+
double size = GetParam(source2 ? kSize2 : kSize1)->Value();
455+
if (GetParam(source2 ? kTunedMode2 : kTunedMode1)->Value() >= 0.5) {
454456
reverb1.setTimeScale(0.0025f * powf(2.f, size * 5.f));
455457
}
456458
else {
@@ -459,41 +461,41 @@ void Plateau2::UpdateParameter(int index)
459461
break;
460462
}
461463
case kDiffusion1:
462-
reverb1.setTankDiffusion(GetParam(index)->Value());
464+
reverb1.setTankDiffusion(GetParam(sourceIndex)->Value());
463465
break;
464466
case kDecay1:
465467
{
466-
double decay = GetParam(index)->Value();
468+
double decay = GetParam(sourceIndex)->Value();
467469
reverb1.setDecay(2 * decay - decay * decay);
468470
break;
469471
}
470472
case kReverbLowDamp1:
471-
reverb1.setTankFilterLowCutFrequency(10.f - GetParam(index)->Value());
473+
reverb1.setTankFilterLowCutFrequency(10.f - GetParam(sourceIndex)->Value());
472474
break;
473475
case kReverbHighDamp1:
474-
reverb1.setTankFilterHighCutFrequency(GetParam(index)->Value());
476+
reverb1.setTankFilterHighCutFrequency(GetParam(sourceIndex)->Value());
475477
break;
476478
case kModSpeed1:
477479
{
478-
double modSpeed = GetParam(index)->Value();
480+
double modSpeed = GetParam(sourceIndex)->Value();
479481
reverb1.setTankModSpeed(modSpeed * modSpeed * 99.f + 1.f);
480482
break;
481483
}
482484
case kModDepth1:
483-
reverb1.setTankModDepth(GetParam(index)->Value());
485+
reverb1.setTankModDepth(GetParam(sourceIndex)->Value());
484486
break;
485487
case kModShape1:
486-
reverb1.setTankModShape(GetParam(index)->Value());
488+
reverb1.setTankModShape(GetParam(sourceIndex)->Value());
487489
break;
488490
case kDiffuseInput1:
489-
reverb1.enableInputDiffusion(GetParam(index)->Value() >= 0.5);
491+
reverb1.enableInputDiffusion(GetParam(sourceIndex)->Value() >= 0.5);
490492
break;
491493
case kNesting1:
492-
reverb1.setTankDiffusionNesting(GetParam(index)->Value() >= 0.5);
494+
reverb1.setTankDiffusionNesting(GetParam(sourceIndex)->Value() >= 0.5);
493495
break;
494496
case kDiffusionDecay1:
495497
{
496-
double scaled = scale<double>(GetParam(index)->Value(), 0, 100, 0, 1.3);
498+
double scaled = scale<double>(GetParam(sourceIndex)->Value(), 0, 100, 0, 1.3);
497499
if (!GetParam(kDanger)->Value()) {
498500
//Clip to safe values
499501
scaled = clip<double>(scaled, 0.3, 1);
@@ -502,7 +504,7 @@ void Plateau2::UpdateParameter(int index)
502504
break;
503505
}
504506
case kVariance1:
505-
reverb1.setTankVariance(GetParam(index)->Value());
507+
reverb1.setTankVariance(GetParam(sourceIndex)->Value());
506508
break;
507509
case kStereoSource1:
508510
sourceBalance1 = balanceFactors(GetParam(kStereoSource1)->Value() / 100);
@@ -520,13 +522,13 @@ void Plateau2::UpdateParameter(int index)
520522
send1To2Delay.setDelayTime(GetParam(k1to2Delay)->Value() * GetSampleRate());
521523
break;
522524
case k1to2LowDamp:
523-
send1To2HP.setCutoffFreq(pitch2freq(10.f - GetParam(index)->Value()));
525+
send1To2HP.setCutoffFreq(pitch2freq(10.f - GetParam(sourceIndex)->Value()));
524526
break;
525527
case k1to2HighDamp:
526-
send1To2LP.setCutoffFreq(pitch2freq(GetParam(index)->Value()));
528+
send1To2LP.setCutoffFreq(pitch2freq(GetParam(sourceIndex)->Value()));
527529
break;
528530
case kModVariance1:
529-
reverb1.setTankModVariance(GetParam(index)->Value());
531+
reverb1.setTankModVariance(GetParam(sourceIndex)->Value());
530532
break;
531533

532534
case kEnable2:
@@ -547,25 +549,26 @@ void Plateau2::UpdateParameter(int index)
547549
input2Param = GetParam(kInput2)->Value() / 100;
548550
break;
549551
case kSoftClip2:
550-
softClip2Param = GetParam(kSoftClip2)->Value() >= 0.5;
552+
softClip2Param = GetParam(sourceIndex)->Value() >= 0.5;
551553
break;
552554
case kWidth2:
553555
width2Param = GetParam(kWidth2)->Value() / 100;
554556
break;
555557
case kPreDelay2:
556-
reverb2.setPreDelay(GetParam(index)->Value());
558+
reverb2.setPreDelay(GetParam(sourceIndex)->Value());
557559
break;
558560
case kInputLowDamp2:
559-
reverb2.setInputFilterLowCutoffPitch(10.f - GetParam(index)->Value());
561+
reverb2.setInputFilterLowCutoffPitch(10.f - GetParam(sourceIndex)->Value());
560562
break;
561563
case kInputHighDamp2:
562-
reverb2.setInputFilterHighCutoffPitch(GetParam(index)->Value());
564+
reverb2.setInputFilterHighCutoffPitch(GetParam(sourceIndex)->Value());
563565
break;
564566
case kSize2:
565567
case kTunedMode2:
566568
{
567-
double size = GetParam(kSize2)->Value();
568-
if (GetParam(kTunedMode2)->Value() >= 0.5) {
569+
bool source2 = sourceIndex == kSize2 || sourceIndex == kTunedMode2;
570+
double size = GetParam(source2 ? kSize2 : kSize1)->Value();
571+
if (GetParam(source2 ? kTunedMode2 : kTunedMode1)->Value() >= 0.5) {
569572
reverb2.setTimeScale(0.0025f * powf(2.f, size * 5.f));
570573
}
571574
else {
@@ -574,41 +577,41 @@ void Plateau2::UpdateParameter(int index)
574577
break;
575578
}
576579
case kDiffusion2:
577-
reverb2.setTankDiffusion(GetParam(index)->Value());
580+
reverb2.setTankDiffusion(GetParam(sourceIndex)->Value());
578581
break;
579582
case kDecay2:
580583
{
581-
double decay = GetParam(index)->Value();
584+
double decay = GetParam(sourceIndex)->Value();
582585
reverb2.setDecay(2.f * decay - decay * decay);
583586
break;
584587
}
585588
case kReverbLowDamp2:
586-
reverb2.setTankFilterLowCutFrequency(10.f - GetParam(index)->Value());
589+
reverb2.setTankFilterLowCutFrequency(10.f - GetParam(sourceIndex)->Value());
587590
break;
588591
case kReverbHighDamp2:
589-
reverb2.setTankFilterHighCutFrequency(GetParam(index)->Value());
592+
reverb2.setTankFilterHighCutFrequency(GetParam(sourceIndex)->Value());
590593
break;
591594
case kModSpeed2:
592595
{
593-
double modSpeed = GetParam(index)->Value();
596+
double modSpeed = GetParam(sourceIndex)->Value();
594597
reverb2.setTankModSpeed(modSpeed * modSpeed * 99.f + 1.f);
595598
break;
596599
}
597600
case kModDepth2:
598-
reverb2.setTankModDepth(GetParam(index)->Value());
601+
reverb2.setTankModDepth(GetParam(sourceIndex)->Value());
599602
break;
600603
case kModShape2:
601-
reverb2.setTankModShape(GetParam(index)->Value());
604+
reverb2.setTankModShape(GetParam(sourceIndex)->Value());
602605
break;
603606
case kDiffuseInput2:
604-
reverb2.enableInputDiffusion(GetParam(index)->Value() >= 0.5);
607+
reverb2.enableInputDiffusion(GetParam(sourceIndex)->Value() >= 0.5);
605608
break;
606609
case kNesting2:
607-
reverb2.setTankDiffusionNesting(GetParam(index)->Value());
610+
reverb2.setTankDiffusionNesting(GetParam(sourceIndex)->Value());
608611
break;
609612
case kDiffusionDecay2:
610613
{
611-
double scaled = scale<double>(GetParam(index)->Value(), 0, 100, 0, 1.3);
614+
double scaled = scale<double>(GetParam(sourceIndex)->Value(), 0, 100, 0, 1.3);
612615
if (!GetParam(kDanger)->Value()) {
613616
//Clip to safe values
614617
scaled = clip<double>(scaled, 0.3, 1);
@@ -617,7 +620,7 @@ void Plateau2::UpdateParameter(int index)
617620
break;
618621
}
619622
case kVariance2:
620-
reverb2.setTankVariance(GetParam(index)->Value());
623+
reverb2.setTankVariance(GetParam(sourceIndex)->Value());
621624
break;
622625
case kStereoSource2:
623626
sourceBalance2 = balanceFactors(GetParam(kStereoSource2)->Value() / 100);
@@ -635,13 +638,13 @@ void Plateau2::UpdateParameter(int index)
635638
send2To1Delay.setDelayTime(GetParam(k2to1Delay)->Value() * GetSampleRate());
636639
break;
637640
case k2to1LowDamp:
638-
send2To1HP.setCutoffFreq(pitch2freq(10.f - GetParam(index)->Value()));
641+
send2To1HP.setCutoffFreq(pitch2freq(10.f - GetParam(sourceIndex)->Value()));
639642
break;
640643
case k2to1HighDamp:
641-
send2To1LP.setCutoffFreq(pitch2freq(GetParam(index)->Value()));
644+
send2To1LP.setCutoffFreq(pitch2freq(GetParam(sourceIndex)->Value()));
642645
break;
643646
case kModVariance2:
644-
reverb2.setTankModVariance(GetParam(index)->Value());
647+
reverb2.setTankModVariance(GetParam(sourceIndex)->Value());
645648
break;
646649

647650
case kDanger:

Plateau2/Plateau2.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ enum EParams
1919
kDry,
2020
kFreeze,
2121
kClear,
22-
kCopy1to2,
22+
kLink1to2,
2323

2424
kEnable1,
2525
kWet1,
@@ -136,7 +136,7 @@ class Plateau2 final : public Plugin
136136
void UpdatePageVisibility();
137137
void UpdateSendVisibility();
138138
void OnParamChange(int index) override;
139-
void UpdateParameter(int index);
139+
void UpdateParameter(int sourceIndex, int targetIndex);
140140
bool WindowIsOpen();
141141
void SelectTank(bool tank2);
142142
#endif
@@ -197,7 +197,7 @@ class Plateau2 final : public Plugin
197197
double dryParam = 1;
198198
double lastGlobalClear = 0;
199199

200-
bool copy1to2 = false;
200+
bool link1to2 = false;
201201

202202
bool tank1Enabled = true;
203203
bool tank2Enabled = false;

0 commit comments

Comments
 (0)