Scott wrote:... Controling the organ drawbars in real time .
Each MIDI controller that support 14-bit values can be used for drawbars of Pa-arrangers. That often are expensive controllers that supports NRPNs/RPNs that cope with those synths that require them for editing purposes with 14-bit values.
The best and cheapest way seems to do this with an Arduino in DIY. For this purpose, it must be taken into account, that in a corresponding Arduino sketch that up to nine NRPNs are processed in the correct order, also if they are operated simultaneously via the drawbars on the same midi channel (! Upper1,2,3,Lower separately).
*
Unlike other MIDI controllers NRPNs require more than one item of controller data to be sent.
The first item of NRPN is controller 99 with its ADRESS (MSB). It is followod by the second item controller 98 with its ADRESS (LSB) sent as a pair that specify the ADRESS parameter to be changed. The third item is controller 6 and sets the VALUE of the relevant parameter, the fourth item is the controller 38 and may optionally then be sent as a fine adjustment to the VALUE set by controller 6. For settings of drawbars the fourth item is not necessary.
*
Midi protocoll only can send 128 values, but with CC6 and CC38 128 x 128, i.e. 16,384 values (14-bit) can be sent. That is the advantage of NRPN, the disadvantage is that four midi events have to be sent with it.
Once an NRPN is selected on a given channel, the channel will apply subsequent Data Entry of Values to the selected parameter.
*
To insert NRPNs in Cubase is easy:
- Select controller 99 (NRPN MSB), select its Adress, select its channel
- select controller 98 (NRPN LSB), select its Adress, select its channel
- select controller 06 (Data Entry MSB), select its VALUE, select its channel
- select controller 38 (Data Entry LSB), select its VALUE, select its channel (not necessary for Drawbars, but necessary for sending Sb-Entries)
To insert NRPNS in Sonar / Cakewalk it is not so easy, but only one line/command is to insert
- select channel, select Kind (NRPN), select Adress (=128 * MSB-Adress + LSB-Adress), select Value (128 * MSB-Value + LSB value [or nothing])
Example: select Sb-Entry = 112 via MIDI via ControlChannel = 15 (cc99=2, cc98=64)
-- select channel 15, select Kind (NRPN), select Adress 320 (=128 * 2 + 64), select Value 140 (128 * 1 + 12)
Via Panel control of a DAW it can be seen, that each time a NRPN is adressed, it will accept a pair of values (MSB + LSB) to be sent. But there is no reaction of receiving device, if another/second value is sent. Values does not affecting anything, because all necessary items of a NRPN, at least the first three items cc99, cc98, cc06 for setting of drawbars are necessary to be sent for each new value.
Only for Sb-entry selection four items are necessary, whereas all parameters of Pa-arranger for sound (vibrato, filter, eg) and drum kit (filter, eg, tune, volume, panpot, fx-send) get along with it when there are three items.
Settings of drawbars also are to realise via Sysex. A command as published with 176, 99, 2 + 176, 98, 0 + 176, 6, 0 for a Drawbar 16 "in
position 0 is to realize with a SysEx" f0 42 7f 60 b0 63 02 b0 62 00 b0 06
00 f7 ". By changing the penultimate byte (range 00 - 7f) the volume of the 16" drawbars is changed in 128 steps up to the
max volume - if the penultimate byte is changed to max "7f" the volume of the 16 "Drawbars are shifted in 128 steps between zero and maximum volume (" f0 42 7f 60 b0 63 02 b0 62 00 b0 06
7f f7") - and this seems the easiest to do with DIY-Arduino.
At least I hope that there are certainly some users in this forum who are familiar with sketches, to break down the movement of a slider into 128 levels and to assign a SysEx command to it, which changes by one byte at a time (without 14-bit-resolution CC).
**
PS:
It maybe confusing or difficult that creating / editing NRPNs with MIDI 1.0 Protocol requires the use of
compound messages. With MIDI 2.0 Protocol that changes because NRPN compound messages are replaced with single messages.
In January 2020 the complete suite of MIDI 2.0 specifications were adopted unanimously by the MMA members in attendance.
The MIDI 2.0 Protocol uses the architecture of MIDI 1.0 Protocol to maintain backward compatibility and easy translation while offering expanded features - e.g. extends the data resolution for all Channel Voice Messages.
With MIDI 2.0, controllers offer 32-bit resolution and this is a huge improvement over the current 128 steps, which result from 7-bit resolution. The cumbersome, compound RPN (Registered Parameter Number) and NRPN (Non-Registered Parameter Number) controller messages are replaced by single controller messages that are as easy to use as MIDI 1.0’s Control Change messages. This is because the number of registered and assignable controllers is expanded to 16,384 each (over 32,000 total), so even with layered, polyphonic control surfaces, you won’t run out of controllers - with capable 32-bit resolution controllers digital controls will have a smoother, more analog feel.
*
Protocol Negotiation determines whether a MIDI device can accommodate the higher-resolution controllers, greater number of channels, and other enhancements of MIDI 2.0. For example, a high-resolution MIDI 2.0 keyboard controller can query whether a device can handle higher-resolution controllers, velocity data etc and, if not, fall back to MIDI 1.0 protocols. That all happens automatically. A MIDI 1.0 controller can be used with a synthesizer that has MIDI 2.0’s increased resolution, but simply works with MIDI 1.0 resolution - the same for the time still applies for
Pa keyboards.
*
As NRPNs nowadays are used for use cases beyond of what it was originally designed for. NRPNs heavily used in event-driven scripts of instruments to trigger once, twice or often certain behaviours. On my opinion such often triggered behaviours will cause with wrong values, so that in case of the last recognizable movement of a drawbar an
"End of NRPN" message should be sent (f0 42 7f 60
b0 63 7f b0 62 7f f7) - or also is possible to send EndOfNRPN within each single SysEx string after MSB data volume message (F0 42 7f 60 b0 63 02 b0 62 00 b0 06 vv
b0 63 7f b0 62 7f f7).
Why to do that: currently the NRPN LSB data message is optional and almost no MIDI sender is actually sending a final "End of NRPN" message because mostly just "data MSB" is sent (as we do with drawbars). That leaves the receiving side with the problem to be uncertain when exactly it can assume the NRPN message sequence to be complete. Should it wait for the next MIDI message to arrive in order to see whether there's also LSB data or should it be risked if the next MIDI message arrives seconds away or even not at all?
For the MIDI receiver it is currently almost inevitable to react both on "data MSB" and "data LSB". This is problematic, because depending on what that parameter actually does, it can lead to audible glitches, what can be avoided with an "End of NRPN".