Skip to content

Commit 9aa7615

Browse files
committed
Modulation Variance
1 parent d68205d commit 9aa7615

File tree

4 files changed

+115
-51
lines changed

4 files changed

+115
-51
lines changed

Plateau2/Plateau2.cpp

Lines changed: 45 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ Plateau2::Plateau2(const InstanceInfo& info)
2121
GetParam(kModSpeed1)->InitDouble("Modulation Speed 1", 0., 0., 1., 0.01);
2222
GetParam(kModDepth1)->InitDouble("Modulation Depth 1", 0.5, 0., 16., 0.01);
2323
GetParam(kModShape1)->InitDouble("Modulation Shape 1", 0.5, 0., 1., 0.01);
24+
GetParam(kModVariance1)->InitDouble("Modulation Variance 1", 1., 0., 1., 0.01);
2425
GetParam(kFreeze1)->InitBool("Freeze 1", false);
2526
GetParam(kClear1)->InitBool("Clear 1", false);
2627
GetParam(kTunedMode1)->InitBool("Tuned Mode 1", false);
@@ -52,6 +53,7 @@ Plateau2::Plateau2(const InstanceInfo& info)
5253
GetParam(kModSpeed2)->InitDouble("Modulation Speed 2", 0., 0., 1., 0.01);
5354
GetParam(kModDepth2)->InitDouble("Modulation Depth 2", 0.5, 0., 16., 0.01);
5455
GetParam(kModShape2)->InitDouble("Modulation Shape 2", 0.5, 0., 1., 0.01);
56+
GetParam(kModVariance2)->InitDouble("Modulation Variance 2", 1., 0., 1., 0.01);
5557
GetParam(kFreeze2)->InitBool("Freeze 2", false);
5658
GetParam(kClear2)->InitBool("Clear 2", false);
5759
GetParam(kTunedMode2)->InitBool("Tuned Mode 2", false);
@@ -116,18 +118,19 @@ Plateau2::Plateau2(const InstanceInfo& info)
116118
const IBitmap NeedleFG1PNG = pGraphics->LoadBitmap(NEEDLEFG1_FN);
117119
const IBitmap NeedleFG2PNG = pGraphics->LoadBitmap(NEEDLEFG2_FN);
118120

119-
Knobs[0] = new NeedleKnob(IRECT::MakeXYWH(89 - 40, 141 + 50, 42, 42), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kDry, kDry);
120-
Knobs[1] = new NeedleKnob(IRECT::MakeXYWH(180+40, 141+50, 42, 42), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kWet1, kWet2);
121-
Knobs[2] = new NeedleKnob(IRECT::MakeXYWH(93, 230, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kInputLowDamp1, kInputLowDamp2);
122-
Knobs[3] = new NeedleKnob(IRECT::MakeXYWH(166, 230, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kInputHighDamp1, kInputHighDamp2);
123-
Knobs[4] = new NeedleKnob(IRECT::MakeXYWH(56, 310, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kSize1, kSize2);
124-
Knobs[5] = new NeedleKnob(IRECT::MakeXYWH(130, 329, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kDiffusion1, kDiffusion2);
125-
Knobs[6] = new NeedleKnob(IRECT::MakeXYWH(203, 310, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kDecay1, kDecay2);
126-
Knobs[7] = new NeedleKnob(IRECT::MakeXYWH(93, 446, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kReverbLowDamp1, kReverbLowDamp2);
127-
Knobs[8] = new NeedleKnob(IRECT::MakeXYWH(166, 446, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kReverbHighDamp1, kReverbHighDamp2);
128-
Knobs[9] = new NeedleKnob(IRECT::MakeXYWH(56, 518, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kModSpeed1, kModSpeed2);
129-
Knobs[10] = new NeedleKnob(IRECT::MakeXYWH(203, 518, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kModDepth1, kModDepth2);
130-
Knobs[11] = new NeedleKnob(IRECT::MakeXYWH(130, 543, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kModShape1, kModShape2);
121+
//Main Page Knobs
122+
Knobs[kDryKnob] = new NeedleKnob(IRECT::MakeXYWH(89 - 40, 141 + 50, 42, 42), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kDry, kDry);
123+
Knobs[kWetKnob] = new NeedleKnob(IRECT::MakeXYWH(180+40, 141+50, 42, 42), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kWet1, kWet2);
124+
Knobs[kInputLowDampKnob] = new NeedleKnob(IRECT::MakeXYWH(93, 230, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kInputLowDamp1, kInputLowDamp2);
125+
Knobs[kInputHighDampKnob] = new NeedleKnob(IRECT::MakeXYWH(166, 230, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kInputHighDamp1, kInputHighDamp2);
126+
Knobs[kSizeKnob] = new NeedleKnob(IRECT::MakeXYWH(56, 310, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kSize1, kSize2);
127+
Knobs[kDiffusionKnob] = new NeedleKnob(IRECT::MakeXYWH(130, 329, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kDiffusion1, kDiffusion2);
128+
Knobs[kDecayKnob] = new NeedleKnob(IRECT::MakeXYWH(203, 310, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kDecay1, kDecay2);
129+
Knobs[kReverbLowDampKnob] = new NeedleKnob(IRECT::MakeXYWH(93, 446, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kReverbLowDamp1, kReverbLowDamp2);
130+
Knobs[kReverbHighDampKnob] = new NeedleKnob(IRECT::MakeXYWH(166, 446, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kReverbHighDamp1, kReverbHighDamp2);
131+
Knobs[kModSpeedKnob] = new NeedleKnob(IRECT::MakeXYWH(56, 518, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kModSpeed1, kModSpeed2);
132+
Knobs[kModDepthKnob] = new NeedleKnob(IRECT::MakeXYWH(203, 518, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kModDepth1, kModDepth2);
133+
Knobs[kModShapeKnob] = new NeedleKnob(IRECT::MakeXYWH(130, 543, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kModShape1, kModShape2);
131134

132135
for (int i = 0; i <= 11; i++) {
133136
pGraphics->AttachControl(Knobs[i]);
@@ -137,24 +140,28 @@ Plateau2::Plateau2(const InstanceInfo& info)
137140
pGraphics->AttachControl(SVGs[4]);
138141
SVGs[4]->Hide(true);
139142

140-
Knobs[12] = new NeedleKnob(IRECT::MakeXYWH(140, 140, 35, 35), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kPreDelay1, kPreDelay2);
143+
//Extras Page Knobs
144+
Knobs[kPreDelayKnob] = new NeedleKnob(IRECT::MakeXYWH(140, 140, 35, 35), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kPreDelay1, kPreDelay2);
141145

142-
Knobs[13] = new NeedleKnob(IRECT::MakeXYWH(233, 310, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kDiffusionDecay1, kDiffusionDecay2);
143-
Knobs[13]->Bound = 72.6923f;
146+
Knobs[kDiffusionDecayKnob] = new NeedleKnob(IRECT::MakeXYWH(233, 310, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kDiffusionDecay1, kDiffusionDecay2);
147+
Knobs[kDiffusionDecayKnob]->Bound = 72.6923f;
144148

145-
Knobs[14] = new NeedleKnob(IRECT::MakeXYWH(93, 170, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kInput1, kInput2);
146-
Knobs[15] = new NeedleKnob(IRECT::MakeXYWH(166, 170, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kStereoSource1, kStereoSource2);
149+
Knobs[kModVarianceKnob] = new NeedleKnob(IRECT::MakeXYWH(233, 518, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kModVariance1, kModVariance2);
147150

148-
Knobs[16] = new NeedleKnob(IRECT::MakeXYWH(93, 294, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kWidth1, kWidth2);
149-
Knobs[17] = new NeedleKnob(IRECT::MakeXYWH(166, 294, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kPan1, kPan2);
151+
//Routing Page Knobs
152+
Knobs[kInputKnob] = new NeedleKnob(IRECT::MakeXYWH(93, 170, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kInput1, kInput2);
153+
Knobs[kStereoSourceKnob] = new NeedleKnob(IRECT::MakeXYWH(166, 170, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kStereoSource1, kStereoSource2);
150154

151-
Knobs[18] = new NeedleKnob(IRECT::MakeXYWH(93, 440, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, k1to2Level, k2to1Level);
152-
Knobs[19] = new NeedleKnob(IRECT::MakeXYWH(166, 440, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, k1to2Delay, k2to1Delay);
155+
Knobs[kWidthKnob] = new NeedleKnob(IRECT::MakeXYWH(93, 294, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kWidth1, kWidth2);
156+
Knobs[kPanKnob] = new NeedleKnob(IRECT::MakeXYWH(166, 294, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, kPan1, kPan2);
153157

154-
Knobs[20] = new NeedleKnob(IRECT::MakeXYWH(93, 530, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, k1to2LowDamp, k2to1LowDamp);
155-
Knobs[21] = new NeedleKnob(IRECT::MakeXYWH(166, 530, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, k1to2HighDamp, k2to1HighDamp);
158+
Knobs[kSendLevel] = new NeedleKnob(IRECT::MakeXYWH(93, 440, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, k1to2Level, k2to1Level);
159+
Knobs[kSendDelay] = new NeedleKnob(IRECT::MakeXYWH(166, 440, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, k1to2Delay, k2to1Delay);
160+
161+
Knobs[kSendLowDamp] = new NeedleKnob(IRECT::MakeXYWH(93, 530, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, k1to2LowDamp, k2to1LowDamp);
162+
Knobs[kSendHighDamp] = new NeedleKnob(IRECT::MakeXYWH(166, 530, 56, 56), NeedleSVG, NeedleBGSVG, NeedleFG1PNG, NeedleFG2PNG, k1to2HighDamp, k2to1HighDamp);
156163

157-
for (int i = 12; i <= 21; i++) {
164+
for (int i = kPreDelayKnob; i <= kSendHighDamp; i++) {
158165
pGraphics->AttachControl(Knobs[i]);
159166
Knobs[i]->Hide(true);
160167
}
@@ -278,7 +285,7 @@ void Plateau2::ChangePage(int direction, const ISVG PageBackgrounds[kNumPages],
278285
void Plateau2::UpdatePageVisibility()
279286
{
280287
//Main page
281-
for (int i = 0; i <= 11; i++) {
288+
for (int i = kDryKnob; i <= kModShapeKnob; i++) {
282289
Knobs[i]->Hide(currentPage!=0);
283290
}
284291
for (int i = 0; i <= 4; i++) {
@@ -289,15 +296,15 @@ void Plateau2::UpdatePageVisibility()
289296
}
290297

291298
//Extras page
292-
for (int i = 12; i <= 13; i++) {
299+
for (int i = kPreDelayKnob; i <= kModVarianceKnob; i++) {
293300
Knobs[i]->Hide(currentPage != 1);
294301
}
295302
for (int i = 5; i <= 6; i++) {
296303
Switches[i]->Hide(currentPage != 1);
297304
}
298305

299306
//Routing page
300-
for (int i = 14; i <= 17; i++) {
307+
for (int i = kInputKnob; i <= kPanKnob; i++) {
301308
Knobs[i]->Hide(currentPage != 2);
302309
}
303310
UpdateSendVisibility();
@@ -308,7 +315,7 @@ void Plateau2::UpdateSendVisibility() {
308315
Switches[i]->Hide(currentPage != 2);
309316
}
310317
bool dangerous = GetParam(kDanger)->Value();
311-
for (int i = 18; i <= 21; i++) {
318+
for (int i = kSendLevel; i <= kSendHighDamp; i++) {
312319
Knobs[i]->Hide(currentPage != 2 || (!dangerous && tank2Selected));
313320
}
314321
SVGs[0]->Hide(currentPage != 2 || !tank2Selected);
@@ -428,6 +435,9 @@ void Plateau2::OnParamChange(int index)
428435
case k1to2HighDamp:
429436
send1To2LP.setCutoffFreq(pitch2freq(GetParam(index)->Value()));
430437
break;
438+
case kModVariance1:
439+
reverb1.setTankModVariance(GetParam(index)->Value());
440+
break;
431441

432442
case kPreDelay2:
433443
reverb2.setPreDelay(GetParam(index)->Value());
@@ -481,7 +491,7 @@ void Plateau2::OnParamChange(int index)
481491
reverb2.enableInputDiffusion(GetParam(index)->Value()>=0.5);
482492
break;
483493
case kNesting2:
484-
reverb2.setTankDiffusionNesting(GetParam(index)->Value()>=0.5);
494+
reverb2.setTankDiffusionNesting(GetParam(index)->Value());
485495
break;
486496
case kDiffusionDecay2:
487497
{
@@ -508,6 +518,9 @@ void Plateau2::OnParamChange(int index)
508518
case k2to1HighDamp:
509519
send2To1LP.setCutoffFreq(pitch2freq(GetParam(index)->Value()));
510520
break;
521+
case kModVariance2:
522+
reverb2.setTankModVariance(GetParam(index)->Value());
523+
break;
511524

512525
case kDanger:
513526
if (GetParam(kDanger)->Value()<=0.5) {
@@ -516,13 +529,13 @@ void Plateau2::OnParamChange(int index)
516529
}
517530
if (WindowIsOpen()) {
518531
UpdateSendVisibility();
519-
Knobs[13]->Bound = GetParam(kDanger)->Value() ? 135.f : 72.6923f;
532+
Knobs[kDiffusionDecayKnob]->Bound = GetParam(kDanger)->Value() ? 135.f : 72.6923f;
520533

521534
SetParameterValue(kDiffusionDecay1, clip<double>(GetParam(kDiffusionDecay1)->Value(), 23.0769, 76.92307)/100);
522535
SetParameterValue(kDiffusionDecay2, clip<double>(GetParam(kDiffusionDecay2)->Value(), 23.0769, 76.92307)/100);
523536

524-
Knobs[13]->SetValue((tank2Selected ? GetParam(kDiffusionDecay2)->Value() : GetParam(kDiffusionDecay1)->Value()) / 100);
525-
Knobs[13]->SetDirty(false);
537+
Knobs[kDiffusionDecayKnob]->SetValue((tank2Selected ? GetParam(kDiffusionDecay2)->Value() : GetParam(kDiffusionDecay1)->Value()) / 100);
538+
Knobs[kDiffusionDecayKnob]->SetDirty(false);
526539
}
527540
break;
528541
}

Plateau2/Plateau2.h

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ enum EParams
3131
kModSpeed1,
3232
kModDepth1,
3333
kModShape1,
34+
kModVariance1,
3435
kFreeze1,
3536
kClear1,
3637
kTunedMode1,
@@ -61,6 +62,7 @@ enum EParams
6162
kModSpeed2,
6263
kModDepth2,
6364
kModShape2,
65+
kModVariance2,
6466
kFreeze2,
6567
kClear2,
6668
kTunedMode2,
@@ -84,7 +86,33 @@ enum EParams
8486
kNumParams
8587
};
8688

87-
const int kNumKnobs = 22;
89+
enum EKnobs {
90+
kDryKnob,
91+
kWetKnob,
92+
kInputLowDampKnob,
93+
kInputHighDampKnob,
94+
kSizeKnob,
95+
kDiffusionKnob,
96+
kDecayKnob,
97+
kReverbLowDampKnob,
98+
kReverbHighDampKnob,
99+
kModSpeedKnob,
100+
kModDepthKnob,
101+
kModShapeKnob,
102+
kPreDelayKnob,
103+
kDiffusionDecayKnob,
104+
kModVarianceKnob,
105+
kInputKnob,
106+
kStereoSourceKnob,
107+
kWidthKnob,
108+
kPanKnob,
109+
kSendLevel,
110+
kSendDelay,
111+
kSendLowDamp,
112+
kSendHighDamp,
113+
kNumKnobs
114+
};
115+
88116
const int kNumSwitches = 8;
89117
const int kNumButtons = 2;
90118
const int kNumPages = 3;

Plateau2/dsp/Dattorro.cpp

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ Dattorro1997Tank::Dattorro1997Tank()
1414
lfo3.setFrequency(lfo3Freq);
1515
lfo4.setFrequency(lfo4Freq);
1616

17-
lfo2.setPhase(0.25);
18-
lfo3.setPhase(0.5);
19-
lfo4.setPhase(0.75);
17+
//lfo2.setPhase(0.25);
18+
//lfo3.setPhase(0.5);
19+
//lfo4.setPhase(0.75);
2020

2121
lfo1.setRevPoint(0.5);
2222
lfo2.setRevPoint(0.5);
@@ -127,10 +127,26 @@ void Dattorro1997Tank::setDecay(const double newDecay) {
127127
}
128128

129129
void Dattorro1997Tank::setModSpeed(const double newModSpeed) {
130-
lfo1.setFrequency(lfo1Freq * newModSpeed);
131-
lfo2.setFrequency(lfo2Freq * newModSpeed);
132-
lfo3.setFrequency(lfo3Freq * newModSpeed);
133-
lfo4.setFrequency(lfo4Freq * newModSpeed);
130+
modSpeed = newModSpeed;
131+
updateLFOSpeeds();
132+
}
133+
134+
void Dattorro1997Tank::setModVariance(const double newModVariance) {
135+
modVariance = newModVariance;
136+
lfo1.setPhase(0);
137+
lfo2.setPhase(0);
138+
lfo3.setPhase(0);
139+
lfo4.setPhase(0);
140+
updateLFOSpeeds();
141+
}
142+
143+
void Dattorro1997Tank::updateLFOSpeeds() {
144+
double avg1 = (lfo1Freq + lfo3Freq) / 2;
145+
double avg2 = (lfo2Freq + lfo4Freq) / 2;
146+
lfo1.setFrequency(linterp<double>(avg1, lfo1Freq, modVariance) * modSpeed);
147+
lfo2.setFrequency(linterp<double>(avg2, lfo2Freq, modVariance) * modSpeed);
148+
lfo3.setFrequency(linterp<double>(avg1, lfo3Freq, modVariance) * modSpeed);
149+
lfo4.setFrequency(linterp<double>(avg2, lfo4Freq, modVariance) * modSpeed);
134150
}
135151

136152
void Dattorro1997Tank::setModDepth(const double newModDepth) {
@@ -411,6 +427,10 @@ void Dattorro::setTankModShape(const double modShape) {
411427
tank.setModShape(modShape);
412428
}
413429

430+
void Dattorro::setTankModVariance(const double variance) {
431+
tank.setModVariance(variance);
432+
}
433+
414434
double Dattorro::getLeftOutput() const {
415435
return leftOut;
416436
}

Plateau2/dsp/Dattorro.hpp

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ class Dattorro1997Tank {
2626
void setModSpeed(const double newModSpeed);
2727
void setModDepth(const double newModDepth);
2828
void setModShape(const double shape);
29+
void setModVariance(const double variance);
30+
31+
void updateLFOSpeeds();
2932

3033
void setHighCutFrequency(const double frequency);
3134
void setLowCutFrequency(const double frequency);
@@ -45,18 +48,15 @@ class Dattorro1997Tank {
4548
static constexpr double leftApf2Time = 1800.0;
4649
static constexpr double leftDelay2Time = 3720.0;
4750

48-
static constexpr double rightApf1Time = 908.0;
49-
static constexpr double rightDelay1Time = 4217.0;
50-
static constexpr double rightApf2Time = 2656.0;
51-
static constexpr double rightDelay2Time = 3163.0;
51+
//static constexpr double rightApf1Time = 908.0;
52+
//static constexpr double rightDelay1Time = 4217.0;
53+
//static constexpr double rightApf2Time = 2656.0;
54+
//static constexpr double rightDelay2Time = 3163.0;
5255

53-
static constexpr size_t leftDelay1RightTap1 = 266;
54-
static constexpr size_t leftDelay1RightTap2 = 2974;
55-
static constexpr size_t leftApf2RightTap1 = 1913;
56-
static constexpr size_t leftDelay2RightTap = 1996;
57-
static constexpr size_t rightDelay1RightTap = 1990;
58-
static constexpr size_t rightApf2RightTap = 187;
59-
static constexpr size_t rightDelay2RightTap = 1066;
56+
static constexpr double rightApf1Time = 672.0;
57+
static constexpr double rightDelay1Time = 4453.0;
58+
static constexpr double rightApf2Time = 1800.0;
59+
static constexpr double rightDelay2Time = 3720.0;
6060

6161
enum LeftOutTaps {
6262
L_DELAY_1_L_TAP_1,
@@ -114,6 +114,8 @@ class Dattorro1997Tank {
114114
double decayParam = 0.0;
115115
double decay = 0.0;
116116

117+
double modSpeed;
118+
double modVariance = 0.0;
117119
double lfoExcursion = 0.0;
118120

119121
// Freeze Cross fade
@@ -182,6 +184,7 @@ class Dattorro {
182184
void setTankModSpeed(const double modSpeed);
183185
void setTankModDepth(const double modDepth);
184186
void setTankModShape(const double modShape);
187+
void setTankModVariance(const double variance);
185188

186189
double getLeftOutput() const;
187190
double getRightOutput() const;

0 commit comments

Comments
 (0)