Skip to content

Commit 954ea20

Browse files
committed
Expanded UI
1 parent 815c948 commit 954ea20

8 files changed

Lines changed: 210 additions & 45 deletions

File tree

RSAlgorithmicVerb.jucer

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
jucerFormatVersion="1" companyWebsite="reillyspitzfaden.netlify.app"
66
companyEmail="reillypascal@gmail.com" pluginManufacturer="Reilly Spitzfaden"
77
pluginManufacturerCode="Rspi" pluginCode="Rsav" aaxIdentifier="com.reillyspitzfaden.RSAlgorithmicVerb"
8-
bundleIdentifier="com.reillyspitzfaden.RSAlgorithmicVerb" version="0.1.1"
8+
bundleIdentifier="com.reillyspitzfaden.RSAlgorithmicVerb" version="0.2.0"
99
pluginFormats="buildAU,buildVST3" pluginAUMainType="'aufx'" pluginVST3Category="Fx"
1010
pluginAAXCategory="8" pluginVSTCategory="kPlugCategEffect">
1111
<MAINGROUP id="h5VveC" name="RSAlgorithmicVerb">
@@ -21,6 +21,7 @@
2121
<FILE id="jwqlsc" name="EarlyReflections.h" compile="0" resource="0"
2222
file="Source/EarlyReflections.h"/>
2323
<FILE id="GtffiZ" name="Freeverb.h" compile="0" resource="0" file="Source/Freeverb.h"/>
24+
<FILE id="E3u2WC" name="IOBlocks.h" compile="0" resource="0" file="Source/IOBlocks.h"/>
2425
<FILE id="mCFD5y" name="DelayLineWithSampleAccess.h" compile="0" resource="0"
2526
file="Source/DelayLineWithSampleAccess.h"/>
2627
<FILE id="mYaXC8" name="ProcessorBase.h" compile="0" resource="0" file="Source/ProcessorBase.h"/>

Source/DattorroVerb.h

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class DattorroPlate : public ProcessorBase
6767

6868
// initialize input chain parameters
6969
preDelay.setDelay(mPreDelayTime);
70-
inputFilter.setCutoffFrequency(mDampingCutoff);
70+
inputFilter.setCutoffFrequency(13500);
7171
allpass1.setDelay(210 * mSize);
7272
allpass2.setDelay(158 * mSize);
7373
allpass3.setDelay(561 * mSize);
@@ -77,7 +77,7 @@ class DattorroPlate : public ProcessorBase
7777

7878
// break out parameters so mod can add/subtract 12 samples
7979
modulatedAPF1.setDelay(1343 * mSize);
80-
modulatedAPF2.setDelay(995* mSize);
80+
modulatedAPF2.setDelay(995 * mSize);
8181

8282
delay1.setDelay(6241 * mSize);
8383
delay2.setDelay(6590 * mSize);
@@ -108,7 +108,10 @@ class DattorroPlate : public ProcessorBase
108108
// reverb sample loop params
109109
int channel = 0;
110110
// need separate ones for different delays
111-
float allpassFeedbackCoefficient = 0.5;
111+
float decayDiffusion1 = 0.93;
112+
float decayDiffusion2 = 0.67;
113+
float inputDiffusion1 = 1;
114+
float inputDiffusion2 = 0.83;
112115
auto* channelDataA = monoBufferA.getWritePointer (channel);
113116
auto* channelDataB = monoBufferB.getWritePointer (channel);
114117
for (int sample = 0; sample < buffer.getNumSamples(); ++sample)
@@ -120,26 +123,26 @@ class DattorroPlate : public ProcessorBase
120123

121124
// apply allpasses
122125
allpassOutput = allpass1.popSample(channel);
123-
feedback = allpassOutput * allpassFeedbackCoefficient;
124-
feedforward = -channelDataA[sample] - allpassOutput * allpassFeedbackCoefficient;
126+
feedback = allpassOutput * inputDiffusion1 * mDiffusion;
127+
feedforward = -channelDataA[sample] - allpassOutput * inputDiffusion1 * mDiffusion;
125128
allpass1.pushSample(channel, channelDataA[sample] + feedback);
126129
channelDataA[sample] = allpassOutput + feedforward;
127130

128131
allpassOutput = allpass2.popSample(channel);
129-
feedback = allpassOutput * allpassFeedbackCoefficient;
130-
feedforward = -channelDataA[sample] - allpassOutput * allpassFeedbackCoefficient;
132+
feedback = allpassOutput * inputDiffusion1 * mDiffusion;
133+
feedforward = -channelDataA[sample] - allpassOutput * inputDiffusion1 * mDiffusion;
131134
allpass2.pushSample(channel, channelDataA[sample] + feedback);
132135
channelDataA[sample] = allpassOutput + feedforward;
133136

134137
allpassOutput = allpass3.popSample(channel);
135-
feedback = allpassOutput * allpassFeedbackCoefficient;
136-
feedforward = -channelDataA[sample] - allpassOutput * allpassFeedbackCoefficient;
138+
feedback = allpassOutput * inputDiffusion2 * mDiffusion;
139+
feedforward = -channelDataA[sample] - allpassOutput * inputDiffusion2 * mDiffusion;
137140
allpass3.pushSample(channel, channelDataA[sample] + feedback);
138141
channelDataA[sample] = allpassOutput + feedforward;
139142

140143
allpassOutput = allpass4.popSample(channel);
141-
feedback = allpassOutput * allpassFeedbackCoefficient;
142-
feedforward = -channelDataA[sample] - allpassOutput * allpassFeedbackCoefficient;
144+
feedback = allpassOutput * inputDiffusion2 * mDiffusion;
145+
feedforward = -channelDataA[sample] - allpassOutput * inputDiffusion2 * mDiffusion;
143146
allpass4.pushSample(channel, channelDataA[sample] + feedback);
144147
channelDataA[sample] = allpassOutput + feedforward;
145148

@@ -148,8 +151,8 @@ class DattorroPlate : public ProcessorBase
148151

149152
// modulated APF1
150153
allpassOutput = modulatedAPF1.popSample(channel);
151-
feedback = allpassOutput * allpassFeedbackCoefficient;
152-
feedforward = -channelDataA[sample] - allpassOutput * allpassFeedbackCoefficient;
154+
feedback = allpassOutput * decayDiffusion1 * mDiffusion;
155+
feedforward = -channelDataA[sample] - allpassOutput * decayDiffusion1 * mDiffusion;
153156
modulatedAPF1.pushSample(channel, channelDataA[sample] + feedback);
154157
channelDataA[sample] = allpassOutput + feedforward;
155158

@@ -166,8 +169,8 @@ class DattorroPlate : public ProcessorBase
166169

167170
// allpass 5
168171
allpassOutput = allpass5.popSample(channel);
169-
feedback = allpassOutput * allpassFeedbackCoefficient;
170-
feedforward = -channelDataA[sample] - allpassOutput * allpassFeedbackCoefficient;
172+
feedback = allpassOutput * decayDiffusion1 * mDiffusion;
173+
feedforward = -channelDataA[sample] - allpassOutput * decayDiffusion1 * mDiffusion;
171174
allpass5.pushSample(channel, channelDataA[sample] + feedback);
172175
channelDataA[sample] = allpassOutput + feedforward;
173176

@@ -194,8 +197,8 @@ class DattorroPlate : public ProcessorBase
194197

195198
// modulated APF2
196199
allpassOutput = modulatedAPF2.popSample(channel);
197-
feedback = allpassOutput * allpassFeedbackCoefficient;
198-
feedforward = -channelDataB[sample] - allpassOutput * allpassFeedbackCoefficient;
200+
feedback = allpassOutput * decayDiffusion2 * mDiffusion;
201+
feedforward = -channelDataB[sample] - allpassOutput * decayDiffusion2 * mDiffusion;
199202
modulatedAPF2.pushSample(channel, channelDataB[sample] + feedback);
200203
channelDataB[sample] = allpassOutput + feedforward;
201204

@@ -212,8 +215,8 @@ class DattorroPlate : public ProcessorBase
212215

213216
// allpass 6
214217
allpassOutput = allpass6.popSample(channel);
215-
feedback = allpassOutput * allpassFeedbackCoefficient;
216-
feedforward = -channelDataB[sample] - allpassOutput * allpassFeedbackCoefficient;
218+
feedback = allpassOutput * decayDiffusion2 * mDiffusion;
219+
feedforward = -channelDataB[sample] - allpassOutput * decayDiffusion2 * mDiffusion;
217220
allpass6.pushSample(channel, channelDataB[sample] + feedback);
218221
channelDataB[sample] = allpassOutput + feedforward;
219222

@@ -284,6 +287,7 @@ class DattorroPlate : public ProcessorBase
284287
void setSize(float newSize) override { mSize = newSize; }
285288
void setDecay(float newDecay) override { mDecay = pow(newDecay, 2); }
286289
void setDampingCutoff(float newCutoff) override { mDampingCutoff = newCutoff; }
290+
void setDiffusion(float newDiffusion) override { mDiffusion = newDiffusion; }
287291
void setPreDelay(float newPreDelay) override { mPreDelayTime = newPreDelay; }
288292
void setEarlyLateMix(float newMix) override { mEarlyLateMix = newMix; }
289293
void setDryWetMix(float newMix) override { mDryWetMix = newMix; }
@@ -324,6 +328,7 @@ class DattorroPlate : public ProcessorBase
324328
float mSize = 1;
325329
float mDecay = 0.25;
326330
float mDampingCutoff = 6500;
331+
float mDiffusion = 0.75;
327332
float mEarlyLateMix = 1;
328333
float mDryWetMix = 0.25;
329334
};

Source/IOBlocks.h

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/*
2+
==============================================================================
3+
4+
IOBlocks.h
5+
Created: 30 May 2023 1:46:25pm
6+
Author: Reilly Spitzfaden
7+
8+
==============================================================================
9+
*/
10+
11+
#pragma once
12+
13+
#include <JuceHeader.h>
14+
15+
#include "ProcessorBase.h"
16+
17+
class OutputBlock : public ProcessorBase
18+
{
19+
public:
20+
OutputBlock() {}
21+
22+
void prepareToPlay(double sampleRate, int samplesPerBlock) override
23+
{
24+
juce::dsp::ProcessSpec spec;
25+
spec.sampleRate = sampleRate;
26+
spec.maximumBlockSize = samplesPerBlock;
27+
spec.numChannels = getMainBusNumInputChannels();
28+
29+
lowCutFilter.prepare(spec);
30+
lowCutFilter.reset();
31+
lowCutFilter.setType(juce::dsp::FirstOrderTPTFilterType::highpass);
32+
highCutFilter.prepare(spec);
33+
highCutFilter.reset();
34+
highCutFilter.setType(juce::dsp::FirstOrderTPTFilterType::lowpass);
35+
}
36+
37+
void processBlock(juce::AudioBuffer<float>& buffer, juce::MidiBuffer&) override
38+
{
39+
juce::ScopedNoDenormals noDenormals;
40+
auto totalNumInputChannels = getTotalNumInputChannels();
41+
auto totalNumOutputChannels = getTotalNumOutputChannels();
42+
43+
for (auto i = totalNumInputChannels; i < totalNumOutputChannels; ++i)
44+
buffer.clear (i, 0, buffer.getNumSamples());
45+
46+
// filtering
47+
lowCutFilter.setCutoffFrequency(mLowCut);
48+
highCutFilter.setCutoffFrequency(mHighCut);
49+
50+
juce::dsp::AudioBlock<float> block { buffer };
51+
52+
lowCutFilter.process(juce::dsp::ProcessContextReplacing<float>(block));
53+
highCutFilter.process(juce::dsp::ProcessContextReplacing<float>(block));
54+
}
55+
56+
void setLowCut(float newCutoff) { mLowCut = newCutoff; }
57+
void setHighCut(float newCutoff) { mHighCut = newCutoff; }
58+
59+
private:
60+
juce::dsp::FirstOrderTPTFilter<float> lowCutFilter;
61+
juce::dsp::FirstOrderTPTFilter<float> highCutFilter;
62+
63+
float mLowCut = 0;
64+
float mHighCut = 20000;
65+
};

Source/PluginEditor.cpp

Lines changed: 58 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
RSAlgorithmicVerbAudioProcessorEditor::RSAlgorithmicVerbAudioProcessorEditor (RSAlgorithmicVerbAudioProcessor& p, juce::AudioProcessorValueTreeState& vts)
1414
: AudioProcessorEditor (&p), audioProcessor (p), valueTreeState(vts)
1515
{
16-
// labels
16+
// labels row 1
1717
reverbMenuLabel.setText("Reverb Type", juce::dontSendNotification);
1818
reverbMenuLabel.setJustificationType(juce::Justification::centred);
1919
addAndMakeVisible(reverbMenuLabel);
@@ -30,6 +30,19 @@ RSAlgorithmicVerbAudioProcessorEditor::RSAlgorithmicVerbAudioProcessorEditor (RS
3030
dampingLabel.setJustificationType(juce::Justification::centred);
3131
addAndMakeVisible(dampingLabel);
3232

33+
diffusionLabel.setText("Diffusion", juce::dontSendNotification);
34+
diffusionLabel.setJustificationType(juce::Justification::centred);
35+
addAndMakeVisible(diffusionLabel);
36+
37+
// labels row 2
38+
lowCutLabel.setText("Low Cut", juce::dontSendNotification);
39+
lowCutLabel.setJustificationType(juce::Justification::centred);
40+
addAndMakeVisible(lowCutLabel);
41+
42+
highCutLabel.setText("High Cut", juce::dontSendNotification);
43+
highCutLabel.setJustificationType(juce::Justification::centred);
44+
addAndMakeVisible(highCutLabel);
45+
3346
preDelayLabel.setText("Pre-Delay", juce::dontSendNotification);
3447
preDelayLabel.setJustificationType(juce::Justification::centred);
3548
addAndMakeVisible(preDelayLabel);
@@ -54,7 +67,7 @@ RSAlgorithmicVerbAudioProcessorEditor::RSAlgorithmicVerbAudioProcessorEditor (RS
5467
reverbMenuBox.setSelectedId(dattorro);
5568
reverbMenuAttachment.reset(new ComboBoxAttachment(valueTreeState, "reverbType", reverbMenuBox));
5669

57-
// sliders
70+
// sliders row 1
5871
roomSizeSlider.setSliderStyle(juce::Slider::SliderStyle::RotaryHorizontalVerticalDrag);
5972
roomSizeSlider.setTextBoxStyle(juce::Slider::TextBoxBelow, false, textBoxWidth, textBoxHeight);
6073
addAndMakeVisible(roomSizeSlider);
@@ -70,6 +83,22 @@ RSAlgorithmicVerbAudioProcessorEditor::RSAlgorithmicVerbAudioProcessorEditor (RS
7083
addAndMakeVisible(dampingSlider);
7184
dampingAttachment.reset(new SliderAttachment(valueTreeState, "damping", dampingSlider));
7285

86+
diffusionSlider.setSliderStyle(juce::Slider::SliderStyle::RotaryHorizontalVerticalDrag);
87+
diffusionSlider.setTextBoxStyle(juce::Slider::TextBoxBelow, false, textBoxWidth, textBoxHeight);
88+
addAndMakeVisible(diffusionSlider);
89+
diffusionAttachment.reset(new SliderAttachment(valueTreeState, "diffusion", diffusionSlider));
90+
91+
// sliders row 2
92+
lowCutSlider.setSliderStyle(juce::Slider::SliderStyle::RotaryHorizontalVerticalDrag);
93+
lowCutSlider.setTextBoxStyle(juce::Slider::TextBoxBelow, false, textBoxWidth, textBoxHeight);
94+
addAndMakeVisible(lowCutSlider);
95+
lowCutAttachment.reset(new SliderAttachment(valueTreeState, "lowCut", lowCutSlider));
96+
97+
highCutSlider.setSliderStyle(juce::Slider::SliderStyle::RotaryHorizontalVerticalDrag);
98+
highCutSlider.setTextBoxStyle(juce::Slider::TextBoxBelow, false, textBoxWidth, textBoxHeight);
99+
addAndMakeVisible(highCutSlider);
100+
highCutAttachment.reset(new SliderAttachment(valueTreeState, "highCut", highCutSlider));
101+
73102
preDelaySlider.setSliderStyle(juce::Slider::SliderStyle::RotaryHorizontalVerticalDrag);
74103
preDelaySlider.setTextBoxStyle(juce::Slider::TextBoxBelow, false, textBoxWidth, textBoxHeight);
75104
addAndMakeVisible(preDelaySlider);
@@ -89,7 +118,7 @@ RSAlgorithmicVerbAudioProcessorEditor::RSAlgorithmicVerbAudioProcessorEditor (RS
89118
getLookAndFeel().setDefaultLookAndFeel(&grayBlueLookAndFeel);
90119

91120
// panel size
92-
setSize (700, 575);
121+
setSize (800, 525);
93122
}
94123

95124
RSAlgorithmicVerbAudioProcessorEditor::~RSAlgorithmicVerbAudioProcessorEditor()
@@ -109,14 +138,16 @@ void RSAlgorithmicVerbAudioProcessorEditor::paint (juce::Graphics& g)
109138
void RSAlgorithmicVerbAudioProcessorEditor::resized()
110139
{
111140
const int xBorder = 30;
112-
const int yBorderTop = 125;
113-
const int yBorderBottom = 70;
114-
const int rowSpacer = 35;
141+
const int yBorderTop = 135;
142+
const int yBorderBottom = 50;
143+
const int rowSpacer = 45;
115144

116145
const int menuWidth = 135;
117146
const int menuHeight = 20;
118-
const int sliderWidth = (getWidth() - (2 * xBorder)) / 3;
119-
const int sliderHeight = (getHeight() - (yBorderTop + yBorderBottom) - rowSpacer) / 2;
147+
const int sliderWidth1 = (getWidth() - (2 * xBorder)) / 4;
148+
const int sliderWidth2 = (getWidth() - (2 * xBorder)) / 5;
149+
const int sliderHeight1 = (getHeight() - (yBorderTop + yBorderBottom) - rowSpacer) / 2;
150+
const int sliderHeight2 = sliderHeight1 * 0.8;
120151
const int textLabelWidth = 150;
121152
const int textLabelHeight = 20;
122153
const int textLabelSpacer = 7;
@@ -126,22 +157,29 @@ void RSAlgorithmicVerbAudioProcessorEditor::resized()
126157
reverbMenuLabel.setJustificationType(juce::Justification::centred);
127158

128159
// row 1 sliders
129-
roomSizeSlider.setBounds(xBorder, yBorderTop, sliderWidth, sliderHeight);
130-
feedbackSlider.setBounds(xBorder + sliderWidth, yBorderTop, sliderWidth, sliderHeight);
131-
dampingSlider.setBounds(xBorder + (2 * sliderWidth), yBorderTop, sliderWidth, sliderHeight);
160+
roomSizeSlider.setBounds(xBorder, yBorderTop, sliderWidth1, sliderHeight1);
161+
feedbackSlider.setBounds(xBorder + sliderWidth1, yBorderTop, sliderWidth1, sliderHeight1);
162+
dampingSlider.setBounds(xBorder + (2 * sliderWidth1), yBorderTop, sliderWidth1, sliderHeight1);
163+
diffusionSlider.setBounds(xBorder + (3 * sliderWidth1), yBorderTop, sliderWidth1, sliderHeight1);
132164

133165
// row 1 labels
134-
roomSizeLabel.setBounds(xBorder + ((sliderWidth / 2) - (textLabelWidth / 2)), yBorderTop + sliderHeight + textLabelSpacer, textLabelWidth, textLabelHeight);
135-
decayLabel.setBounds(xBorder + sliderWidth + ((sliderWidth / 2) - (textLabelWidth / 2)), yBorderTop + sliderHeight + textLabelSpacer, textLabelWidth, textLabelHeight);
136-
dampingLabel.setBounds(xBorder + (sliderWidth * 2) + ((sliderWidth / 2) - (textLabelWidth / 2)), yBorderTop + sliderHeight + textLabelSpacer, textLabelWidth, textLabelHeight);
166+
roomSizeLabel.setBounds(xBorder + ((sliderWidth1 / 2) - (textLabelWidth / 2)), yBorderTop + sliderHeight1 + textLabelSpacer, textLabelWidth, textLabelHeight);
167+
decayLabel.setBounds(xBorder + sliderWidth1 + ((sliderWidth1 / 2) - (textLabelWidth / 2)), yBorderTop + sliderHeight1 + textLabelSpacer, textLabelWidth, textLabelHeight);
168+
dampingLabel.setBounds(xBorder + (sliderWidth1 * 2) + ((sliderWidth1 / 2) - (textLabelWidth / 2)), yBorderTop + sliderHeight1 + textLabelSpacer, textLabelWidth, textLabelHeight);
169+
diffusionLabel.setBounds(xBorder + (sliderWidth1 * 3) + ((sliderWidth1 / 2) - (textLabelWidth / 2)), yBorderTop + sliderHeight1 + textLabelSpacer, textLabelWidth, textLabelHeight);
170+
137171

138172
// row 2 sliders
139-
preDelaySlider.setBounds(xBorder, yBorderTop + sliderHeight + rowSpacer, sliderWidth, sliderHeight);
140-
earlyLateMixSlider.setBounds(xBorder + sliderWidth, yBorderTop + sliderHeight + rowSpacer, sliderWidth, sliderHeight);
141-
dryWetMixSlider.setBounds(xBorder + (2 * sliderWidth), yBorderTop + sliderHeight + rowSpacer, sliderWidth, sliderHeight);
173+
preDelaySlider.setBounds(xBorder, yBorderTop + sliderHeight1 + rowSpacer, sliderWidth2, sliderHeight2);
174+
lowCutSlider.setBounds(xBorder + (sliderWidth2 * 1), yBorderTop + sliderHeight1 + rowSpacer, sliderWidth2, sliderHeight2);
175+
highCutSlider.setBounds(xBorder + (sliderWidth2 * 2), yBorderTop + sliderHeight1 + rowSpacer, sliderWidth2, sliderHeight2);
176+
earlyLateMixSlider.setBounds(xBorder + (sliderWidth2 * 3), yBorderTop + sliderHeight1 + rowSpacer, sliderWidth2, sliderHeight2);
177+
dryWetMixSlider.setBounds(xBorder + (sliderWidth2 * 4), yBorderTop + sliderHeight1 + rowSpacer, sliderWidth2, sliderHeight2);
142178

143179
// row 2 labels
144-
preDelayLabel.setBounds(xBorder + (sliderWidth / 2) - (textLabelWidth / 2), yBorderTop + (sliderHeight * 2) + rowSpacer + textLabelSpacer, textLabelWidth, textLabelHeight);
145-
earlyLateMixLabel.setBounds(xBorder + sliderWidth + (sliderWidth / 2) - (textLabelWidth / 2), yBorderTop + (sliderHeight * 2) + rowSpacer + textLabelSpacer, textLabelWidth, textLabelHeight);
146-
dryWetMixLabel.setBounds(xBorder + (sliderWidth * 2) + (sliderWidth / 2) - (textLabelWidth / 2), yBorderTop + (sliderHeight * 2) + rowSpacer + textLabelSpacer, textLabelWidth, textLabelHeight);
180+
preDelayLabel.setBounds(xBorder + (sliderWidth2 / 2) - (textLabelWidth / 2), yBorderTop + sliderHeight1 + sliderHeight2 + rowSpacer + textLabelSpacer, textLabelWidth, textLabelHeight);
181+
lowCutLabel.setBounds(xBorder + (sliderWidth2 * 1) + (sliderWidth2 / 2) - (textLabelWidth / 2), yBorderTop + sliderHeight1 + sliderHeight2 + rowSpacer + textLabelSpacer, textLabelWidth, textLabelHeight);
182+
highCutLabel.setBounds(xBorder + (sliderWidth2 * 2) + (sliderWidth2 / 2) - (textLabelWidth / 2), yBorderTop + sliderHeight1 + sliderHeight2 + rowSpacer + textLabelSpacer, textLabelWidth, textLabelHeight);
183+
earlyLateMixLabel.setBounds(xBorder + (sliderWidth2 * 3) + (sliderWidth2 / 2) - (textLabelWidth / 2), yBorderTop + sliderHeight1 + sliderHeight2 + rowSpacer + textLabelSpacer, textLabelWidth, textLabelHeight);
184+
dryWetMixLabel.setBounds(xBorder + (sliderWidth2 * 4) + (sliderWidth2 / 2) - (textLabelWidth / 2), yBorderTop + sliderHeight1 + sliderHeight2 + rowSpacer + textLabelSpacer, textLabelWidth, textLabelHeight);
147185
}

Source/PluginEditor.h

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,15 @@ class RSAlgorithmicVerbAudioProcessorEditor : public juce::AudioProcessorEditor
5959
juce::AudioProcessorValueTreeState& valueTreeState;
6060

6161
juce::Label reverbMenuLabel;
62+
// row 1
6263
juce::Label roomSizeLabel;
6364
juce::Label decayLabel;
6465
juce::Label dampingLabel;
66+
juce::Label diffusionLabel;
67+
// row 2
6568
juce::Label preDelayLabel;
69+
juce::Label lowCutLabel;
70+
juce::Label highCutLabel;
6671
juce::Label earlyLateMixLabel;
6772
juce::Label dryWetMixLabel;
6873

@@ -72,19 +77,28 @@ class RSAlgorithmicVerbAudioProcessorEditor : public juce::AudioProcessorEditor
7277
dattorro = 1,
7378
freeverb,
7479
};
75-
80+
// row 1
7681
juce::Slider roomSizeSlider;
7782
juce::Slider feedbackSlider;
7883
juce::Slider dampingSlider;
84+
juce::Slider diffusionSlider;
85+
// row 2
7986
juce::Slider preDelaySlider;
87+
juce::Slider lowCutSlider;
88+
juce::Slider highCutSlider;
8089
juce::Slider earlyLateMixSlider;
8190
juce::Slider dryWetMixSlider;
8291

8392
std::unique_ptr<ComboBoxAttachment> reverbMenuAttachment;
93+
// row 1
8494
std::unique_ptr<SliderAttachment> roomSizeAttachment;
8595
std::unique_ptr<SliderAttachment> feedbackAttachment;
8696
std::unique_ptr<SliderAttachment> dampingAttachment;
97+
std::unique_ptr<SliderAttachment> diffusionAttachment;
98+
// row 2
8799
std::unique_ptr<SliderAttachment> preDelayAttachment;
100+
std::unique_ptr<SliderAttachment> lowCutAttachment;
101+
std::unique_ptr<SliderAttachment> highCutAttachment;
88102
std::unique_ptr<SliderAttachment> earlyLateMixAttachment;
89103
std::unique_ptr<SliderAttachment> dryWetMixAttachment;
90104

0 commit comments

Comments
 (0)