Electronic Music Wiki

A mechanism that MIDI provides for extending the number of parameters that can be controlled via the MIDI Controller message type. A parameter to be edited can be selected by sending a registered parameter or non-registered parameter message, and then the parameter's value is altered by sending a data entry message. Registered parameter numbers (RPNs) are assigned standard meanings in the MIDI standard. On the contrary, non-registered parameter numbers (NRPNs) do not have standard meanings assigned; manufacturers are free to use these as they see fit.

Registered and non-registered parameters work together with three other MIDI continuous controller types: data entry (controller numbers 6 & 38), increment (controller number 96) and decrement (controller number 97). The procedure is to use the RPN continuous controller messages to select a parameter to be changed, and then use any desired combination of data entry, increment and/or decrement messages to change the parameter's value. Even though at present only a few RPN parameter numbers are defined, the RPN messages is a two-byte message sent using controller 100 for the high byte and controller 101 for the low byte. (In practice at present, the data byte sent with controller 100 will always be zero, since all of the defined RPN numbers are less than 128. However, it is still necessary to send the message, according to the standard.)

To summarize, the procedure is:

  1. Select a parameter to be changed, by sending the RPN number using first a controller 100 message followed by a controller 101 message.
  2. Send some combination of data entry, increment and decrement messages to change the parameter. (Note that some parameters may use the data entry high-byte [controller 6] and low-byte [controller 38] messages in a different manner; see below.
  3. Per the standard, after changing the parameter, it should be de-selected by sending controller messages 100 and 101 both with a data byte of 127. Once this is done, further data entry, increment or decrement messages will be ignored until a parameter is selected again. In practice this is usually not necessary, unless you have a controller device that is in the habit of sending gratuitous data entry / increment / decrement messages (perhaps an older device that uses these controller numbers for other purposes).

The procedure for altering a non-registered parameter is the same, except for using the NRPN controller numbers 98 and 99 to select the parameter. Only one parameter, registered or non-registered, can be selected at a time.

The defined registered parameter numbers, as of June 2020, are:

0 -- Pitch wheel range. The date entry high byte specifies number of semitones, and the low byte specifies number of cents (1/100 of a semitone). This will set the range in each direction; in other words, if the values are 12 and 0 respectively, then the maximum range of the wheel will be one octave in each direction. If the values are 2 and 50, then the range will two semitones plus a quarter tone in each direction.

1 -- Fine tune. This can specify that the synth tune itself up to one semitone up and down. To do this, the two data entry values have to considered as a signed hexadecimal value; the value of 0x2000 (data entry values of 32 & 0) specify A = 440 Hz. Values below 0x2000 tune the synth flat; values above 0x2000 tune the synth sharp. The minimum step value is roughly 0,012 cents.

2 -- Coarse tune. This is used to transpose the synth's response to MIDI note messages, and to its keyboard as long as local control is on. (Outgoing MIDI note messages are not transposed.) A data entry high byte value of 32 specifies standard tuning; values above and below that transpose the keyboard by one semitone per increment. The data entry low byte is not used, and controller #38 messages are ignored.

3 -- Tuning program change; see next

4 -- Tuning bank change. These two RPNs are intended to allow alternate tuning tables to be selected, for non-equal-tempered tuning. Not widely implemented.

5 -- Modulation depth. This is intended to adjust the amount of vibrato which is produced at the maximum deflection of the mod wheel, assuming that the patch configures the mod wheel to perform that function. The data entry high byte and low byte together specify the value, where all zeroes is no modulation. Other than that, exactly what the synth should do with the value is not specified.