diff options
Diffstat (limited to 'libs/surfaces/generic_midi/midicontrollable.cc')
-rw-r--r-- | libs/surfaces/generic_midi/midicontrollable.cc | 38 |
1 files changed, 15 insertions, 23 deletions
diff --git a/libs/surfaces/generic_midi/midicontrollable.cc b/libs/surfaces/generic_midi/midicontrollable.cc index 6087a857be..32b6ff8fe1 100644 --- a/libs/surfaces/generic_midi/midicontrollable.cc +++ b/libs/surfaces/generic_midi/midicontrollable.cc @@ -21,6 +21,7 @@ #include <stdint.h> #include <cmath> #include <climits> +#include <iostream> #include "pbd/error.h" #include "pbd/controllable_descriptor.h" @@ -133,18 +134,17 @@ MIDIControllable::stop_learning () } float -MIDIControllable::control_to_midi(float val) +MIDIControllable::control_to_midi (float val) { - float control_min = 0.0f; - float control_max = 1.0f; - ARDOUR::AutomationControl* ac = dynamic_cast<ARDOUR::AutomationControl*>(controllable); - if (ac) { - control_min = ac->parameter().min(); - control_max = ac->parameter().max(); - } + const float midi_range = 127.0f; // TODO: NRPN etc. + + if (controllable->is_gain_like()) { + return gain_to_slider_position (val/midi_range); + } + float control_min = controllable->lower (); + float control_max = controllable->upper (); const float control_range = control_max - control_min; - const float midi_range = 127.0f; // TODO: NRPN etc. return (val - control_min) / control_range * midi_range; } @@ -152,23 +152,16 @@ MIDIControllable::control_to_midi(float val) float MIDIControllable::midi_to_control(float val) { - float control_min = 0.0f; - float control_max = 1.0f; - ARDOUR::AutomationControl* ac = dynamic_cast<ARDOUR::AutomationControl*>(controllable); - const float midi_range = 127.0f; // TODO: NRPN etc. - - if (ac) { - if (ac->is_gain_like()) { - return slider_position_to_gain (val/midi_range); - } - - control_min = ac->parameter().min(); - control_max = ac->parameter().max(); - } + if (controllable->is_gain_like()) { + return slider_position_to_gain (val/midi_range); + } + float control_min = controllable->lower (); + float control_max = controllable->upper (); const float control_range = control_max - control_min; + return val / midi_range * control_range + control_min; } @@ -254,7 +247,6 @@ MIDIControllable::midi_sense_pitchbend (Parser &, pitchbend_t pb) return; } - if (!controllable->is_toggle()) { /* XXX gack - get rid of assumption about typeof pitchbend_t */ controllable->set_value ((pb/(float) SHRT_MAX)); |