HomeMIDIMIDI Tutorials

RPN and NRPN Tutorial

RPN stands for "Registered Parameter Number", while NRPN stands for "Non Registered Parameter Number". They work exactly the same, but act on different areas of the synthesizer.

RPN is defined by the Standard MIDI Specification (hence "registered") and works the same on all synthesizer that conform to the MIDI Specification. NRPN is specific to a particular synthesizer (hence "non registered") and is unlikely to work the same on synthesizers from different manufacturers.

The idea of parameter numbers, as opposed to System Exclusive messages, is that they are easier to use and faster to transmit. It is for these reasons that the most often used parameters are encompased in either RPN or NRPN.

The MIDI Specification currently defines only four parameters (RPN):

  1. Pitch Bend Sensitivity (0,0)
  2. Master Fine Tuning (0,1)
  3. Master Coarse Tuning (0,2)
  4. RPN null (127,127)

The only confusing part of using parameter numbers, initially, is that there are two parts to using them. First you need to tell the synthesizer what parameter you want to change, then you need to tell it how to change the parameter.


For example, if you want to change the "pitch bend sensitivity" you would send the following control change messages:

101 0
100 0
  6 2
 38 0

The 101 and 100 messages indicate what parameter is to be changed. The 0 after each one comes from the parameter list above. Changing only the 0 next to control change 100 to 1 would select "master fine tuning" as indicated in the parameter list above.

Then comes the 6 and 38 messages, which indicate what to do with the parameter pointed to by the 101 and 100 messages. In this example we are changing the "pitch bend sensitivity", we are setting it to 2 (which is actually the default value). Note that if the value next to control change 38 is 0, then you can safely omit the message - however I would recommend always including it for completeness.

Pitch bend sensitivity is how much the currently sounding note(s), in the current MIDI channel, is/are affected by pitch bend. The default value of 2 means that the maximum pitch bend will result in a pitch change of two semitones. (Above and below the sounding note, meaning a total of four semitones from lowest to hightest pitch bend positions.)

The maximum sensitivity is twenty-four semitones (two octaves above and two below).

As a demonstration, the first of the following MIDI files plays a single note and bends the pitch from the lowest to the highest range available to the pitch bend controller. This is followed by two MIDI files, each setting the pitch bend sensitivity to a different value using RPN. Click on one of the sensitivity settings, then play the note. Click on the other sensitivity setting and then play the same note!


Sustained note with pitch bend

Pitch bend setting of 2 semitones

Pitch bend setting of 24 semitones


NRPN is different from one manufacturer to another, but the concept is exactly the same as RPN, so if you know how to use one, then you know how to use the other! It is just a matter of looking in the manual to find out what parameters can be changed and in what way.

As an example: the Roland GS standard defines a parameter called "vibrato rate". This is the speed at which a sustained note will "waver". The parameter value is (1,8) and has a value range of 0 through 127.

Since 101 and 100 are defined as RPN, NRPN uses 99 and 98.

To maximize a note's vibrato, send the following control changes:

99 1
98 8
 6 127
38 0

Now any sustained notes in the same channel will have a very violent vibrato!!

Be aware that some NRPN are "relative" while others are "absolute". This means that sending a relative change of 10 three times will result in a change of 30. An absolute change results in exactly the number specified, regardless of how often it is sent.


Something to bear in mind is that the data controllers (6 and 38) always change the most recent parameter specified with parameter controllers in the same channel. The Roland manual recommends sending the "RPN null" immediately after sending the data controllers, so that stray data controllers don't alter a parameter unexpectedly. The perfectionist in me says this is unnecessary. If there are errant data control messages out there I want to hear them make something go wrong, so I can find them and remove them!


If you know for a fact that I have made any mistakes above, please let me know.

Feed back on clarity and semantics will also be greatly appreciated.

Thanks, Eddie Lotter


Selecting Roland Capital Tones and Variations MIDI Tutorials Creating User Drums Sets on the Roland Sound Canvas