I see in the SineSynth demo, the method used to update a variable “targetFrequency” from the frequency slider is very simple:
MainContentComponent()
{
addAndMakeVisible (frequencySlider);
frequencySlider.setRange (50.0, 5000.0);
frequencySlider.setSkewFactorFromMidPoint (500.0);
frequencySlider.setValue (currentFrequency, dontSendNotification); // [6]
frequencySlider.onValueChange = [this] { targetFrequency = frequencySlider.getValue(); };
My application is a bit more complicated because my sliders are being created automatically from a LabeledSlider (GroupComponent) class. So the syntax has to be different. I can get everything to work except the variable updating.
Here’s what I have as a similar example:
void MainComponent::createOscGroup()
{
Array<Component*> oscGroupSliders;
LabeledSlider* oscFrequencySlider = new LabeledSlider("Frequency");
oscGroupSliders.add(oscFrequencySlider);
oscFrequencySlider->setValue(oscFrequencyValue);
oscFrequencySlider->setDoubleClickReturnValue(true, oscFrequencyDefaultValue);
oscFrequencySlider->setRange(20.0, 20000.0, 1);
oscFrequencySlider->setNumDecimalPlacesToDisplay(0);
oscFrequencySlider->setSkewFactorFromMidPoint(500);
oscFrequencySlider->onValueChange = [this, oscFrequencySlider] { oscFrequencyValue = oscFrequencySlider->getValue(); };
Functions are defined this way in my LabeledSlider class cpp:
LabeledSlider::LabeledSlider(const String& name)
{
setLookAndFeel(&labeledComponentLookAndFeel); //Sets lookand feel for labeledslider (ie. labeledcomponent)
Slider* slider = new Slider();
slider->setTextBoxStyle(Slider::TextEntryBoxPosition::TextBoxBelow, false, textBoxWidth, textBoxHeight);
slider->setSliderStyle(Slider::SliderStyle::RotaryHorizontalVerticalDrag);
slider->setNumDecimalPlacesToDisplay(1);
slider->setLookAndFeel(&sliderLookAndFeel); //Sets LookAndFeel for sliders
mSlider = std::unique_ptr<Slider>(slider);
addAndMakeVisible(slider);
setText(name);
setTextLabelPosition(Justification::centredTop);
setSize(componentWidth,componentHeight);
}
void LabeledSlider::resized()
{
Slider* slider = mSlider.get();
slider->setBounds(getLocalBounds().reduced(componentMargin));
}
void LabeledSlider::setRange(double min, double max, double newInterval = 0)
{
Slider* slider = mSlider.get();
slider->setRange(min, max, newInterval);
}
void LabeledSlider::setNumDecimalPlacesToDisplay(int decimals)
{
Slider* slider = mSlider.get();
slider->setNumDecimalPlacesToDisplay(decimals);
}
void LabeledSlider::setSkewFactorFromMidPoint(double skewMidPoint)
{
Slider* slider = mSlider.get();
slider->setSkewFactorFromMidPoint(skewMidPoint);
}
void LabeledSlider::setValue(double newValue)
{
Slider* slider = mSlider.get();
slider->setValue(newValue);
}
double LabeledSlider::getValue() const
{
Slider* slider = mSlider.get();
slider->getValue();
return getValue();
}
void LabeledSlider::onValueChange()
{
Slider* slider = mSlider.get();
slider->onValueChange();
}
void LabeledSlider::setDoubleClickReturnValue(bool doubleClickEnable, double doubleClickValue)
{
Slider* slider = mSlider.get();
slider->setDoubleClickReturnValue(doubleClickEnable, doubleClickValue);
}
Everything I can test of those functions is working fine except I can’t get the onValueChange to work and I don’t know if the getValue is correct.
Any correction on how I should have written these to make them work? Thanks.
I’m just looking to get some basic connection between GUI and audio going. I’ve got a sine wave and I want to control it’s frequency with a knob like the tutorial to start. Nothing too fancy.