windowsmusic computerphillipreesepc visit our online shopaudio plugin
Phil Rees Music Tech
musicmidi accessoriessoft synth
Neptune Sky band

MIDI Non-Registered (and Registered) Parameters

midi standardThe MIDI standard includes commands that satisfy nearly all the requirements of generic music control. Even though MIDI is so commendably wide-ranging, it is prudent that the core of the standard be stable. Standards that change too often beget myriad incompatibilities, which end up causing frustration to end-users.

On the other hand, the applications of MIDI are always evolving, and manufacturers of MIDI equipment continually introduce new models. For this reason, it is also desirable that the MIDI standard should include provision for ad hoc extensions.

The MIDI specification has two elements that provide for device-specific or application-specific extensions. One of these elements is the apparatus of Non-Registered Parameters often referred to as NRPNs (some people say "nerpins"); the other is the wonderful world of System Exclusive, often abbreviated to SysEx.

NRPN is an acronym for Non-Registered Parameter Number, while RPN means Registered Parameter Number. They each work in the same way, but RPNs are specified by the MIDI standard, while NRPN’s are specified by particular manufacturers. NRPN assignments vary between different device manufacturers, and should be listed in the appropriate equipment manuals. The MIDI standard says that, for safety's sake, the reception of NRPNs should be disabled at power-up. Devices should let the user disable reception of NRPNs, in case there is a NRPN implementation conflict. RPN response may be enabled at power-up.

NRPN and RPN parameter change commands are constructed from a succession of MIDI Control Change (also referred to as Controller) messages. Controller messages are Channel Voice messages – from this the parameter change commands inherit the property of having a MIDI channel tag.

There are two main parts to each parameter change command. The first is the number, which identifies (or addresses) the specific parameter, and the second is the (data) value or variation to assign to the specific parameter.

A pair of MIDI Controllers are used to select each specific parameter number, and it is advisable that the pair should always be sent together. NRPNs are specified by Controllers 98 and 99, while RPNs are specified by Controllers 100 and 101. The most recently received parameter number becomes the active parameter number for the particular MIDI channel.

The fact that separate Controller pairs are designated for the NRPN number and the RPN number may suggest that a MIDI channel could have simultaneously a current NRPN and a current RPN. However, NRPNs and RPNs share a common mechanism for setting the parameter value. Therefore there is only one active parameter number per channel.

There are four MIDI Controllers involved in assigning a value to the active parameter. Controller 6 (called the Data Entry MSB) sets the parameter value directly, and Controller 38 (called the Data Entry LSB) may optionally be used as a fine adjustment to improve on the precision of the parameter value. Controller 96 is called Data Increment and Controller 97 is called Data Decrement.

Data Increment and Data Decrement controllers are not consistently supported. The value portion of these messages is sometimes given a value or step size, but the transmitted value byte is commonly set to zero. Many slave devices will ignore the value byte, and a default step size (often equal to one) will be employed.

The table below shows how three or four MIDI Controller messages are used to make up a parameter change command; numbers are shown in decimal representation:

1 Control change, channel 101 for RPN, or 99 for NRPN parameter number, high order seven bits (MSB)
2 Control change, channel 100 for RPN, or 98 for NRPN parameter number, low order seven bits (LSB)
3 Control change, channel Controller number 6 parameter value, high order seven bits (MSB)
4    optional Control change, channel Controller number 38 parameter value, low order seven bits (LSB)

merge box prefers nrpnCompared to SysEx, RPNs and NRPNs are broadly-speaking more amenable to MIDI devices and software such as sequencers and merge units.

The current MIDI standard only specifies five RPNs (numbers are shown in decimal with the MSB, CC101, first): they are Pitch Bend Sensitivity (0, 0), Fine Tuning (0, 1), Coarse Tuning (0, 2), Tuning Program Select (0, 3), and Tuning Bank Select (0, 4). Another number is in widespread use: Null (127, 127), which, very usefully, cancels the active parameter number. This dummy RPN is occasionally called Reset RPN, and it does not require a Data Entry message for parameter value.

The Pitch Bend Sensitivity RPN (0,0) is also known as Pitch Bend Range. The high order adjustment uses Controller 6 (Data Entry MSB) to set the range in semitones. The low order adjustment uses Controller 38 (Data Entry LSB) to set the range in cents (that is hundredths of a semitone.

Master Fine Tuning (RPN 0,1) uses both Data Entry controllers to provide a fourteen bit value which represents the tuning displacement (up or down) in fractional parts of a semitone (full range equals one semitone, a single step represents 100/8192 cents); the centre value (8192) corresponds to the standard (A440) tuning. Master Coarse Tuning (RPN 0,2) uses just the Data Entry MSB controller to provide a seven bit value which represents the tuning displacement (up or down) in whole semitones; the centre value (64) corresponds to standard tuning.

Tuning Program Select (RPN 0, 3), and Tuning Bank Select (RPN 0, 4), are part of the MIDI Tuning Standard, which is not widely implemented.

It is now widely regarded as best practice to Null (RPN 127, 127) the active parameter number immediately after sending the Data Controller(s) – this is summarised in the table below. If the active parameter number is left open, and the equipment is not turned off, a parameter could remain set for years! A rogue Data Entry message on the corresponding channel could then cause unintended changes.

1 Control change, channel 101 for RPN, or 99 for NRPN parameter number, high order seven bits (MSB)
2 Control change, channel 100 for RPN, or 98 for NRPN parameter number, low order seven bits (LSB)
3 Control change, channel Controller number: 6 parameter value
4 Control change, channel Controller number: 101 parameter number: 127 (Null)
5                  Control change, channel Controller number: 100 parameter number: 127 (Null)

Our C16 MIDI Control Unit (now discontinued) follows what I consider to be best practice. It always sends together the controller pairs for parameter number. It always nulls the parameter number after sending the Data value. In this arrangement, and using running status, setting a parameter with a single precision (seven-bit) value takes a total of eleven bytes.The little table, below, illustrates this; it uses decimal numbers.

status 99 NRPN MSB 98 NRPN LSB 06 value 101 127 100 127

MIDI NRPN to Phil Rees Music Tech home page

© Philip Rees 2000
This document is not to be reproduced without permission of the author.
No liability can be accepted for errors and omissions.
All trademarks acknowledged.