This is not a GP issue, but with GP I was able to fix this in a rehearsal. This may help someone, as it took a while for this one to present itself.
I am very careful when switching rackspaces and variations to make sure that stuck notes are not possible by design. I use different rigs at home, live and backup. I develop on my home rig and move it to my live and backup rigs. The last gig I had a stuck note, this was in the middle of a medley, so it has a number of variation and rackspace changes during the song. Everything is loaded into the machine (predictive loading is off).
The day after the gig, I setup my backup rig and went through the wiring and switching of the medley within gig performer, testing every point purposely trying to get a note to stick and could not achieve it. The home rig also same result every time it tried I could not make a note stick. Last Sunday at rehearsal, I had a stuck note, I was using my live rig, so I sent the guys off for a coffee to be left in peace to dig into the problem.
The problem stems from my Roland FP10 which I use as my main 88 note master as it is using the PHA4 keybed. This entry level piano supports half pedaling (of sorts) when used with a Rolands DP10 foot pedal. The FP10 only gives three pedal points. The pedal supplied with the keyboard is a simple switch pedal, however when used with a switch pedal, the FP10 still provides the three pedal points. What happens is when you press the pedal you get CC#64 90 followed by CC#64 127 and when released you get CC#64 90 followed by CC#64 0. In essence this is not a problem, but the Arturia Jupiter 8 V4 plugin seems to ignore the second CC#64 value when they arrive very close together (the same timestamp in the MIDI monitor), leaving the last value as 90 or ON as it is greater than 64. I did manage to repeat this several times. The reason this had not been seen on the other rigs is the Kurzweil K2500 and the M-Audio KS 88, does not support half pedaling.
The fix was a quick scriptlet
// Remove half pedaling
var v : integer
On ControlChangeEvent(m : ControlChangeMessage) Matching 64
v = GetCCValue(m)
if v == 127 then
SendNow(m)
elsif v == 0 then
SendNow(m)
end
End
With this scriptlet in place I could no longer get a stuck note. They had not even finished the coffee! GP Script to the rescue and some seriously impressed band mates.