Consolidate ParameterDescriptor settings+ranges
This commit is contained in:
parent
df6655ac68
commit
7ab15def2b
@ -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.enumeration = lilv_port_has_property(_impl->plugin, port, _world.lv2_enumeration);
|
||||||
desc.scale_points = get_scale_points(which);
|
desc.scale_points = get_scale_points(which);
|
||||||
|
|
||||||
desc.update_steps();
|
|
||||||
|
|
||||||
if (steps) {
|
if (steps) {
|
||||||
//override auto-calculated steps in update_steps()
|
desc.rangesteps = lilv_node_as_float (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.update_steps();
|
||||||
|
|
||||||
lilv_node_free(def);
|
lilv_node_free(def);
|
||||||
lilv_node_free(min);
|
lilv_node_free(min);
|
||||||
|
@ -143,6 +143,17 @@ ParameterDescriptor::ParameterDescriptor()
|
|||||||
void
|
void
|
||||||
ParameterDescriptor::update_steps()
|
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) {
|
if (unit == ParameterDescriptor::MIDI_NOTE) {
|
||||||
step = smallstep = 1; // semitone
|
step = smallstep = 1; // semitone
|
||||||
largestep = 12; // octave
|
largestep = 12; // octave
|
||||||
@ -153,10 +164,22 @@ ParameterDescriptor::update_steps()
|
|||||||
largestep = position_to_gain (dB_coeff_step(upper));
|
largestep = position_to_gain (dB_coeff_step(upper));
|
||||||
step = position_to_gain (largestep / 10.0);
|
step = position_to_gain (largestep / 10.0);
|
||||||
smallstep = step;
|
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 {
|
} else {
|
||||||
/* note that LV2Plugin::get_parameter_descriptor ()
|
|
||||||
* overrides this is lv2:rangeStep is set for a port.
|
|
||||||
*/
|
|
||||||
const float delta = upper - lower;
|
const float delta = upper - lower;
|
||||||
|
|
||||||
/* 30 happens to be the total number of steps for a fader with default
|
/* 30 happens to be the total number of steps for a fader with default
|
||||||
|
@ -321,7 +321,6 @@ VSTPlugin::set_state (const XMLNode& node, int version)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
VSTPlugin::get_parameter_descriptor (uint32_t which, ParameterDescriptor& desc) const
|
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.step = prop.stepInteger;
|
||||||
desc.smallstep = prop.stepInteger;
|
desc.smallstep = prop.stepInteger;
|
||||||
desc.largestep = prop.stepInteger;
|
desc.largestep = prop.stepInteger;
|
||||||
|
desc.integer_step = true;
|
||||||
|
|
||||||
} else if (prop.flags & kVstParameterUsesFloatStep) {
|
} else if (prop.flags & kVstParameterUsesFloatStep) {
|
||||||
|
|
||||||
desc.step = prop.stepFloat;
|
desc.step = prop.stepFloat;
|
||||||
desc.smallstep = prop.smallStepFloat;
|
desc.smallstep = prop.smallStepFloat;
|
||||||
desc.largestep = prop.largeStepFloat;
|
desc.largestep = prop.largeStepFloat;
|
||||||
|
// desc.rangesteps = (desc.upper - desc.lower) / prop.smallStepFloat; // XXX
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
@ -369,8 +370,6 @@ VSTPlugin::get_parameter_descriptor (uint32_t which, ParameterDescriptor& desc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
desc.toggled = prop.flags & kVstParameterIsSwitch;
|
desc.toggled = prop.flags & kVstParameterIsSwitch;
|
||||||
desc.logarithmic = false;
|
|
||||||
desc.sr_dependent = false;
|
|
||||||
desc.label = Glib::locale_to_utf8 (prop.label);
|
desc.label = Glib::locale_to_utf8 (prop.label);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -384,15 +383,11 @@ VSTPlugin::get_parameter_descriptor (uint32_t which, ParameterDescriptor& desc)
|
|||||||
_plugin->dispatcher (_plugin, effGetParamName, which, 0, label, 0);
|
_plugin->dispatcher (_plugin, effGetParamName, which, 0, label, 0);
|
||||||
|
|
||||||
desc.label = Glib::locale_to_utf8 (label);
|
desc.label = Glib::locale_to_utf8 (label);
|
||||||
desc.integer_step = false;
|
|
||||||
desc.lower = 0.0f;
|
desc.lower = 0.0f;
|
||||||
desc.upper = 1.0f;
|
desc.upper = 1.0f;
|
||||||
desc.step = 0.01f;
|
desc.step = 0.01f;
|
||||||
desc.smallstep = 0.005f;
|
desc.smallstep = 0.005f;
|
||||||
desc.largestep = 0.1f;
|
desc.largestep = 0.1f;
|
||||||
desc.toggled = false;
|
|
||||||
desc.logarithmic = false;
|
|
||||||
desc.sr_dependent = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
desc.normal = get_parameter (which);
|
desc.normal = get_parameter (which);
|
||||||
|
Loading…
Reference in New Issue
Block a user