[linux-audio-dev] PTAF link and comments

David Olofson david at olofson.net
Wed Feb 5 14:29:01 UTC 2003


On Wednesday 05 February 2003 19.27, Tim Hockin wrote:
[...]
> A generic output is a plugin which wants to emit control data, but
> it doesn't know what it is connected to - might be pitchbend, might
> be oscillator shape, might be pan.  Generic outputs should emit
> normalized data 0.0-1.0.  To connect it to anything useful, you
> need to scale it by the targets true range.

Ok.


> It seems more obvious to me, though, that controls DO need to do
> bounds checking for their inputs, or the host needs to do
> snoop-and-fixup for every control.

Yeah, that's basically where I'm getting. I don't really like it, 
considering what it does to plugin code, but it's not *that* bad, and 
it makes life a lot easier. The cost of having hosts do it would be 
*much* higher, and you'd basically have to do it all the time, I 
think.


> > > So the way I see saving the state of a plugin:
> > >
> > > For each control
> > > 	save snooped control data to output (maybe XML)
> > > endfor
> > > if (plug->get_extra_state)
> > > 	d = plug->get_extra_state()
> > > 	save d as if it were a raw control
> > > endif
> >
> > Well, that eliminates the need for the in/out pair, which *is* a
> > special case after all.
>
> right, we only need to 'read' data we didn't write.

Actually, do we? Where would that data come from?

IIRC, we concluded that default values should be part of the metadata, 
rather than built into the plugin code. Motivation:

	* Having plugins load defaults at some point would
	  violate the semantics of inputs. Inputs should not
	  change their values spontaneously, but *only* as a
	  result of incoming CONTROL events.

	* Default values must be available to hosts, for
	  various reasons, so there must be a way to read
	  them no matter what. If plugins are supposed to
	  initialize their own inputs, that would mean that
	  1) they'd all be doing simple stuff that hosts
	  could handle easilly, and 2) there'd be code that
	  may have bugs that can take long to be noticed.


So, the host *would* have access to that data, no matter what. If it's 
really input data we're talking about, the plugin is not allowed to 
modify it, so the default, or whatever we write to the input applies 
- just as with any control input.

If it's output data, it's generated by the plugin, and all we can do 
is read it. Unless it's "custom" data that some other plugin 
understands, in's essentially useless, as we can't write it back. 

There *could* be an in/out pair though, so you could feed that data 
back into the plugin. That's a separate issue, and I'm not sure what 
purpose it would serve, or if it even makes sense at all.


Now, if this doesn't apply at all to the problems that you want to 
address with save_extra_state(), please expand. I *suspect* we're 
talking about two (or more) different features here.


> > However, how do you actually transfer the raw data through that
> > call? It's just not about a function call, but also about the
> > data transferred. We'll need an RT safe solution for the
> > controls. What to do here? Just assume that it's not RT safe?
> > (Which means you can't save states without taking plugins out of
> > the net, or requiring that they're thread safe WRT this call...)
>
> I'd assume this is NOT RT safe.  Don't save a preset while your
> track is running :)

I don't like that. It seems nasty to prevent people from saving their 
work without shutting down the whole engine for a moment. I'm 
strongly opposed to the idea of confusing audio time with musical 
time, and this is a typical example of assuming they're almost the 
same. Stopping the sequencer does *not* mean the audio engine stops. 
It *might* in some apps, but that's incompatible with what most users 
of "real" synths expect, and should not be enforced.


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