summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2014-03-23 18:59:24 +0100
committerRobin Gareus <robin@gareus.org>2014-03-23 18:59:24 +0100
commitaf0c42ec4f9d46907299f704d0c70e25e0af6b96 (patch)
treed33fb13e4edbe718f7c8daad71a04acbaf69a222
parentc0845bed53096d60a48072bbc0e63311ec5b4904 (diff)
midi-controller, support log parameters - fixes #5890
-rw-r--r--libs/ardour/plugin_insert.cc4
-rw-r--r--libs/surfaces/generic_midi/midicontrollable.cc23
2 files changed, 24 insertions, 3 deletions
diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc
index 2f90017498..ae018fb2a3 100644
--- a/libs/ardour/plugin_insert.cc
+++ b/libs/ardour/plugin_insert.cc
@@ -1184,6 +1184,10 @@ PluginInsert::PluginControl::PluginControl (PluginInsert* p, const Evoral::Param
_logarithmic = desc.logarithmic;
_sr_dependent = desc.sr_dependent;
_toggled = desc.toggled;
+
+ if (desc.toggled) {
+ set_flags(Controllable::Toggle);
+ }
}
/** @param val `user' value */
diff --git a/libs/surfaces/generic_midi/midicontrollable.cc b/libs/surfaces/generic_midi/midicontrollable.cc
index d78dd5e644..a12b20b1a8 100644
--- a/libs/surfaces/generic_midi/midicontrollable.cc
+++ b/libs/surfaces/generic_midi/midicontrollable.cc
@@ -167,7 +167,7 @@ MIDIControllable::control_to_midi (float val)
float control_min = controllable->lower ();
float control_max = controllable->upper ();
- const float control_range = control_max - control_min;
+ float control_range = control_max - control_min;
if (controllable->is_toggle()) {
if (val >= (control_min + (control_range/2.0f))) {
@@ -175,6 +175,14 @@ MIDIControllable::control_to_midi (float val)
} else {
return 0;
}
+ } else {
+ AutomationControl *actl = dynamic_cast<AutomationControl*> (controllable);
+ if (actl) {
+ control_min = actl->internal_to_interface(control_min);
+ control_max = actl->internal_to_interface(control_max);
+ control_range = control_max - control_min;
+ val = actl->internal_to_interface(val);
+ }
}
return (val - control_min) / control_range * max_value_for_type ();
@@ -196,8 +204,17 @@ MIDIControllable::midi_to_control (int val)
float control_min = controllable->lower ();
float control_max = controllable->upper ();
- const float control_range = control_max - control_min;
-
+ float control_range = control_max - control_min;
+
+ AutomationControl *actl = dynamic_cast<AutomationControl*> (controllable);
+ if (actl) {
+ if (fv == 0.f) return control_min;
+ if (fv == 1.f) return control_max;
+ control_min = actl->internal_to_interface(control_min);
+ control_max = actl->internal_to_interface(control_max);
+ control_range = control_max - control_min;
+ return actl->interface_to_internal((fv * control_range) + control_min);
+ }
return (fv * control_range) + control_min;
}