On Monday 03 February 2003 16.42, Steve Harris wrote:
On Mon, Feb 03, 2003 at 04:12:19 +0200, Sami P Perttu
wrote:
I think this is bad. There should be just one
process() function,
which could be given two gain values, one for previous output and
another for the plugin's own output. Plugins would do
out[i] = previous_gain * out[i] + gain * myoutput;
David is about to say non-mixing process() is a performance hack
;),
Well, it is for chains of inserts among other things.
but allways using this adds too much cost to fast
plugins.
Yeah, that's what I thought at first. However, if you track the
previous_gain and gain controls, you can select between a number of
optimized inner loops internally. What you get is basically the same
thing as a bunch of different callbacks, except that it's not part of
the API, and plugins can handle it any way they like.
Oh, you *do* have to check the control events for those two controls,
of course.
That said, I still think it seems easier to just provide a few
different callbacks of which plugin authors can pick one or more. A
fully optimized plugin would implement all of them, but you'll get
away with just one. It's not as flexible, but all the complexity is
in the host SDK; all you have to do in the plugins is copy/paste some
code. (Which I don't like of course, but really; if you want to
optimize, there's no other way, unless source level macro abuse
counts...)
//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 ---