@@ -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
0 commit comments