summaryrefslogtreecommitdiff
path: root/libs/surfaces/generic_midi/midicontrollable.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/surfaces/generic_midi/midicontrollable.cc')
-rw-r--r--libs/surfaces/generic_midi/midicontrollable.cc38
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));