This is a recommendation for expected response to Data Increment (MIDI controller #96) and Data Decrement (MIDI controller #97) MIDI messages.
Very little has been written about Data Increment (Controller #96) and Data Decrement (Controller #97). MIDI 1.0 (Document Version 4.1.1, February 1990) says the following, in the section on Registered and Non-Registered Parameter Numbers, page 23:
"The basic procedure for altering a parameter value is to first send the Registered or Non-Registered Parameter Number corresponding to the parameter to be modified, followed by the Data Entry, Data Increment, or Data Decrement value to be applied to the parameter."
This has created two problems:
1) The value used by the Data Increment or Data Decrement controller is not specified.
2) Does the increment/decrement affect the MSB, the LSB, or the full 14 bit data value of the parameter? It seems obvious for parameters that use the 14 bit data as a contiguous range, but what of Registered Parameter #0, Pitch Bend Sensitivity? This parameter uses MSB and LSB separately, with MSB adjusting sensitivity in semitones and LSB adjusting sensitivity in cents. Some manufacturers may even ignore adjustments to the LSB.
Under this recommendation, the value byte for both messages is ignored ("don't care"). When applied to Registered Parameter numbers 0, and 1, Data Increment and Data Decrement messages will increase or decrease the LSB by 1 (currently unspecified in MIDI 1.0). When applied to Registered Parameter numbers 2, 3, and 4, Data Increment and Data Decrement messages will increase or decrease the MSB by 1 (as specified in the 4.2 Addendum to MIDI 1.0, page 20).
For future Registered Parameters, behavior of Data Increment and Data Decrement must be specified; if it is not, reception of these messages will increase or decrease the LSB by 1. For Non-Registered Parameters, behavior of Data Increment and Data Decrement must be specified by the manufacturer for each parameter.
Receiving devices should keep track of the current value of a parameter and should increment the LSB by 1 when Data Increment is received, or decrement the LSB by 1 when Data Decrement is received. If the LSB is not supported by that device, then the parameter change should be made when the LSB wraps into the MSB, or as defined by the parameter. For example, a device that does not support the LSB (cents) value for Pitch Bend Sensitivity (RPN #0) should increment the MSB (semitones) value when the LSB is incremented to 100, at which time the LSB should be reset to 0.
For example, to increment pitch bend sensitivity on MIDI channel 1 by 2 cents (all numbers are in hexadecimal):
| $B0 $65 $0 |
send Registered Parameter Number MSB |
| $B0 $64 $0 |
send Registered Parameter Number LSB |
| $B0 $60 $0 |
increment by 1 |
| $B0 $60 $0 |
increment by 1 |
| $B0 $65 $7F |
set Registered Parameter Number MSB to NULL |
| $B0 $64 $7F |
set Registered Parameter Number LSB to NULL |
|