NRPN (pronounced "nurpin") stands for Non Registered Parameter number. This allows companies to define their own extensions to the list of control changes. The approach is to first tell what to change, then what to change it to. There are two messages devoted to what to change- MSB and LSB, or Most Significant and Least Significant Bytes. Together, they indicate which parameter of the instrument to change. This limits a manufacturer to 16,000 or so controls per instrument. The value is transmitted in the "Data Entry", "Data increment" or "Data decrement" controller messages. Data Entry (which has an optional LSB like any of the frist 32 controls) sets the value. Increment and Decrement add or subtract from the current value. So the whole rigamarole goes like this:
Here's an example with numbers. Say a gadgetworks 400 has a gizmo parameter listed as nrpn 149, and the range of gizmo is 0 to 255. You want to set gizmo to 73.
The numbers have to be broken into 7 bit chunks. That's done by dividing (integer) by 128 for the MSB and rem or % 128 for the LSB. For the NRPN number you get MSB of 1 and LSB of 21. For the value, the MSB is 0 and LSB is 73. So you send
There are also a couple of RPNs or Registered Parameter Numbers. RPNs allow the MMA to add defined controllers as the need for them becomes apparent. They are almost the same format as NRPN:
There are three currently Registered Parameters: