Allow Photon to map to midi program changes

I’ve been looking at controlling Photon using a midi foot controller. A lot of them don’t send midi Note on/off or CC on/off messages but do send Program Change messages. Although I did find some foot controllers that should work Photon would more versatile if the midi mapping could include Program Change messages.

Although I’m guessing to implement Program Changes you would need the “latch” button function as @mchrysoc had suggested which would keep the preset “on” until another “latch” button or blackout is pressed.

@DavidO Are you saying that if I used MIDI Note messages instead of Program Changes (like I’m doing now), I wouldn’t need to enable each Live Screen button as a “latch” which results in every button being “on” after a set?

I’m not sure how you’re getting Photon to use Program Changes. The way I read the documentation and from my experience Photon only responds to Note On/Off or CC events. What Program Change events are you sending and what midi channel are you sending it on?

Although Photon sees a Program Change event when I send it from an external device and I can map the event to a preset, nothing happens when I trigger the event.

In the midi status window it shows Photon knows a Program Change event was sent but with a velocity of 0 which is misleading because a Program Change event has no velocity byte.

Right now there is no Latch function for presets that I know of, only Toggle on/off or momentary. A Latch function would automatically turn off any previous Latched preset when it initiates a new Latched preset

@DavidO You are right, I misspoke. I’m using CC messages on channel 1 with velocity 127 to “turn on” the Preset and Sequence buttons on my Live screen (they are set as Flash). As I trigger other buttons on the Live screen they also turn on and the last one triggered is the one that is “active” (even though every button that was activated remains lit). The only way to “turn off” the buttons on the Live Screen is to send another matching CC message on channel 1 with velocity 0. I have an “all MIDI buttons off” global message that sends a velocity=0 to every button with about 500ms delay in between (14 separate ones) to clear the screen.

@mchrysoc - thanks for the update. To answer your original question, the implementation of Program Change events and/or the implementation of a Latch button function would fix your issue. There needs to be a way to turn off a previous preset when a new one is activated. Currently you have to implement it from your source.

Thank you for this ideas.

Do you think that an implementation of the program patch event can be an intuitive solution ?
If I understand well, for example you are thinking of something is going to activate only buttons concerned by the program patch 1 and deactivate all others buttons concerned by others program patch ?
Is it a good solution ? Others users will understand this behavior ?

We could add this « Program Patch » behavior in photon and detail the documentation with :

Note On : activate a button or set a fader to 100%
Note Off : deactivate a button or set a fader to 0%
Continuous Controller : activate (velocity > 50%) or deactivate (velocity < 50%) a button or set fader according to the velocity
Program Patch : activate buttons and faders concerned by the program number, deactivate all others buttons and faders mapped with others programs.

Yes, I think users will understand this behavior. IMO It’s really just an expanded form of the Toggle button behavior.

There are two issues here. One is a new button Trigger mode (which could be named Latch or Solo) and the other is the midi implementation.

  1. Trigger mode ( Latch or Solo ) - the term Latch is normally used in the midi world whereas Solo is used more in the audio world. It’s similar to the Toggle mode where the 1st press turns on the button and the 2nd press turns it off. Except in this mode the 1st press of a Latch/Solo button turns it on and it stays on until any other Latch/Solo button is pressed.

The only caveat would be the behavior when the same button in this mode is pressed a 2nd time. Using the strict definition above a 2nd press of the same button would turn it off and immediately turn it back on, but this behavior may not be desirable. I would implement this event like a toggle (a 2nd press of the same button will turn it off)

  1. Midi implementation - In the midi world this Latch/Solo behavior is normally implemented using the Program Change event but it could be done using midi notes or CC events. For a Program Change event you only have the Program number. For Note On/Off or CC I would only respond to whatever is defined as a Note On or CC On event and ignore Note Off or CC Off events.

Applying this to the Live Dashboard. 1st press of any Latched preset would turn it on and it would stay on until another Latched preset is pressed. If you pressed the same preset again the preset would turn off.

Applying this to midi foot controllers that only send Program Change events. 1st press of any foot button mapped to Latch preset would turn it on and it would stay on until another foot button is pressed. If you pressed the same foot button twice the preset would turn off.

Applying this to a midi foot controller that only sends momentary Note on/off or CC events. The Note ON or CC On event would turn on the mapped Latched preset and it would stay on until another foot button is pressed. If you pressed the same foot button twice the preset would turn off.

Is my explanation understandable?