[linux-audio-dev] anaheim

David Olofson david at olofson.net
Wed Jan 15 08:15:01 UTC 2003


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 ---



More information about the Linux-audio-dev mailing list