On Monday 03 February 2003 15.12, Sami P Perttu wrote:
On Mon, 3 Feb 2003, David Olofson wrote:
As a
plugin author, having to implement
both is a pain. I use code generation to make both functions.
You don't necessarily *have* to implement both. Even the
primitive FX plugin API of Audiality have these variants:
void (*process)(struct ADY_plugin *p,
int *buf, unsigned frames);
void (*process_r)(struct ADY_plugin *p,
int *in, int *out, unsigned frames);
void (*process_m)(struct ADY_plugin *p,
int *in, int *out, unsigned frames);
...and you only *have* to provide *one* - any variant will do. If
you don't provide all of them, the host "SDK" will emulate the
others using the ones that are provided.
I think this is bad.
It's a primitive performance hack. Once upon a time, these things
actually mattered... ;-)
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;
When previous gain is zero this is almost equivalent to replace
except that NANs and maybe some other values will screw you.
Solution: forbid NANs as output and maybe cleanse buffers
periodically. And initially, of course.
Well, that cover's all the cases, and you *can* still optimize with
alternative inner loops if you like. Just check for 0.0 gains - but
remember that the gain controls will most probably be normal *ramped*
controls, so you can't just check the initial value.
Looks like a great idea.
As to NANs, I think you're pretty screwed if you get them in an audio
stream anyway. Plugins that generate NANs are broken, as are hosts
that allow plugins to operate on garbage buffers.
//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 ---