>What if we made it more of a broadcast. Have a way to have host or timeline
>global variables (which is what these are) which can be read by plugins.
>....
>Plugins are free to drop these global events. There is no function call
>overhead. The only overhead is the indirection of using a pointer to a
>global.
>
It seems like the transport framework would want to have an entire "transport state"
calculated for each frame. Why not include a copy of this record in the process()
function parameters? This makes it available in the process loop without a function
call and makes it thread-safe, right?
Tell me more about the plan for SEEKing (i.e. retarting playback in mid-sequence). As
already discussed, this is a big pain if you've got a droning pad sound that only has
a note-on every 8 measures.
I think it's too much to ask for plugin writers to manage seeking. Instead the
transport should do it by prerolling some distance at faster than realtime (playback
buffers are thrown away as they are generated).
I see 2 solutions, which can be combined:
1) user settable pre-roll. Set it to 0 for live applications; a few seconds
for normal use; and "from the top" when you must be sample-accurate.
2) cue points. When the user marks a cue point, the plugin must stream its
internal state (LFO values, sample offsets, etc) into a buffer. Then playback can
start immediately from this point later. Making changes to a plugin before the
cuepoint would invalidate the cuepoint. When starting playback from an invalid cue
point, the transport would have to pre-roll from the last valid cue point.
Of course this is no real solution for outboard synths.
(sorry if I'm restating the obvious.. I'm new to the list. Is there a "general
overview" of XAP? I couldn't find one at the web site.)
-Ben Loftis