MP3 to MIDI: NRPN, the Parameter Number With No Registry
A .mid can record that the pitch wheel reaches two semitones, or that a channel sits a few cents flat. Neither is a field of its own. Both are set by choosing a parameter number first, then sending the value to whichever number is chosen, and two pairs of controllers do the choosing. Only one of those pairs has anything published to choose from.
Short answer
- Two pairs, four numbers. Controllers 100 and 101 select a registered parameter; 98 and 99 select a non-registered one. Each pair is two seven-bit fields, so each addresses 16,384 parameters on a channel.
- One registry, one void. Six parameters and a null are standardised in the registered family, which is 0.043 per cent of its address space. Nothing is standardised in the other.
- The address is marked, the value is not. The controller table stars 100 and 101 as required for General MIDI Level 1, and leaves 6 and 38, the two Data Entry controllers, unstarred.
- Two rows carry no value at all. Controllers 96 and 97 read N/A: they step the selected parameter by one instead of setting it.
Four controller numbers, two families
Controllers 98 and 99 are labelled Non-Registered Parameter Number LSB and MSB. Controllers 100 and 101 are the same pair with the word Registered. Each is a seven-bit field, so each pair addresses 128 times 128, or 16,384 parameters, on one channel. General MIDI's account of the GS extensions puts all four in one phrase, cc#98-101, glossed as entering additional parameters. The two families share that arithmetic and nothing else.
One family has a registry, the other has none
The registered family has a published list: 0,0 pitch bend range; 1,0 and 2,0 channel fine and coarse tuning; 3,0 and 4,0 tuning program and bank select; 5,0 modulation depth range; and 127,127, a null that closes the selection. Six parameters and one terminator out of 16,384 addresses: 0.043 per cent of the space. The non-registered family has no list. Neither document says what 98 and 99 select; the answer belongs to whoever built the instrument.
The address is starred, the value is not
The controller table in the file-format appendix has 128 rows and nine carry an asterisk, footnoted as equipment must respond in order to comply with General MIDI level 1. Rows 100 and 101 are among the nine. Rows 6 and 38, Data Entry MSB and LSB, are not, and neither are 98 and 99. General MIDI's own controller list names all four of 6, 38, 100 and 101. The numbers that say which parameter is meant are marked mandatory; the numbers that carry its value are marked with nothing.
Two rows that carry no value
Exactly two rows read N/A in the value column: 96 and 97, Data entry +1 and Data entry -1. They move the selected parameter one step instead of setting it. A step is relative, and a file has no running state to step from. A .mid read from the beginning has no current value for any parameter, so +1 at time zero adds to nothing.
What five messages buy
General MIDI's worked example sets coarse tuning to 64 and closes the selection: 101 to 0, 100 to 2, 6 to 64, 101 to 127, 100 to 127. Five Control Change messages. With a status byte each, 15 bytes; under running status, 10. One byte in fifteen carries the value, and the rest is addressing and teardown.
What a converted file can and cannot say
None of this is reachable from audio. A converter measuring amplitude and spectrum has no parameter to set and no state to step from. It can write bend messages, but how far a bend travels is a parameter the file must set separately, so a file with bends and no 0,0 leaves the reach undefined. A file carrying 98 and 99 is legal everywhere and readable almost nowhere: the address parses, the meaning is unpublished.