Skip to main content

17. Controlling external hardware via NRPN using the MP MIDI app

NRPN (Non-Registered Parameter Number)

NRPN is a protocol built on top of CC (not a separate message type). It is useful for hardware synths to expose thousands of parameters and NRPN uses multiple CC to increase the resolution.

There are 2 modes for NRPN in the MP MIDI application.

  1. Global - both encoders and buttons operate with NRPN instead of CC

  2. Specific - choose which encoders and buttons to use NRPN instead of CC

The global NRPN mode is stored in the MP MIDI properties file , which is an application-wide setting. It persists across sessions but is not saved per preset.

The per-encoder NRPN flag (is_nrpn on each encoder) IS stored in presets.

To activate the Global option use the right click menu:

image.png

When the global NRPN mode is enabled the Encoders can be modified from the “Encoder CC & Ch” window and from the Encoder Options view (the Encoder Options view affects the physical encoder signal).

image.png

Setting specific buttons to use NRPN

To set a button to use NRPN right click on the button and select NRPN from the drop down menu.

image.png

image.png

 

Setting NRPN per encoder while in CC mode (default mode). 

Open the Encoder CC & Ch window and choose which encoders to use NRPN instead of CC.

image.png

 

Internal CC usage in NRPN mode.

Note: NRPN uses CCs 6, 38, 98, 99 internally. 

if any button or encoder is assigned to those CC numbers on a channel that also has NRPN, the incoming messages will be consumed by the NRPN tracker and won't reach the button or encoder.

Here is an example with an encoder with NRPN parameter 1 on channel 1, sending 14-bit values as the slider is dragged.
Multiple 4-message NRPN sequences are sent as the value changes. 

That's expected signal behavior during a continuous encoder movement:

  B0 63 00  →  CC 99, ch 1, NRPN MSB = 0
  B0 62 01  →  CC 98, ch 1, NRPN LSB = 1   →  NRPN parameter = (0 << 7) | 1 = 1
  B0 06 3C  →  CC 6,  ch 1, Data MSB = 60
  B0 26 5A  →  CC 38, ch 1, Data LSB = 90   →  14-bit value = (60 << 7) | 90 = 7770