RPN and NRPN select parameters that subsequent MIDI Data Entry messages change. RPN identifies registered parameters; NRPN identifies parameters whose meaning depends on the device. The selector identifies what to change. Data Entry supplies the new value.
If moving a controller changes the wrong setting, inspect the earlier parameter selection on that channel. A Data Entry event can act on a selection made before the visible portion of your clip.
Read the selector and value separately
| Task | Coarse / MSB controller | Fine / LSB controller |
|---|---|---|
| Select an RPN | CC101 | CC100 |
| Select an NRPN | CC99 | CC98 |
| Enter data for the selected parameter | CC6 | CC38 |
The MIDI Association reference lists these controllers and the registered parameter assignments. A device’s own implementation determines which parameters and fine values it actually supports. An NRPN number copied from another synthesizer is not a portable instruction.
These messages are channel-specific. A selector on channel 1 and Data Entry on channel 2 do not form a single instruction for channel 1. Track names alone do not establish the destination; inspect the channel fields.
Work through a complete RPN example
Download the RPN pitch-bend-range example. Before its first note, it sends this sequence on channel 1:
- CC101 = 0 and CC100 = 0 select pitch-bend sensitivity.
- CC6 = 12 and CC38 = 0 request a twelve-semitone range with zero additional cents.
- CC101 = 127 and CC100 = 127 select the RPN null value.
It then plays note 60 with centered pitch bend. There is deliberately no bend gesture: changing the range does not itself move the pitch while the bend value is centered. At the end, the example explicitly requests a two-semitone range and nulls the selection again. That ending is this example’s chosen setting, not a promise to restore whatever your project previously used.
The MIDI message summary notes that pitch-bend sensitivity depends on the receiver and can be set through RPN 0. Use a disposable project and a receiver that documents this support. We verified the file’s selector order, values and centered bend with a parser; we have not tested every synth’s response.
Null selection is not a value reset
This distinction prevents a common debugging mistake. Selecting RPN null stops later Data Entry from unintentionally modifying the previously selected RPN on a compliant receiver. It does not return the parameter you just changed to its previous value.
If you set a bend range of twelve semitones and then null the selection, the requested range remains twelve. To change the range back, select the parameter again and send the desired value. Save the instrument’s original setting before testing, rather than assuming two semitones is always the right restoration.
Diagnose a wrong-parameter change
Work on a copy of the region and display CC98 through CC101, plus CC6 and CC38. Read events in chronological order on the affected channel. Look earlier than the problematic Data Entry event; the selector may be in another clip or on a different track feeding the same channel.
Write down each selection followed by its data. Check for an unintended RPN/NRPN selector between the selection you expected and the value. Reorder only the affected sequence, keeping its intended channel and timing. If a device documents only coarse values, do not assume adding a fine value creates extra resolution.
For an NRPN, obtain the exact model’s MIDI implementation before sending anything. Translate the documented parameter and value carefully, including its byte order and range. This guide intentionally supplies no generic NRPN patch-edit command: the same numbers can mean different things on different devices.
Preserve the sequence when exporting
Export a short region, reopen it in an event-aware sequencer, and compare the selector/data order. Do not validate only the notes. A melody can survive while its parameter setup disappears.
Bank Select also uses controller pairs, but it chooses a sound bank alongside Program Change; it is not an RPN selector. SoundToMIDI’s current note editor does not preserve arbitrary parameter sequences. Keep this work in your sequencer. If you start with an MP3, extract the notes before adding instrument-specific controls.