VOICE_ALLOCATE is really just a way of saying "I
want this VVID
hooked up to a new voice - forget about whatever it was connected
to." You don't *have* to send one for every note, although you'll
probably want to, most of the time. It's a separate feature, and
doesn't imply anything about voice allocation; that's what I'm
actually trying to say.
So... Maybe we should actually just go back to the original idea of
"DETACH_VVID", but instead use it right before we want a VVID to be
attached to a new voice? (The original idea was to send a DETACH_VVID
"some time" after you're done with a voice.)
That way, the first Voice Control Change for a VVID implicitly and
"indirectly" causes voice allocation, as a result of no voice (or
some sort of marked fake voice - synth implementation dependent)
being attached to the VVID.
All this is ok in concept. I still think it is too implicit and it feels
'sneaky'. I'd MUCH rather see a rigid, well-defined protocol that forces the
few bizarre instruments to do a bit more work (really, just a BIT) than a
loose, implicit one that is going to be easy to screw up.
VOICE_ALLOCATE: declare a VID as in-use
VOICE_CONTROL_SET: set values for a per-voice control for a VID
VOICE_ON: declare that a VID is ready for play
Any VOICE_CONTROL_SET for a VID that does not exist is discarded.
I don't think there is any instrument for which this can't work. It may not
be a perfect fit for some, but I think they are the vast minority.
This model fits and doesn't taste too bad.