The Official Sequential/Oberheim Forum

SEQUENTIAL/DSI => Prophet => Prophet Rev2 => Topic started by: adamdyent on May 18, 2018, 06:04:54 AM

Title: NRPN set up
Post by: adamdyent on May 18, 2018, 06:04:54 AM
can anyone explain to me how to set up NRPN changes via MIDI? The manual is a bit confusing with the LSB and MSB explanations.
Title: Re: NRPN set up
Post by: dp on May 18, 2018, 08:56:42 AM

I might be wondering the same thing as you ... found this when searching.

So are you trying to change (in real-time) settings, both Program and Global, via sending MIDI from your computer? If so what applications are you going to use to send them? I'm hoping to do this via MaxForLive and/or (Abelton) LIVE. But surely in a "performance setting" if you will.

So if yes, I second the need for help!

Thanks
Title: Re: NRPN set up
Post by: adamdyent on May 18, 2018, 10:42:22 AM
im wanting to send CC messages from an octatrack because it will only send CC. NRPN will be better and more accurate for the Prophet
Title: Re: NRPN set up
Post by: shiihs on May 19, 2018, 11:14:15 AM
im wanting to send CC messages from an octatrack because it will only send CC. NRPN will be better and more accurate for the Prophet

tl;dr: You can send a single value to a single NRPN using four CC messages: send NRPN msb to controller 98, send NRPN LSB to controller 99, send data value MSB to controller 6, send data value LSB to controller 38.

I cannot tell you how to do it using an octatrack as I have no experience with it, but I thought you might enjoy some explanation anyway (if not, don't read it :) ).

In MIDI one sends commands and data values. Commands are things like "Note On", "Control Change", ... Values are things like the note number for a Note On command.

A limitation of the MIDI protocol is that one can send only data values from 0-127 because any number bigger than 127 is reserved to indicate a command.

Because people frequently want to send numbers bigger than 127 (because they want better resolution), numbers that can become bigger than 127 are mathematically cut up into smaller numbers in such a way that the synth can recombine them into the original bigger number later on.

The way to split up numbers into smaller numbers is by doing manipulations on the binary representation of the number.
A number is transformed into a "Most Significant Byte" (MSB) and a "Least Significant Byte" (LSB) according to some recipe that in the synthesizer can be reversed to get the original number back.

The recipe to cut up a number into an MSB and an LSB is as follows:

If the original number is called "value", then
MSB = value >> 7 (where >> denotes bit-shifting)
LSB = value & 127 (where & denotes bit-wise and)

Here's what you'd have to send to set NRPN 2053 (OSC 2 freq on layer B) to value 64:

First we calculate the MSB and LSB of 2053 (=NRPN number):
nrpn MSB: 2053 >> 7 = 16;
nrpn LSB: 2053 & 127 = 5

Then we calculate the MSB and LSB of 64 (= desired value):
value MSB: 64 >> 7 = 0;
value LSB: 64 & 127 = 64

If you have no idea how to calculate e.g. 2053 >> 7, you can use an online calculator, e.g.
the following one works: https://www.wolframalpha.com/

Depending on what environment you use to send these values you may need to add extra numbers
to make the synth understand what you are doing.

If you have a program that supports sending NRPN, probably all you need to enter is
2053 for the nprn number and 64 for the value.

If you have a program that supports sending midi control changes, you have to send four control changes:
to controller 98, send the MSB of the NRPN
to controller 99, send the LSB of the NRPN
to controller 6, send the MSB of the data value
to controller 38, send the LSB of the data value

If you send these messages from a programming language that has no libraries to work with midi, you
will need to build up a complete valid MIDI message, but as it involves a lot of extra explanation,
let's wait to see if you need it ;)