Consolidate ParameterDescriptor settings+ranges

This commit is contained in:
Robin Gareus 2017-06-21 14:41:40 +02:00
parent df6655ac68
commit 7ab15def2b
3 changed files with 30 additions and 32 deletions

View File

@ -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);

View File

@ -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

View File

@ -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);