continuous note on a particular VVID. The sequencer
only reuses a VVID once
it has ended any previous notes on that VVID. The sequencer can allocate a
This is the current issue at hand - just because the sequencer has ended a
VVID with a voice-off, doesn't mean the voice is off. It just begins the
release phase of the envelope, on some synths. This could take a while.
Either you need to NEVER re-use a VVID, or you need to tell the host when an
ended VVID is actually re-usable. Or you need to have voice-ids allocated
by the plugin, and NOT the host, which I like more.
My underlying assumptions are:
I made a post a while back defining all the XAP terminology to date. Read
it if you haven't - it is useful :)
-DEFINITION: the individual voices produce finite
periods of sound which we
call notes. A note is the sound that a voice makes between a Voice-On event
and a Voice-Off event (provided that the voice is not reappropriated in the
middle to make a different note)
We've been avoiding the word 'note' because it is too specific. The
lifetime of voice is either finite or open-ended. A synth would be
open-ended. A gong hit would be finite.
-HOWEVER- there is no rule that a note has any pitch
or velocity or any
other particular parameter, it is just that the Voice-On tells the voice to
start making sound and the Voice-Off tells the voice to stop making sound.
Correct. Though David is half-heartedly arguing that maybe Velocity is the
true note-on. I disagree.
-ALSO HOWEVER- the entity which sends voice-on and off
messages may not
directly refer to the object's voices. Instead, the event sender puts
..in the currently understood VVID model.
voices to do. This differential is in place because
sequencers typically
send more concurrent notes than the plugin has actual voices for AND the
On the contrary, hopefully you will rarely exceed the max polyphony for each
instrument.
other words, it is the role of the plugin to decide
whether or not to steal
I believe you should always steal notes, but I suppose there will be some
instrument plugin some lunatic on here will devise that does not follow
that. Newer notes are always more important than older notes, but if you
exceed max poly, a red light should go off!
(1)send voice-on event at timestamp X. This indicates
a note is to start.
(2)send parameter-set events also at timestamp X, these are guaranteed to
This is also for debate - David dislikes (and I agree) the notion that you
have to send a note-on but the plugin does not have enough info to handle
(for example) a velocity-mapped sampler until later. Process events in
order. So a few ideas are on the table.
(4)send voice-off event at later time to end the note
and free the voice.
And what of step-sequencing, where you send a note-on and never a note-off?
Finite duration voices (samples, drum hits, etc) end spontaneously. Does
the plugin tell the host about it, or just let the VVID leak?
When the plugin reads the voice-on event at timestamp
X it decides whether
to allocate a voice or not. If it has an initialization routine for voice-on
events, then the plugin must read through the remaining events with
timestamp X to get initialization arguments. The plugin must delay actually
I guess it may not be tooo bad. Plugins which need some init info (such as
velocity for the velo-map) know they need this, and can look for that info.
Other plugins for whom an init event is no different than a continuous event
just go about their merry way.
But before we all decide this, I want to explore other notions. I'm not
saying my negative Voice-ID thing is great, but I rather like the idea that
Voice-Ids mean something and are almost purely the domain of the plugin.
Tim