I need to crossfade between subsequent values of a Select Ugen, when the index changes.
So it is not like SelectX, where a crossfade is always between subsequent indices, but on change, one crossfades into the new value.
The solutions I’ve come up with fail badly when a change is faster than the crossfade, because the internal Selects switch in the middle of the transition.
Now the problem is that this is very inefficient by comparison. For what I do, it doesn’t work – it builds too slowly and eats too many cycles while running.
Another way might be to stick to the original crossfade idea, but use sample and hold on the index to choose a new index only when a crossfade has completed. This would essentially pause index changes during crossfades.
Best,
Paul
In terms of efficiency, I am still stuck. I think that a UGen more similar to Select that does the slewing internally, only for those values that are nonzero and does an internal mul/add might be worth a try.
what if for every change of index you start a new synth,
which only reads the new channel of interest and fades it in,
and fades out the previous one?
that would trade more language side administration for
much less server CPU load.
also, timing would be quantized to blocksize borders
(for the fadeout triggers at least, fadeins could use OffsetOut)
Normally, this would be the best! But in this case, I need to have the whole thing as a single UGen tree. A new UGen will be the best, I think, and generally useful as well.