NRPN confusion, Digitone

Hi everyone,

Digitone external MIDI control question.

I want to control some synth parameters of the Digitone from an external control device. Specifically, the Ratio of operator B.

The external control device can be software on a PC, hardware fader/knob box, whatever. That’s not important just yet. Before I go down that path of implementing my solution, I want to make sure that I understand it first.

At the moment, I want to just set the B Ratio on the Digitone to a single value by executing a button press on the external control device. I’m not trying to sweep through values.

For example, I want to press a button on the external control device, and I want that the B Ratio jump to 4.00/.75 (BI = 4.00, BII = .75).

Then, I want to press a different button on the external control device, and I want that the B Ratio jump to .25/8.00 (BI = .25, BII = 8.00)

Looking at the MIDI implementation in the back of the manual, I see this:

Pivoted, it looks like this:

CC MSB: 16
CC LSB: 48
CC min: 0
CC max: 127

NRPN MSB: 1
NRPN LSB: 75
NRPM min: 0
NRPN max: 127

Everything I’ve read leads me to understand that a single NRPN message is actually 4 packets of CC messages sent all at once:

CC 99 - MSB number
CC 98 - LSB number
CC 06 - coarse control
CC 38 - fine control

So, I would need to send something like this:

CC 99 - 16 (CC number 99, value of 16, which is the CC MSB value in the chart above)
CC 98 - 48 (CC number 98, value of 48, which is the CC LSB in the chart above)
CC 06 - 0-127 (CC number 06, value between 0-127, which is the CC min/max in the chart above)
CC 38 - 0-127 (CC number 38, value between 0-127, which is the CC min/max in the chart above)

Questions for the Elektronauts group:

1: Am I correct in my explanation of controlling the B Ratio using CCs 99, 98, 06, 38 with values 16, 48, 0-127, 0-127?

2: The table looks like it’s broken into two groups of columns:

  • CC MSB/LSB/min/max
  • NRPN MSB/LSB/min/max

What’s the difference between the two?

Thanks

Nick

Nrpn is at a higher resolution than what is possible with CC, I assume that’s probably relevant if you’re adjusting the ratio externally. Not sure I can answer the rest of your questions but my understanding is that you’re probably accurate in your assessment of the pairings and that more than likely jumping to a specific value is possible with either control type.

It says the value range is the same maxing out at 127 with both, but using an encoder, the gaps between values when turning may be different. Not sure in practical application, but that’s just what a higher resolution would usually reflect.

Someone else can give a second opinion though if there is more to it than the obvious.

2 Likes

iirc because CC is 128 values (0-127) LSB/MSB combo makes it high res, when you set LSB to 0-127, i.e. 128 values and multiply it by additional MSB 128 values (0-127) you get 128*128=16384, which NRPN has out of the box.
if you have the option to use NRPN - use it, it’s implemented for every value except for midi tracks CC or Sustain.

oh btw 0-127 is just a value, you can send 0-127 with NRPN and get 128 values or send 0-16384 for highest res.

for example, this is my EC4 setup for ratio offsets which are high res values in NRPN:

bot for something like delay feedback I only use 128 values so it goes like this:

3 Likes

Functionally, not a lot, both routes in this example offer access to the same parameter resolution.

Think of it as Minutes Seconds, you have both Minutes and seconds to exploit in this parameter

So in your case, you would use the CC method for convenience, especially if you are mapping discrete values

There can be some enhancements to NRPN whereby a subset of the grouped message can be sent to reduce bandwidth, but this doesn’t help you

Use a midi monitor when setting your desired values, sniff out the CC pair and send those back using 2 pairs of two bytes assuming full resolution is required … you may only need one pair for a ‘minute’ value, but without trying it’s hard to know if the fine offset(the LSB or ‘second’) would be retained or zeroed at reception of the new ‘minute’

CC messages are better in your example because the LSB CC is also specified and the required messages take less bandwidth

1 Like

I’ve looked into NRPN commands for the same purpose (operator B ratio), and never really gotten anywhere with them. I didn’t have a device other than my pc that could send them, and at that point I may as well change the parameter via overbridge.

After reading a post on the analog four forum, it’s occurred to me that it should be possible to skirt the need for NRPN by using breath controller CC messages. In the breath controller setup of the sound settings page, you can assign ratio B to be controlled by breath controller CC messages. Dialing in the amount you’re looking for should be simple: Crank the CC up to 128, and find the upper ratio using the assign value. Plenty of controllers can easily toggle a CC between 0 and 128.

1 Like

Update:

I was able to do some things in Bome MIDI Translator Pro.

My equipment:

  1. Keystep Pro keyboard, transmitting on Channel 1
  2. simple Roland 1 IN/1 OUT MIDI USB interface
  3. PC, running BOME MIDI Translator Pro
  4. Digitone

My setup:

  1. Keystep Pro MIDI A OUT -> Roland USB interface
  2. Roland USB interface -> USB port on PC
  3. BOME MIDI Translator Pro set up to transmit/receive MIDI to/from Roland USB interface
  4. ROLAND USB interface -> Digitone MIDI IN.

In a nutshell:

  1. I hit some keys on the Keystep Pro
  2. Raw MIDI from the Keystep Pro goes into the Roland USB interface
  3. Raw MIDI from the Roland USB interface goes into Bome Midi Translator Pro for processing.
  4. Processed MIDI from Bome MIDI Translator Pro gets sent back to Roland USB interface
  5. Processed MIDI from Roland USB interface gets sent to Digitone
  6. Digiton reacts to processed MIDI

In BMTP, I have a Translator which does the following:

INCOMING
=========
MIDI Message
Note On
Channel: any Channel
Note: any Note, set variable to note 00
Velocity: any velocity
Swallow MIDI message
Port: Roland USB

RULES
=====
exit rules, execute Outgoing Action

OUTGOING
=========
MIDI Message
NRPN (14-bit)
Channel 1 - 0
NRPN Parameter: MSB - 1, LSB - 75
Value: 00
Port: Roland USB

When I play keys on the Keystep Pro to BOME Midi Translator Pro, NRPN messages get sent to the Digitone, and the B Ratio reacts to the different events.

I haven’t quite figured out yet what keys trigger what Ratio values, but I’m pretty sure there is a pattern.

I think BI has 19 possible values, and BII has 19 possible values, for a total of 361 values (19x19=361).

MIDI keyboard notes values only go from 0-127, so I’ll need to figure out a clever way to be able to programmatically send the precise numbers I’m interested in.

This was way more difficult than it needed to be. I had an MC-303 back in 1997, you could put it in ‘sound module mode’ and access 16 channels of stuff…but you had to use NRPNs, and it was a nightmare. Never figured it out.

Thanks

Nick

1 Like

That EC4 looks verrrrrry tasty.

The variation in BI/BII varies like seconds:minutes
so from 0.25/0.25 > 16/16 the first value cycles faster and the second value updates after the upper gets to 16 (this happens every 19 increments from 0)

The mapping to NRPN is the same, but the LSB gets to 127 before cycling

so you get your 19x19 variations split across three MSB increments - the highest MSB/LSB data pair are 2/104 - so that’s 128(0) 128(1) + 105(2) = 361

you can map from that, but obviously there are more parameters that 7bit, so a keyboard won’t translate into a full range by a long way


PS : I was going to advocate doing the process with CCs as i suggest, but the whole CC compatibility is borked for this - i will report that


here’s the NRPN strings for the two examples in op (inc hex) (quoted for channel 1)

DEC: 176 99 1 - 176 98 76 - 176 6 0 - 176 38 44
HEX: B0 63 1 - B0 62 4C - B0 6 0 - B0 26 2C

DEC: 176 99 1 - 176 98 76 - 176 6 1 - 176 38 62
HEX: B0 63 1 - B0 62 4C - B0 6 1 - B0 26 3E

On the DN2 there is no longer fine control for that parameter - so fine ‘direct’ CC control on DN2 is not possible any longer, but NRPN is the same as it was on og !

CCs DO work on the DN1 - the order is crucial

Use 176 16 0 - 176 48 44

Use 176 16 0 - 176 48 44