On Wednesday 15 January 2003 11.56, Tim Hockin wrote:
[...]
//FIXME: some big ones are missing: VVID, Channel,
EventQueue,
Tick, // Cuepoint
From the web site:
"* EventQueue
A control input or output. Plugins may internally have as many
EventQueues as they deem necessary. The Host will ask the
Plugin for the EventQueue for each Control.
FIXME: what is the full list of things that have a queue?
Controls, Plugin(master), each Channel?"
Considering the way outputs are connected (<queue, cookie>), I think
we can safely say that outputs will *not* have EventQueues by
definition. (Plugins may use EventQueues internally for various
stuff, though, but that has very little to do with the API. See it as
a bonus service that any host will provide.)
Further (my additions):
"* VVID
Virtual Voice ID. Part of a system that allows sequencers and
the like to control synth Voices without having detailed
knowledge of how the synth manages Voices.
* Channel
A grouping of Controls and Ports, similar to MIDI Channels."
Suggestions for the remaining two:
* Tick
The unit of musical time, used with the tempo and
meter interfaces. The unit is decided by the
maintainer of the timeline, in order to keep musical
time calculations exact as far as possible.
* Cue Point
A virtual marker on the musical time line, marking a
position to which the plugin should be able to jump
at any time, without delay. This is used by hard disk
recorders, and other plugins that may need to perform
time consuming and/or nondeterministic processing as
a result of timeline jumps.
Overview
[...]
XAP plugins are always in one of two states - ACTIVE
or INACTIVE.
Hopefully, this will be sufficient. :-)
[...]
Controls
----
XAP uses Controls as abstract carriers of Plugin parameters and
other information. Controls are the way Events are transferred.
Not the other way around...? ;-)
[...]
Control: CUEPOINT
<DESIGN>
Just a thought: Maybe cue points should have a duration argument? (So
you can ensure that any point within the range is "safe" for instant
jumping.)
</DESIGN>
[...]
//FIXME: Voices and VVIDS
Well, the most interesting features that are more or less decided on
would be:
* Voice addressing separated from pitch control.
* We have Voice Controls! :-)
(I would also like to add "Note->note transitions can be controlled
explicitly, even with polyphonic synths" - but someone still isn't
getting the point. ;-)
//FIXME: Event types?
There aren't many that aren't basically control events. Float
controls have RAMP and SET events. (BTW, I realized that STOP events
are also useful when dealing with low accuracy control formats - as
in the 16:16 fixed point I'm still using in Audiality... *heh*)
I think it's sufficient to mention that we have events for setting
and ramping controls, and that most interfaces are based on controls.
//FIXME: Control types?
float32, int32, string, data and double. (Though double might be a
special case, since it's only used for the tempo/meter interface, and
thus, doesn't do ramping, despite being an fp format.)
//FIXME: Host call backs
Maybe listing the services provided would be more interesting than a
bunch of function calls?
//FIXME: Time conversion
The full all<->all matrix, basically, although the trivial ones won't
be implemented by the host and/or timeline managers, but rather by
the plugin SDK.
//FIXME: Threading
Well, anything that loads sounds from disk and stuff like that will
need basic "background worker callbacks", but actual threading is
probably best left to future versions. Use pthreads for now, if you
really have to.
<DESIGN>
I just don't think an async callback API is complex enough to
motivate lots of plugins dragging in pthreads and potentially doing
weird things with some hosts for non-obvious reasons. You don't
really have to implement them as asynchronous in hosts if you don't
care about glitch free playback while loading patches.
</DESIGN>
//FIXME: RT
We have some hints for that, right? It might be interesting to point
out that XAP plugins can mark controls as being "RT safe" or not, or
whatever we came up with.
//FIXME: Channels
As I wrote on the site: "A grouping of Controls and Ports, similar to
MIDI Channels." I don't think we can be more specific right now. :-)
//FIXME: MIDI
"It will be possible to map MIDI events to XAP events in
useful ways, but this is more a matter of coverter
implementation than API design. XAP is designed from the
ground up as a software synth API for current and future
workstation hardware, and as such, is not based on legacy
wire protocols and the like."
Or something slightly less harch and MIDI hostile, maybe. ;-)
//David Olofson - Programmer, Composer, Open Source Advocate
.- The Return of Audiality! --------------------------------.
| Free/Open Source Audio Engine for use in Games or Studio. |
| RT and off-line synth. Scripting. Sample accurate timing. |
`--------------------------->
http://olofson.net/audiality -'
---
http://olofson.net ---
http://www.reologica.se ---