38 changes: 19 additions & 19 deletions plugins/ConvolutionReverb/OneKnobPlugin.cpp
Expand Up @@ -119,17 +119,17 @@ class OneKnobConvolutionReverbPlugin : public OneKnobPlugin
korgFilterL.setSampleRate(sampleRate);
korgFilterR.setSampleRate(sampleRate);

korgFilterL.setFrequency(kParameterDefaults[kParameterHighPassFilter]);
korgFilterR.setFrequency(kParameterDefaults[kParameterHighPassFilter]);
korgFilterL.setFrequency(kParameterRanges[kParameterHighPassFilter].def);
korgFilterR.setFrequency(kParameterRanges[kParameterHighPassFilter].def);

smoothDryLevel.setSampleRate(sampleRate);
smoothWetLevel.setSampleRate(sampleRate);

smoothDryLevel.setTimeConstant(0.1f);
smoothWetLevel.setTimeConstant(0.1f);

smoothDryLevel.setTarget(std::pow(10.f, 0.05f * kParameterDefaults[kParameterDryLevel]));
smoothWetLevel.setTarget(std::pow(10.f, 0.05f * kParameterDefaults[kParameterWetLevel]));
smoothDryLevel.setTarget(std::pow(10.f, 0.05f * kParameterRanges[kParameterDryLevel].def));
smoothWetLevel.setTarget(std::pow(10.f, 0.05f * kParameterRanges[kParameterWetLevel].def));
}

~OneKnobConvolutionReverbPlugin() override
Expand Down Expand Up @@ -159,7 +159,7 @@ class OneKnobConvolutionReverbPlugin : public OneKnobPlugin
// -------------------------------------------------------------------
// Init

void initParameter(uint32_t index, Parameter &parameter) override
void initParameter(uint32_t index, Parameter& parameter) override
{
switch (index)
{
Expand All @@ -168,12 +168,12 @@ class OneKnobConvolutionReverbPlugin : public OneKnobPlugin
parameter.name = "Dry Level";
parameter.symbol = "drylevel";
parameter.unit = "dB";
parameter.ranges.def = kParameterDefaults[kParameterDryLevel];
parameter.ranges.min = -60.f;
parameter.ranges.max = 0.f;
parameter.ranges.def = kParameterRanges[kParameterDryLevel].def;
parameter.ranges.min = kParameterRanges[kParameterDryLevel].min;
parameter.ranges.max = kParameterRanges[kParameterDryLevel].max;
{
ParameterEnumerationValue* const enumValues = new ParameterEnumerationValue[1];
enumValues[0].value = -60.f;
enumValues[0].value = kParameterRanges[kParameterDryLevel].min;
enumValues[0].label = "Off";
parameter.enumValues.count = 1;
parameter.enumValues.values = enumValues;
Expand All @@ -184,12 +184,12 @@ class OneKnobConvolutionReverbPlugin : public OneKnobPlugin
parameter.name = "Wet Level";
parameter.symbol = "wetlevel";
parameter.unit = "dB";
parameter.ranges.def = kParameterDefaults[kParameterWetLevel];
parameter.ranges.min = -60.f;
parameter.ranges.max = 0.f;
parameter.ranges.def = kParameterRanges[kParameterWetLevel].def;
parameter.ranges.min = kParameterRanges[kParameterWetLevel].min;
parameter.ranges.max = kParameterRanges[kParameterWetLevel].max;
{
ParameterEnumerationValue* const enumValues = new ParameterEnumerationValue[1];
enumValues[0].value = -60.f;
enumValues[0].value = kParameterRanges[kParameterWetLevel].min;
enumValues[0].label = "Off";
parameter.enumValues.count = 1;
parameter.enumValues.values = enumValues;
Expand All @@ -200,9 +200,9 @@ class OneKnobConvolutionReverbPlugin : public OneKnobPlugin
parameter.name = "High Pass Filter";
parameter.symbol = "hpf";
parameter.unit = "Hz";
parameter.ranges.def = kParameterDefaults[kParameterHighPassFilter];
parameter.ranges.min = 0.f;
parameter.ranges.max = 500.f;
parameter.ranges.def = kParameterRanges[kParameterHighPassFilter].def;
parameter.ranges.min = kParameterRanges[kParameterHighPassFilter].min;
parameter.ranges.max = kParameterRanges[kParameterHighPassFilter].max;
{
ParameterEnumerationValue* const enumValues = new ParameterEnumerationValue[1];
enumValues[0].value = 0.f;
Expand All @@ -215,9 +215,9 @@ class OneKnobConvolutionReverbPlugin : public OneKnobPlugin
parameter.hints = kParameterIsAutomatable | kParameterIsInteger | kParameterIsBoolean;
parameter.name = "Trails";
parameter.symbol = "trails";
parameter.ranges.def = kParameterDefaults[kParameterTrails];
parameter.ranges.min = 0.f;
parameter.ranges.max = 1.f;
parameter.ranges.def = kParameterRanges[kParameterTrails].def;
parameter.ranges.min = kParameterRanges[kParameterTrails].min;
parameter.ranges.max = kParameterRanges[kParameterTrails].max;
break;
case kParameterBypass:
parameter.initDesignation(kParameterDesignationBypass);
Expand Down
28 changes: 7 additions & 21 deletions plugins/ConvolutionReverb/OneKnobUI.cpp
Expand Up @@ -30,32 +30,18 @@ static const OneKnobMainControl main = {
kParameterWetLevel,
"Wet Level",
"dB",
-60.0f,
0.0f,
kParameterDefaults[kParameterWetLevel]
};

static const OneKnobAuxiliaryButtonGroupValue highPassFilterValues[] = {
{ 0, "Off" },
{ 75, "75" },
{ 150, "150" },
{ 300, "300" }
};

static const OneKnobAuxiliaryButtonGroup buttonGroupOpts = {
static constexpr const OneKnobAuxiliaryCheckBox kHighPassCheckBox = {
kParameterHighPassFilter,
"High Pass Filter",
ARRAY_SIZE(highPassFilterValues),
highPassFilterValues
"Activate to prevent low-band/bassy sounds from being sent to the reverb"
};

static const OneKnobAuxiliarySlider numFieldOpts = {
kParameterDryLevel,
"Dry Level",
"dB",
-60,
0,
kParameterDefaults[kParameterDryLevel]
};

static const OneKnobAuxiliaryFileButton fileButtonOpts = {
Expand Down Expand Up @@ -84,7 +70,7 @@ class OneKnobConvolutionReverbUI : public OneKnobUI
kDefaultHeight/4,
kDefaultWidth/2 - kSidePanelWidth,
kDefaultHeight*3/4);
createAuxiliaryFileButton(auxArea, buttonGroupOpts, numFieldOpts, fileButtonOpts);
createAuxiliaryFileButton(auxArea, kHighPassCheckBox, numFieldOpts, fileButtonOpts);

repositionWidgets();

Expand All @@ -107,7 +93,7 @@ class OneKnobConvolutionReverbUI : public OneKnobUI
setAuxiliaryNumFieldValue(value);
break;
case kParameterHighPassFilter:
setAuxiliaryButtonGroupValue(value);
setAuxiliaryCheckBoxValue(value);
break;
}

Expand All @@ -119,9 +105,9 @@ class OneKnobConvolutionReverbUI : public OneKnobUI
switch (index)
{
case kProgramDefault:
setMainControlValue(kParameterDefaults[kParameterWetLevel]);
setAuxiliaryNumFieldValue(kParameterDefaults[kParameterDryLevel]);
setAuxiliaryButtonGroupValue(kParameterDefaults[kParameterHighPassFilter]);
setMainControlValue(kParameterRanges[kParameterWetLevel].def);
setAuxiliaryNumFieldValue(kParameterRanges[kParameterDryLevel].def);
setAuxiliaryCheckBoxValue(kParameterRanges[kParameterHighPassFilter].def > 0.5f);
break;
}

Expand Down
10 changes: 7 additions & 3 deletions plugins/DevilDistortion/DistrhoPluginInfo.h
Expand Up @@ -32,6 +32,7 @@
enum Parameters {
kParameterKneePoint = 0,
kParameterDecayTime,
kParameterBypass,
kParameterCount
};

Expand All @@ -44,7 +45,10 @@ enum States {
kStateCount
};

static const float kParameterDefaults[kParameterCount] = {
0.0f,
23.0f
static constexpr const struct OneKnobParameterRanges {
float min, def, max;
} kParameterRanges[kParameterCount] = {
{ -90.f, 0.f, 0.f },
{ 2.f, 23.f, 30.f },
{}
};
15 changes: 9 additions & 6 deletions plugins/DevilDistortion/OneKnobPlugin.cpp
Expand Up @@ -90,19 +90,19 @@ class OneKnobDevilDistortionPlugin : public OneKnobPlugin
parameter.description = ""
"Controls the knee roll-off point, ie. the point above which the compression kicks in.\n"
"0 will have no effect, -90 will remove virtually all dynamic range.";
parameter.ranges.def = kParameterDefaults[kParameterKneePoint];
parameter.ranges.min = -90.0f;
parameter.ranges.max = 0.0f;
parameter.ranges.def = kParameterRanges[kParameterKneePoint].def;
parameter.ranges.min = kParameterRanges[kParameterKneePoint].min;
parameter.ranges.max = kParameterRanges[kParameterKneePoint].max;
break;
case kParameterDecayTime:
parameter.hints = kParameterIsAutomatable | kParameterIsInteger;
parameter.name = "Decay Time";
parameter.symbol = "decay_time";
parameter.unit = "samples";
parameter.description = "Controls the envelope decay time in samples";
parameter.ranges.def = kParameterDefaults[kParameterDecayTime];
parameter.ranges.min = 2.0f;
parameter.ranges.max = 30.0f;
parameter.ranges.def = kParameterRanges[kParameterDecayTime].def;
parameter.ranges.min = kParameterRanges[kParameterDecayTime].min;
parameter.ranges.max = kParameterRanges[kParameterDecayTime].max;
if (ParameterEnumerationValue* const values = new ParameterEnumerationValue[6])
{
parameter.enumValues.count = 5;
Expand All @@ -120,6 +120,9 @@ class OneKnobDevilDistortionPlugin : public OneKnobPlugin
values[4].value = 30.0f;
}
break;
case kParameterBypass:
parameter.initDesignation(kParameterDesignationBypass);
break;
}
}

Expand Down
7 changes: 2 additions & 5 deletions plugins/DevilDistortion/OneKnobUI.cpp
Expand Up @@ -33,9 +33,6 @@ static const OneKnobMainControl main = {
kParameterKneePoint,
"Knee Point",
"dB",
-90.0f,
0.0f,
0.0f
};

static const OneKnobAuxiliaryButtonGroupValue buttonGroupValues[] = {
Expand Down Expand Up @@ -105,8 +102,8 @@ class OneKnobDevilDistortionUI : public OneKnobUI
switch (index)
{
case kProgramDefault:
setMainControlValue(kParameterDefaults[kParameterKneePoint]);
setAuxiliaryButtonGroupValue(kParameterDefaults[kParameterDecayTime]);
setMainControlValue(kParameterRanges[kParameterKneePoint].def);
setAuxiliaryButtonGroupValue(kParameterRanges[kParameterDecayTime].def);
break;
}

Expand Down
16 changes: 10 additions & 6 deletions plugins/Sampler/DistrhoPluginInfo.h
Expand Up @@ -40,6 +40,7 @@ enum Parameters {
kParameterSustain,
kParameterReleaseTime,
kParameterBalance,
kParameterBypass,
kParameterCount
};

Expand All @@ -53,10 +54,13 @@ enum States {
kStateCount
};

static const float kParameterDefaults[kParameterCount] = {
1.0f,
60.0f,
0.0f,
0.001f,
0.0f
static constexpr const struct OneKnobParameterRanges {
float min, def, max;
} kParameterRanges[kParameterCount] = {
{ 0.f, 1.f, 1.f },
{ 0.f, 60.f, 127.f },
{ 0.f, 0.f, 1.f },
{ 0.001f, 0.001f, 2.f },
{ -100.f, 0.f, 100.f },
{}
};
33 changes: 18 additions & 15 deletions plugins/Sampler/OneKnobPlugin.cpp
Expand Up @@ -70,49 +70,52 @@ class OneKnobSamplerPlugin : public OneKnobPlugin
parameter.symbol = "retune";
parameter.unit = "";
parameter.midiCC = 12;
parameter.ranges.def = kParameterDefaults[index];
parameter.ranges.min = 0.0f;
parameter.ranges.max = 1.0f;
parameter.ranges.def = kParameterRanges[kParameterKneePoint].def;
parameter.ranges.min = kParameterRanges[kParameterKneePoint].min;
parameter.ranges.max = kParameterRanges[kParameterKneePoint].max;
break;
case kParameterBasePitch:
parameter.hints = kParameterIsAutomatable;
parameter.name = "Base Pitch";
parameter.symbol = "basepitch";
parameter.unit = "midiNote";
parameter.midiCC = 13;
parameter.ranges.def = kParameterDefaults[index];
parameter.ranges.min = 0.0f;
parameter.ranges.max = 127.0f;
parameter.ranges.def = kParameterRanges[kParameterKneePoint].def;
parameter.ranges.min = kParameterRanges[kParameterKneePoint].min;
parameter.ranges.max = kParameterRanges[kParameterKneePoint].max;
break;
case kParameterSustain:
parameter.hints = kParameterIsAutomatable | kParameterIsInteger | kParameterIsBoolean;
parameter.name = "Sustain";
parameter.symbol = "sustain";
parameter.unit = "";
parameter.midiCC = 64;
parameter.ranges.def = kParameterDefaults[index];
parameter.ranges.min = 0.0f;
parameter.ranges.max = 1.0f;
parameter.ranges.def = kParameterRanges[kParameterKneePoint].def;
parameter.ranges.min = kParameterRanges[kParameterKneePoint].min;
parameter.ranges.max = kParameterRanges[kParameterKneePoint].max;
break;
case kParameterReleaseTime:
parameter.hints = kParameterIsAutomatable | kParameterIsLogarithmic;
parameter.name = "Release Time";
parameter.symbol = "release";
parameter.unit = "s";
parameter.midiCC = 72;
parameter.ranges.def = kParameterDefaults[index];
parameter.ranges.min = 0.001f;
parameter.ranges.max = 2.0f;
parameter.ranges.def = kParameterRanges[kParameterKneePoint].def;
parameter.ranges.min = kParameterRanges[kParameterKneePoint].min;
parameter.ranges.max = kParameterRanges[kParameterKneePoint].max;
break;
case kParameterBalance:
parameter.hints = kParameterIsAutomatable;
parameter.name = "Balance";
parameter.symbol = "balance";
parameter.unit = "%";
parameter.midiCC = 10;
parameter.ranges.def = kParameterDefaults[index];
parameter.ranges.min = -100.0f;
parameter.ranges.max = 100.0f;
parameter.ranges.def = kParameterRanges[kParameterKneePoint].def;
parameter.ranges.min = kParameterRanges[kParameterKneePoint].min;
parameter.ranges.max = kParameterRanges[kParameterKneePoint].max;
break;
case kParameterBypass:
parameter.initDesignation(kParameterDesignationBypass);
break;
}
}
Expand Down
5 changes: 1 addition & 4 deletions plugins/Sampler/OneKnobUI.cpp
Expand Up @@ -33,17 +33,14 @@ static const OneKnobMainControl main = {
0, // parameter id
"Release",
"s",
0.0f,
10.0f,
0.0f
};

static const OneKnobAuxiliaryComboBoxValue comboBoxValues[] = {
{
0, "Mode 1", "Explain mode 1"
},
{
0, "Mode 2", "Explain mode 2"
1, "Mode 2", "Explain mode 2"
},
};

Expand Down
2 changes: 1 addition & 1 deletion plugins/common/OneKnobPlugin.hpp
Expand Up @@ -123,7 +123,7 @@ class OneKnobPlugin : public Plugin
void loadDefaultParameterValues()
{
for (uint i=0; i<kParameterCount; ++i)
parameters[i] = kParameterDefaults[i];
parameters[i] = kParameterRanges[i].def;
}

inline void setMeters(const float v1, const float v2)
Expand Down
2 changes: 0 additions & 2 deletions plugins/common/OneKnobPluginInfo.h
Expand Up @@ -56,7 +56,6 @@ struct OneKnobMainControl {
uint id;
const char* label;
const char* unit;
float min, max, def;
};

struct OneKnobAuxiliaryButtonGroupValue {
Expand Down Expand Up @@ -94,7 +93,6 @@ struct OneKnobAuxiliarySlider {
uint id;
const char* label;
const char* unit;
float min, max, def;
};

struct OneKnobAuxiliaryFileButton {
Expand Down
28 changes: 14 additions & 14 deletions plugins/common/OneKnobUI.hpp
Expand Up @@ -380,8 +380,8 @@ class OneKnobUI : public UI,
knob->setCallback(this);
knob->setId(control.id);
knob->setLabel(control.label);
knob->setRange(control.min, control.max);
knob->setDefault(control.def);
knob->setRange(kParameterRanges[control.id].min, kParameterRanges[control.id].max);
knob->setDefault(kParameterRanges[control.id].def);
knob->setUnitLabel(control.unit);
knob->setUnitColor(Color::fromHTML("#cacacb")); // FIXME label color autmatically

Expand Down Expand Up @@ -520,33 +520,31 @@ class OneKnobUI : public UI,
}

void createAuxiliaryFileButton(const Rectangle<uint>& area,
const OneKnobAuxiliaryButtonGroup& buttonGroupOpts,
const OneKnobAuxiliaryCheckBox& checkBoxOpts,
const OneKnobAuxiliarySlider& numFieldOpts,
const OneKnobAuxiliaryFileButton& fileButtonOpts)
{
DISTRHO_SAFE_ASSERT_RETURN(blendishAuxOptionButtonGroup == nullptr,);
DISTRHO_SAFE_ASSERT_RETURN(blendishAuxOptionCheckBox == nullptr,);
DISTRHO_SAFE_ASSERT_RETURN(blendishAuxOptionNumberField == nullptr,);
DISTRHO_SAFE_ASSERT_RETURN(blendishAuxOptionFileButton == nullptr,);
DISTRHO_SAFE_ASSERT_RETURN(blendishAuxOptionLabel == nullptr,);
DISTRHO_SAFE_ASSERT_RETURN(blendishAuxFileButtonKey == nullptr,);
DISTRHO_SAFE_ASSERT_RETURN(fileButtonOpts.key != nullptr,);

BlendishButtonGroup* const buttonGroup = new BlendishButtonGroup(&blendish);
BlendishCheckBox* const checkBox = new BlendishCheckBox(&blendish);
BlendishNumberField* const numField = new BlendishNumberField(&blendish);
BlendishToolButton* const fileButton = new BlendishToolButton(&blendish);
BlendishLabel* const label = new BlendishLabel(&blendish);

for (uint i=0; i<buttonGroupOpts.count; ++i)
buttonGroup->addButton(buttonGroupOpts.values[i].value, buttonGroupOpts.values[i].label);

buttonGroup->setCallback(this);
buttonGroup->setId(buttonGroupOpts.id);
checkBox->setCallback(this);
checkBox->setId(checkBoxOpts.id);
checkBox->setLabel(checkBoxOpts.title);

numField->setCallback(this);
numField->setId(numFieldOpts.id);
numField->setLabel(numFieldOpts.label);
numField->setRange(numFieldOpts.min, numFieldOpts.max);
numField->setValue(numFieldOpts.def);
numField->setRange(kParameterRanges[numFieldOpts.id].min, kParameterRanges[numFieldOpts.id].max);
numField->setValue(kParameterRanges[numFieldOpts.id].def);

fileButton->setCallback(this);
fileButton->setLabel(fileButtonOpts.label);
Expand All @@ -555,7 +553,7 @@ class OneKnobUI : public UI,
label->setFontSize(9);

auxOptionArea = getScaledArea(area);
blendishAuxOptionButtonGroup = buttonGroup;
blendishAuxOptionCheckBox = checkBox;
blendishAuxOptionNumberField = numField;
blendishAuxOptionFileButton = fileButton;
blendishAuxOptionLabel = label;
Expand Down Expand Up @@ -767,7 +765,9 @@ class OneKnobUI : public UI,
{
if (blendishAuxOptionCheckBox == widget)
if (BlendishCheckBox* const checkBox = blendishAuxOptionCheckBox.get())
setParameterValue(checkBox->getId(), checkBox->isChecked() ? 1.0f : 0.0f);
setParameterValue(checkBox->getId(),
checkBox->isChecked() ? kParameterRanges[checkBox->getId()].max
: kParameterRanges[checkBox->getId()].min);
}

void knobDragStarted(SubWidget* const widget) override
Expand Down