I'm writing software for controlling Live 7 through a custom hardware interface. I've run into a bump: Live does not send the a note-off message for a clip that is pending launch if it ends up not actually launching. Let me give you an example of why this would be a problem:
Three clips – A, B, and C – on the same track are assigned via MIDI to buttons 1, 2, and 3, respectively, on my controller.
I press button 1 and clip A starts playing immediately, since playback was stopped. Live then sends MIDI note-on with velocity of 126 (clip is going to launch) followed by note-on with velocity 127 (clip is on) to my controller via the note assigned to the button (it doesn't matter which note, Live gives a note to each button).
Then I press button 2, and clip B is preparing to launch. There are still a few beats before it launches, but before it does, I press button 3 and then clip C is preparing to launch. After playback reaches the next bar, clip C launches. Clip B never launched.
This is where there is trouble. I get note-on with velocity 126 for button 2 after pressing it, and then I get note-on with velocity 126 for button 3 after pressing that one. Once clip C (button 3) launches, I get note-on with velocity 127 for it.
Where is the problem here?
Consider if my controller has three lights per button/clip: red for off, yellow for preparing to launch, and green for playing. If I do what I did above, button 2 (clip B) will stay yellow and never turn green or back to red, because it never gets a note-off. Only button 1 (clip A) gets a note off; button 3 gets a new note with velocity 127 because it successfully launched, so you can figure out when to change its status. But button 2 never gets any sort of status update after clip C (button 3) was made to launch instead.
This might sound like a far-fetched situation, but really, if you have a custom controller and you're triggering clips with it and expecting visual feedback, this will happen constantly. I'm looking at a lot of "yellow" lights on my control board right now. You could say "so don't use velocity 126/pending clip status events" but then why does Live offer that pending/going-to-launch status functionality to begin with, if it's (from what I can tell, anyway) apparently useless?
How does the monodeck work with it like this? Am I missing something here? Did Live have a feature regression, or has it always been like this?