We are generally familiar with the concept of momentary switches, vs switches that have state and send their state over MIDI. Gig Performer supports this well with Widgets. Using GPScript, we can get the MIDI messages from the various controls and handle things as best we can.
But what about plugins that design their Parameters and MIDI responses based on what they expect from hardware? If we use Gig Performer to connect Pedal A to a Parameter in Plugin B, things work as the plugin designer intended. But what about when we want to use GPScript to control that Plugin?
Today, we can send a Note On event at some point in time, followed by a Note Off event at some later point in time. This emulates a person playing a key. Unless I’m mistaken, we don’t have a similar function for emulating a temporary button (CC) press.
Note that if we send a value of 1.0, immediately followed by a value of 0.0, these plugins are unlikely to respond, since they’ve likely included a de-bounce feature for handling noisy physical inputs.
Here’s a simple example with MSuperLooper. It has a Reset All function. Ideally, I would send 1.0, it would do its reset and return 0.0 when completed. Nah. It expects that you pressed a physical pedal, then took your foot off the pedal, sending the 0.0 yourself. So the parameter and Widget stay stuck On. Send 1.0 a bit later to the Plugin and it doesn’t do the reset. It’s internal state is already at 1.0, so there’s no change to respond to. It’s still waiting for you to release the “pedal” from the first time you pressed it.
One workaround might be for me to send some random MIDI Note On message from my script, with a following Note Off message. I could have a pair of radio buttons respond to Note On and Off, and one would be tied to the Plugin parameter. It’s a kludge, but it should work.
Any other solutions with the current feature set?
A feature that allows CC values to be sent later would do the trick, but that feature doesn’t appear to exist today. I could set a timer and get a callback, but I don’t see that either. I’m not running the play head, but there might be something there.
Any suggestions for immediate workarounds are appreciated!