From 964411b6888663e6b91d3083e6a7940e4b0a1303 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 29 Nov 2010 17:56:08 +0000 Subject: fix conversion of MIDI controller (7 bit) value into a 0..+1.0 range value git-svn-id: svn://localhost/ardour2/branches/3.0@8124 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/surfaces/generic_midi/midicontrollable.cc | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/libs/surfaces/generic_midi/midicontrollable.cc b/libs/surfaces/generic_midi/midicontrollable.cc index 2319b6c433..9060f010a0 100644 --- a/libs/surfaces/generic_midi/midicontrollable.cc +++ b/libs/surfaces/generic_midi/midicontrollable.cc @@ -152,17 +152,24 @@ MIDIControllable::control_to_midi (float val) float MIDIControllable::midi_to_control(float val) { - const float midi_range = 127.0f; // TODO: NRPN etc. + /* fiddle with MIDI value so that we get an odd number of integer steps + and can thus represent "middle" precisely as 0.5. this maps to + the range 0..+1.0 + + TODO: 14bit values + */ + + val = (val == 0.0f ? 0.0f : (val-1.0f) / 126.0f); if (controllable->is_gain_like()) { - return slider_position_to_gain (val/midi_range); + return slider_position_to_gain (val); } 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; + return (val * control_range) + control_min; } void -- cgit v1.2.3