On Thursday 06 February 2003 07.50, Tim Hockin wrote:
[...Paul's k5000...]
The top-of-chain plugin (synth) will tell you
when it is silent, of
course!
I think it can be a massive, coarse-grain optimization, if we can
make it work.
I think it'll be rather useless if done on the plugin level, with
synths and other devices with many audio ports. As soon as we start
talking about multitimbral/multichannel synths without internal FX,
we're talking about *trees*; not chains.
The reason I have it is that games and other
multimedia stuff should
be able to just set up all FX processing needed for the whole thing
and then not worry about it. You can have the full FX net for every
song in the game "running" at all times virtually without cost. The
plugins won't start burning CPU until you actually send some sound
their way, and they'll stop burning CPU as soon as their tails are
out.
Whether or not this is useful in your average studio is another
matter, but it does *work*.
Yes - based on my experiences of looking at (admittedly mainstreamish) music
done in modern Windows sequencers, the majority of the time, a significant
portion of the processing tree is not in use.
Now, based on recent arguments, I am rethinking my otiginal idea. I had
originally put this at the plugin granularity, then moved it to per-channel.
This may be Good Enough, but not The Best.
What I learned is that you can NEVER not call the run() method on a
processing pass. Event outputs, etc. mandate that you call run(). Now, if
the plugin knows it's input is silent, it can heavily optimize the run() if
it does not have anything to do.
I'm starting to lean more towards David's idea which is that a buffer also
has at least one flag - SILENT. All buffers start out silent (though they
should be zeroed, I think). If a plugin can optimize in the face of silent
buffers, it should. We should heavily recommend this, and code all examples
to do this.
This gives plugins a lot of granularity, and a lot of responsibility.
However, it is easy to do, and doesn't require the host to participate at
all.
Tim