summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-06-21 14:41:40 +0200
committerRobin Gareus <robin@gareus.org>2017-06-21 18:13:26 +0200
commit7ab15def2be8bbf156442918e4b8e5f21c8962ba (patch)
tree2462b5fa834df167566f32a9029fd46690cf091c /libs/ardour
parentdf6655ac682ef99f4d637520d8d1bf8aa5b3beea (diff)
Consolidate ParameterDescriptor settings+ranges
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/lv2_plugin.cc24
-rw-r--r--libs/ardour/parameter_descriptor.cc29
-rw-r--r--libs/ardour/vst_plugin.cc9
3 files changed, 30 insertions, 32 deletions
diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc
index 1c761166e0..543feb5930 100644
--- a/libs/ardour/lv2_plugin.cc
+++ b/libs/ardour/lv2_plugin.cc
@@ -2125,31 +2125,11 @@ LV2Plugin::get_parameter_descriptor(uint32_t which, ParameterDescriptor& desc) c
desc.enumeration = lilv_port_has_property(_impl->plugin, port, _world.lv2_enumeration);
desc.scale_points = get_scale_points(which);
- desc.update_steps();
-
if (steps) {
- //override auto-calculated steps in update_steps()
- float s = lilv_node_as_float (steps);
- const float delta = desc.upper - desc.lower;
-
- desc.step = desc.smallstep = (delta / s);
- desc.largestep = std::min ((delta / 5.0f), 10.f * desc.smallstep);
-
- if (desc.logarithmic) {
- // TODO marry AutomationControl::internal_to_interface () with
- // http://lv2plug.in/ns/ext/port-props/#rangeSteps
- desc.smallstep = desc.smallstep / logf(s);
- desc.step = desc.step / logf(s);
- desc.largestep = desc.largestep / logf(s);
- } else if (desc.integer_step) {
- desc.smallstep = 1.0;
- desc.step = std::max(1.f, rintf (desc.step));
- desc.largestep = std::max(1.f, rintf (desc.largestep));
- }
- DEBUG_TRACE(DEBUG::LV2, string_compose("parameter %1 small: %2, step: %3 largestep: %4\n",
- which, desc.smallstep, desc.step, desc.largestep));
+ desc.rangesteps = lilv_node_as_float (steps);
}
+ desc.update_steps();
lilv_node_free(def);
lilv_node_free(min);
diff --git a/libs/ardour/parameter_descriptor.cc b/libs/ardour/parameter_descriptor.cc
index a63c90d1db..310ec1a483 100644
--- a/libs/ardour/parameter_descriptor.cc
+++ b/libs/ardour/parameter_descriptor.cc
@@ -143,6 +143,17 @@ ParameterDescriptor::ParameterDescriptor()
void
ParameterDescriptor::update_steps()
{
+ /* sanitize flags */
+ if (toggled || enumeration) {
+ logarithmic = false;
+ }
+ if (logarithmic && (upper <= lower || lower * upper <= 0)) {
+ logarithmic = false;
+ }
+ if (rangesteps < 2) {
+ rangesteps = 0;
+ }
+
if (unit == ParameterDescriptor::MIDI_NOTE) {
step = smallstep = 1; // semitone
largestep = 12; // octave
@@ -153,10 +164,22 @@ ParameterDescriptor::update_steps()
largestep = position_to_gain (dB_coeff_step(upper));
step = position_to_gain (largestep / 10.0);
smallstep = step;
+ } else if (rangesteps > 1) {
+ const float delta = upper - lower;
+
+ step = smallstep = (delta / (rangesteps - 1)); // XXX
+ largestep = std::min ((delta / 5.0f), 10.f * smallstep); // XXX
+
+ if (logarithmic) {
+ smallstep = smallstep / logf (rangesteps); // XXX
+ step = step / logf (rangesteps);
+ largestep = largestep / logf (rangesteps);
+ } else if (integer_step) {
+ smallstep = 1.0;
+ step = std::max(1.f, rintf (rangesteps));
+ largestep = std::max(1.f, rintf (largestep));
+ }
} else {
- /* note that LV2Plugin::get_parameter_descriptor ()
- * overrides this is lv2:rangeStep is set for a port.
- */
const float delta = upper - lower;
/* 30 happens to be the total number of steps for a fader with default
diff --git a/libs/ardour/vst_plugin.cc b/libs/ardour/vst_plugin.cc
index 23c2751ae3..afed7315f4 100644
--- a/libs/ardour/vst_plugin.cc
+++ b/libs/ardour/vst_plugin.cc
@@ -321,7 +321,6 @@ VSTPlugin::set_state (const XMLNode& node, int version)
return ret;
}
-
int
VSTPlugin::get_parameter_descriptor (uint32_t which, ParameterDescriptor& desc) const
{
@@ -348,12 +347,14 @@ VSTPlugin::get_parameter_descriptor (uint32_t which, ParameterDescriptor& desc)
desc.step = prop.stepInteger;
desc.smallstep = prop.stepInteger;
desc.largestep = prop.stepInteger;
+ desc.integer_step = true;
} else if (prop.flags & kVstParameterUsesFloatStep) {
desc.step = prop.stepFloat;
desc.smallstep = prop.smallStepFloat;
desc.largestep = prop.largeStepFloat;
+ // desc.rangesteps = (desc.upper - desc.lower) / prop.smallStepFloat; // XXX
} else {
@@ -369,8 +370,6 @@ VSTPlugin::get_parameter_descriptor (uint32_t which, ParameterDescriptor& desc)
}
desc.toggled = prop.flags & kVstParameterIsSwitch;
- desc.logarithmic = false;
- desc.sr_dependent = false;
desc.label = Glib::locale_to_utf8 (prop.label);
} else {
@@ -384,15 +383,11 @@ VSTPlugin::get_parameter_descriptor (uint32_t which, ParameterDescriptor& desc)
_plugin->dispatcher (_plugin, effGetParamName, which, 0, label, 0);
desc.label = Glib::locale_to_utf8 (label);
- desc.integer_step = false;
desc.lower = 0.0f;
desc.upper = 1.0f;
desc.step = 0.01f;
desc.smallstep = 0.005f;
desc.largestep = 0.1f;
- desc.toggled = false;
- desc.logarithmic = false;
- desc.sr_dependent = false;
}
desc.normal = get_parameter (which);