Skip to content

Commit b84d042

Browse files
authored
Merge pull request #8 from odoare/Initializationwork
Initializationwork
2 parents c63a42d + ba57375 commit b84d042

23 files changed

Lines changed: 372 additions & 264 deletions

BiRR2D_monoin/Source/PluginEditor.cpp

Lines changed: 35 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -15,40 +15,47 @@ ReverbAudioProcessorEditor::ReverbAudioProcessorEditor (ReverbAudioProcessor& p)
1515
{
1616
logo = juce::ImageCache::getFromMemory(BinaryData::logo686_png, BinaryData::logo686_pngSize);
1717

18-
auto updateFunc = [this](){
19-
if (audioProcessor.apvts.getRawParameterValue("Auto update")->load()==true){
20-
audioProcessor.setIrLoader();
21-
};
18+
auto startDrag = [this](){
19+
audioProcessor.autoUpdate = false;
20+
};
21+
22+
auto stopDrag = [this](){
23+
audioProcessor.autoUpdate = autoButton.getToggleStateValue().getValue();
2224
};
2325

2426
// Room size controllers
2527
addController(roomXSlider, juce::Slider::SliderStyle::RotaryHorizontalVerticalDrag, juce::Colours::teal,juce::Colours::black);
2628
addAndConnectLabel(roomXSlider, roomXLabel);
2729
roomXSliderAttachment = std::make_unique<juce::AudioProcessorValueTreeState::SliderAttachment>(audioProcessor.apvts,"RoomX",roomXSlider);
28-
roomXSlider.onDragEnd = updateFunc;
2930
roomXSlider.setLookAndFeel(&knobLookAndFeel);
31+
roomXSlider.onDragStart = startDrag;
32+
roomXSlider.onDragEnd = stopDrag;
3033

3134
addController(roomYSlider, juce::Slider::SliderStyle::RotaryHorizontalVerticalDrag, juce::Colours::teal,juce::Colours::black);
3235
addAndConnectLabel(roomYSlider, roomYLabel);
3336
roomYSliderAttachment = std::make_unique<juce::AudioProcessorValueTreeState::SliderAttachment>(audioProcessor.apvts,"RoomY",roomYSlider);
34-
roomYSlider.onDragEnd = updateFunc;
3537
roomYSlider.setLookAndFeel(&knobLookAndFeel);
38+
roomYSlider.onDragStart = startDrag;
39+
roomYSlider.onDragEnd = stopDrag;
3640

3741
// Listener position controllers
3842
addController(listenerXSlider, juce::Slider::SliderStyle::LinearHorizontal, listenerColour, juce::Colours::black);
3943
listenerXSlider.setTextBoxStyle(juce::Slider::TextEntryBoxPosition::NoTextBox, true, 0, 0);
4044
listenerXSliderAttachment = std::make_unique<juce::AudioProcessorValueTreeState::SliderAttachment>(audioProcessor.apvts,"ListenerX",listenerXSlider);
41-
listenerXSlider.onDragEnd = updateFunc;
45+
listenerXSlider.onDragStart = startDrag;
46+
listenerXSlider.onDragEnd = stopDrag;
4247

4348
addController(listenerYSlider, juce::Slider::SliderStyle::LinearVertical, listenerColour, juce::Colours::black);
4449
listenerYSlider.setTextBoxStyle(juce::Slider::TextEntryBoxPosition::NoTextBox, true, 0, 0);
4550
listenerYSliderAttachment = std::make_unique<juce::AudioProcessorValueTreeState::SliderAttachment>(audioProcessor.apvts,"ListenerY",listenerYSlider);
46-
listenerYSlider.onDragEnd = updateFunc;
51+
listenerYSlider.onDragStart = startDrag;
52+
listenerYSlider.onDragEnd = stopDrag;
4753

4854
addController(listenerOSlider, juce::Slider::SliderStyle::RotaryHorizontalVerticalDrag, listenerColour, juce::Colours::black);
4955
listenerOSlider.setTextBoxStyle(juce::Slider::TextEntryBoxPosition::NoTextBox, true, 0, 0);
5056
listenerOSliderAttachment = std::make_unique<juce::AudioProcessorValueTreeState::SliderAttachment>(audioProcessor.apvts,"ListenerO",listenerOSlider);
51-
listenerOSlider.onDragEnd = updateFunc;
57+
listenerOSlider.onDragStart = startDrag;
58+
listenerOSlider.onDragEnd = stopDrag;
5259
addAndConnectLabel(listenerOSlider, listenerOLabel);
5360
juce::Slider::RotaryParameters par;
5461
par.startAngleRadians = -juce::MathConstants<float>::pi;
@@ -61,42 +68,45 @@ ReverbAudioProcessorEditor::ReverbAudioProcessorEditor (ReverbAudioProcessor& p)
6168
addController(sourceXSlider, juce::Slider::SliderStyle::LinearHorizontal, sourceColour, juce::Colours::black);
6269
sourceXSlider.setTextBoxStyle(juce::Slider::TextEntryBoxPosition::NoTextBox, true, 0, 0);
6370
sourceXSliderAttachment = std::make_unique<juce::AudioProcessorValueTreeState::SliderAttachment>(audioProcessor.apvts,"SourceX",sourceXSlider);
64-
sourceXSlider.onDragEnd = updateFunc;
71+
sourceXSlider.onDragStart = startDrag;
72+
sourceXSlider.onDragEnd = stopDrag;
6573

6674
addController(sourceYSlider, juce::Slider::SliderStyle::LinearVertical, sourceColour, juce::Colours::black);
6775
sourceYSlider.setTextBoxStyle(juce::Slider::TextEntryBoxPosition::NoTextBox, true, 0, 0);
6876
sourceYSliderAttachment = std::make_unique<juce::AudioProcessorValueTreeState::SliderAttachment>(audioProcessor.apvts,"SourceY",sourceYSlider);
69-
sourceYSlider.onDragEnd = updateFunc;
77+
sourceXSlider.onDragStart = startDrag;
78+
sourceXSlider.onDragEnd = stopDrag;
7079

7180
// Damping sliders
7281
addController(dampingSlider, juce::Slider::SliderStyle::RotaryVerticalDrag, juce::Colours::green,juce::Colours::black);
7382
addAndConnectLabel(dampingSlider, dampingLabel);
7483
dampingSliderAttachment = std::make_unique<juce::AudioProcessorValueTreeState::SliderAttachment>(audioProcessor.apvts,"D",dampingSlider);
75-
dampingSlider.onDragEnd = updateFunc;
7684
dampingSlider.setLookAndFeel(&knobLookAndFeel);
85+
dampingSlider.onDragStart = startDrag;
86+
dampingSlider.onDragEnd = stopDrag;
7787

7888
addController(hfDampingSlider, juce::Slider::SliderStyle::RotaryVerticalDrag, juce::Colours::green,juce::Colours::black);
7989
addAndConnectLabel(hfDampingSlider, hfDampingLabel);
8090
hfDampingSliderAttachment = std::make_unique<juce::AudioProcessorValueTreeState::SliderAttachment>(audioProcessor.apvts,"HFD",hfDampingSlider);
81-
hfDampingSlider.onDragEnd = updateFunc;
8291
hfDampingSlider.setLookAndFeel(&knobLookAndFeel);
92+
hfDampingSlider.onDragStart = startDrag;
93+
hfDampingSlider.onDragEnd = stopDrag;
8394

8495
addController(widthSlider, juce::Slider::SliderStyle::RotaryVerticalDrag, juce::Colours::green,juce::Colours::black);
8596
addAndConnectLabel(widthSlider, widthLabel);
8697
widthSliderAttachment = std::make_unique<juce::AudioProcessorValueTreeState::SliderAttachment>(audioProcessor.apvts,"Stereo Width",widthSlider);
87-
widthSlider.onDragEnd = updateFunc;
8898
widthSlider.setLookAndFeel(&knobLookAndFeel);
99+
widthSlider.onDragEnd = stopDrag;
100+
widthSlider.onDragStart = startDrag;
89101

90102
addController(directLevelSlider, juce::Slider::SliderStyle::RotaryVerticalDrag, juce::Colours::darkorange,juce::Colours::black);
91103
addAndConnectLabel(directLevelSlider, directLevelLabel);
92104
directLevelSliderAttachment = std::make_unique<juce::AudioProcessorValueTreeState::SliderAttachment>(audioProcessor.apvts,"Direct Level",directLevelSlider);
93-
//directLevelSlider.onDragEnd = updateFunc;
94105
directLevelSlider.setLookAndFeel(&knobLookAndFeel);
95106

96107
addController(reflectionsLevelSlider, juce::Slider::SliderStyle::RotaryVerticalDrag, juce::Colours::darkorange,juce::Colours::black);
97108
addAndConnectLabel(reflectionsLevelSlider, reflectionsLevelLabel);
98109
reflectionsLevelSliderAttachment = std::make_unique<juce::AudioProcessorValueTreeState::SliderAttachment>(audioProcessor.apvts,"Reflections Level",reflectionsLevelSlider);
99-
//reflectionsLevelSlider.onDragEnd = updateFunc;
100110
reflectionsLevelSlider.setLookAndFeel(&knobLookAndFeel);
101111

102112
// Reverb type combo box
@@ -107,7 +117,6 @@ ReverbAudioProcessorEditor::ReverbAudioProcessorEditor (ReverbAudioProcessor& p)
107117
typeLabel.attachToComponent(&typeComboBox,false);
108118
addAndMakeVisible(typeComboBox);
109119
addAndMakeVisible(typeLabel);
110-
typeComboBox.onChange = updateFunc;
111120

112121
// XY Pad
113122
addAndMakeVisible(xyPad2);
@@ -118,18 +127,18 @@ ReverbAudioProcessorEditor::ReverbAudioProcessorEditor (ReverbAudioProcessor& p)
118127
xyPad2.registerSlider(&listenerOSlider, Gui::XyPad2h::Axis::O1);
119128
xyPad2.thumb1.setColour(listenerColour);
120129
xyPad2.thumb2.setColour(sourceColour);
121-
xyPad2.thumb1.mouseUpCallback = updateFunc;
122-
xyPad2.thumb2.mouseUpCallback = updateFunc;
130+
xyPad2.thumb1.mouseUpCallback = stopDrag;
131+
xyPad2.thumb2.mouseUpCallback = stopDrag;
132+
xyPad2.thumb1.mouseDownCallback = startDrag;
133+
xyPad2.thumb2.mouseDownCallback = startDrag;
123134

124-
addAndMakeVisible(calculateButton);
125-
calculateButton.setButtonText("Update");
126-
// We don't use updateFunc here because it has to update even if autoUpdate is false
127-
calculateButton.onClick = [this](){
128-
audioProcessor.setIrLoader();
129-
};
135+
addAndMakeVisible(autoButton);
136+
autoButtonAttachment = std::make_unique<juce::AudioProcessorValueTreeState::ButtonAttachment>(audioProcessor.apvts,"Update",autoButton);
137+
addAndMakeVisible(autoLabel);
138+
autoLabel.attachToComponent(&autoButton,false);
130139

131140
addAndMakeVisible(autoButton);
132-
autoButtonAttachment = std::make_unique<juce::AudioProcessorValueTreeState::ButtonAttachment>(audioProcessor.apvts,"Auto update",autoButton);
141+
autoButtonAttachment = std::make_unique<juce::AudioProcessorValueTreeState::ButtonAttachment>(audioProcessor.apvts,"Update",autoButton);
133142
addAndMakeVisible(autoLabel);
134143
autoLabel.attachToComponent(&autoButton,false);
135144

BiRR2D_monoin/Source/PluginEditor.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ class ReverbAudioProcessorEditor : public juce::AudioProcessorEditor
8686
juce::TextButton calculateButton;
8787
juce::ToggleButton autoButton;
8888
std::unique_ptr<juce::AudioProcessorValueTreeState::ButtonAttachment> autoButtonAttachment;
89-
juce::Label autoLabel{"autoLabel", "Auto update"};
89+
juce::Label autoLabel{"autoLabel", "Update"};
9090

9191
const juce::Colour listenerColour = juce::Colours::darkviolet;
9292
const juce::Colour sourceColour = juce::Colours::blue;

BiRR2D_monoin/Source/PluginProcessor.cpp

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,12 @@ ReverbAudioProcessor::ReverbAudioProcessor()
3030
)
3131
#endif
3232
{
33+
startTimerHz(5);
3334
}
3435

3536
ReverbAudioProcessor::~ReverbAudioProcessor()
3637
{
38+
// roomIR.initialize();
3739
}
3840

3941
//==============================================================================
@@ -101,21 +103,14 @@ void ReverbAudioProcessor::changeProgramName (int index, const juce::String& new
101103
//==============================================================================
102104
void ReverbAudioProcessor::prepareToPlay (double sampleRate, int samplesPerBlock)
103105
{
106+
104107
spec.maximumBlockSize = samplesPerBlock;
105108
spec.sampleRate = sampleRate;
106109
spec.numChannels = getTotalNumOutputChannels();
107110

111+
roomIR.initialize();
108112
roomIR.prepare(spec);
109113

110-
// We start loading of IRs
111-
// This is necessary when the plugin is newly loaded
112-
setIrLoader();
113-
114-
// In case of project loading, if the host loads the parameters
115-
// too fast, the system can crash. A temporary dirty workaround
116-
// is to wait a little bit before going the next steps.
117-
// TODO : find a better solution
118-
juce::Time::waitForMillisecondCounter(2000);
119114
}
120115

121116
void ReverbAudioProcessor::releaseResources()
@@ -168,14 +163,13 @@ void ReverbAudioProcessor::getStateInformation (juce::MemoryBlock& destData)
168163

169164
void ReverbAudioProcessor::setStateInformation (const void* data, int sizeInBytes)
170165
{
166+
171167
auto tree = juce::ValueTree::readFromData(data,sizeInBytes);
172168
if (tree.isValid())
173169
{
174170
apvts.replaceState(tree);
175171
}
176172

177-
// Call the impulse response calculator and loader
178-
setIrLoader();
179173
}
180174

181175
//==============================================================================
@@ -204,7 +198,7 @@ juce::AudioProcessorValueTreeState::ParameterLayout ReverbAudioProcessor::create
204198
juce::StringArray choices;
205199
choices.addArray(CHOICES);
206200
layout.add(std::make_unique<juce::AudioParameterChoice>("Reverb type", "Reverb type", choices, 1));
207-
layout.add(std::make_unique<juce::AudioParameterBool>("Auto update","Auto update", true));
201+
layout.add(std::make_unique<juce::AudioParameterBool>("Update","Update", true));
208202

209203
return layout;
210204
}
@@ -233,3 +227,11 @@ void ReverbAudioProcessor::setIrLoader()
233227

234228
roomIR.calculate(p);
235229
}
230+
231+
void ReverbAudioProcessor::timerCallback()
232+
{
233+
if (autoUpdate)
234+
{
235+
setIrLoader();
236+
}
237+
}

BiRR2D_monoin/Source/PluginProcessor.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
//==============================================================================
1616
/**
1717
*/
18-
class ReverbAudioProcessor : public juce::AudioProcessor
18+
class ReverbAudioProcessor : public juce::AudioProcessor, public juce::Timer
1919
{
2020
public:
2121
//==============================================================================
@@ -56,6 +56,7 @@ class ReverbAudioProcessor : public juce::AudioProcessor
5656
void setStateInformation (const void* data, int sizeInBytes) override;
5757

5858
void setIrLoader();
59+
bool autoUpdate{true};
5960

6061
BoxRoomIR roomIR;
6162

@@ -66,6 +67,8 @@ class ReverbAudioProcessor : public juce::AudioProcessor
6667

6768
private:
6869

70+
void timerCallback() override;
71+
6972
//==============================================================================
7073
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ReverbAudioProcessor)
7174
};

0 commit comments

Comments
 (0)