13
0

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
This commit is contained in:
Paul Davis 2010-11-29 17:56:08 +00:00
parent d55c881626
commit 964411b688

View File

@ -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