diff options
author | Robin Gareus <robin@gareus.org> | 2017-06-21 14:41:40 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2017-06-21 18:13:26 +0200 |
commit | 7ab15def2be8bbf156442918e4b8e5f21c8962ba (patch) | |
tree | 2462b5fa834df167566f32a9029fd46690cf091c /libs | |
parent | df6655ac682ef99f4d637520d8d1bf8aa5b3beea (diff) |
Consolidate ParameterDescriptor settings+ranges
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/lv2_plugin.cc | 24 | ||||
-rw-r--r-- | libs/ardour/parameter_descriptor.cc | 29 | ||||
-rw-r--r-- | libs/ardour/vst_plugin.cc | 9 |
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); |