Learning MIDI Program Change w/ Workspace Presets

I’m unable to get MIDI program changes recognized w/ workspace presets. I’m able to do it with MIDI notes. What am I missing?

What I would like to do: Trigger presets by pressing pgm chg and then selecting program on my MIDI controller.

What I’ve tried is triggering the preset, selecting it in the preset list and am presented with a boolean data receiver. Then midi is detected and “PgmChange Ch. 15 pgm 1” is seen and mapped to the preset. But I believe that the data, ‘CE 01’ etc has to be evaluated which the boolean receiver won’t do.

I’m unable to figure out if I should toggle on input or not. And if so, the available input range for threshold is 0 to 1, so what would the value be for the bytes 01, 02, etc.

For MIDI notes that work, the boolean data receiver acts on /MIDI/ch. 15/note [4] and so forth. But th Program messages it receives are /MIDI/ch. 15/pgm.chg. which does not appear to specify data.

Any pointers appreciated!

What does Protokol say about your messages? What controller are you using?

https://hexler.net/protokol

Thanks

Thanks for responding.

The MIDI Controller is Apple MainStage hosted on another computer using Apple CoreMIDI over Apple’s implementation of MIDI Networking. VDMX is on another Apple Mac and has the proper MIDI device (Apple CoreMIDI) select and is able to receive MIDI as shown by the VDMMX “Comm Display” plugin.

The VDMX Comm Display shows, “PgmChange, ch.15 pgm.1” as desired.
Further, Snoize MIDI Monitor shows the proper source, Message type, channel and data: “Program, 15, CE 01”

So I’m pretty sure MIDI is working exactly as expected. VDMX is also learning and working with other MIDI data, such as ‘Notes’.

So this bring us to the Workspace Inspector Preset list. When a preset is created, selected and triggered, the UI Inspector is available and provides a Boolean Data receiver. On “Detect MIDI” and sending the Pgm Chg MIDI to VDMX, the Boolean receiver learns “/MIDI/ch. 15/pgm.chg.” (copy/pasted from the boolean receiver). Now it is important to know that I’ve also updated the preset after learning, because changing presets will lose changes unless updated.

So so far so good - and this also works identically for MIDI notes, which are learned as, “/MIDI/ch. 15/note [2]”.

The problem is that subsequent Pgm Chg messages do not trigger the associated preset as would be expected. If I map those Pgm Chg messages to a MIDI Note (I also have a MIDI translator on the VDMX host), things work.

That is VDMX will respond to either Note or Control messages so long as those control messages (lik pgm chg) are converted to a note before VDMX gets it.

If I take a look at the Data Source Mapper, MIDI is listed, Ch 15 is listed and “Pgm. Chg” is listed but shows “???”. When MIDI notes are used, the Data Source Mapper also shows, “note[1] ???” but they do work.

As I think about this, I haven’t started with a new project yet - maybe something got corrupted. Also, this is for VDMX 5 in case there is a new version. I bought it a few years back, maybe I should also updated it.

Edit: b8805, 8809 is latest; a new project also behaves exactly the same: Ignores pgm change, but notes work as expected.

Edit: I think I see what is going on. As suspected in my OP, the boolean receiver toggles on input. But the input for program changes is 0x01, 0x02 and so forth. What is the threshold for ‘1’ in a range of 0 to 1?

Edit: I can sort of get it to work. So MIDI Pgm Chg. is a byte per MIDI spec, “Program Change: The Program Change message is used to specify the type of instrument which should be used to play sounds on a given Channel. This message needs only one data byte which specifies the new program number.” So the ranges are 0x00 to 0x0f. But I have no clue what the scaling is for the VDMX recevier. Googling to try and figure out rise/fall thresholds.

Any thoughts appreciated!

Can you share your vdmx project and capture a video of how you are triggering the midi note?

As for network, I prefer OSC which is pretty easy to send over network with Osculator or another MIDI to OSC converter.

So I’ve played around enough to be certain that I’m failing to understand the boolean receiver semantics, in particular how the thresholding works or VDMX doesn’t support Pgm Chg messages.

Here is a link to a video of what is happening. It is plain to see the Pgm Chg messages landing in VDMX which then responds, but responds incorrectly because the messages contain a single byte of data. I also observe that the range of the byte is 0x00 to 0x7f which makes it 0 to 127 decimal. So maybe a signed byte.

So what on earth does 0 to 127 map to on a boolean receiver threshold of 0 to 1? Assuming (0,1) is the domain of all possible values (0,127) are we looking at each hex number equating to +0.007874? Obviously if we are having to think that way, I’m misunderstanding what one would expect of such functionality as implemented by VDMX.

Look at the comm display, the pgm chg index 0,1,2 and the boolean receiver received value.