dandrew
2020-02-02 04:08:59
Greetings,
I have an use case that I’d like to explore to create for a Preset and Translators.
Part of what I’m trying to get around is the midi specification which expects a Program Changes to be one shot value from a switch or button. Instead I'd like to leverage existing faders to initiate the Program changes.
It seems like a common ask.
Before the Program Change I will need to choose a destination Bank Select (MSB /LSB) like this:
|-MSB--||--LSB--||--PC--|
B0 00 22 B0 20 08 C0 {nn} ; Midi Ch. 1 Bank MSB set to 22h and LSB set to 08 followed by PC <fader>.
Instead of "nn" being a static value, I’d like to dynamically set the value of “nn” via a fader (0-127) from one or more faders as needed. At the moment the fader controller midi implementation only permits Patch Changes to be transmitted via a button. A button may only have one value per patch change.
The outcome I’m looking to do assign the fader to permit variable patch changes instead. That way the fader can “sweep or increment/decrement” through the selected Bank to audition each patch one by one.
In the event that the fader is to fine, using two faders is not out of the question. Splitting the first 0-64 program change values fader1 might provide a bit more granularity. Fader2 could be assigned to 65-127 if needed.
What I’ve read so far is that a Program Change messages must come “after” a valid Bank Select message is issued, then a patch change value will be honored or actually made. Does it matter if an intervening unrelated Channel Message appears after the Bank Select and before the Patch Change is issued?
I'm wondering if its safer to include the Bank Select Bytes every time a Program change is transmitted from the fader. If so, each patch change string will require “six+1” preceding bytes to first before the data value.
Ultimately, I’d like to commit one or more faders to an individual midi channel to effect bank/program changes per channel. If necessary, controller buttons could also be used set the Banks (CC0 and CC32) before an associated fader moves.
Would appreciate any guidance on structuring the preset, translators and any rule gymnastics to exercise the proof of concept.
There are other possibilities I can be imagine with MTP. Like assigning two buttons, one to increment the Program Change value while the other button decrements the program change value.
I'd like to explore both approaches for cases where a fader is not available on the control surface.
Gratefully, Dan