Hello Jordan,
you could try with some of my pseudo ugen extension classes from miSCellaneous_lib. I don’t know if it helps if the construction principles are somewhat hidden like here, at least they produce a lot of ugens and the dumps can be compared. Also, the input is easy to overlook. I’d be happy if you give it a try !
Especially the usage of Fb1, Fb1_ODE
and related is resulting in large SynthDef
s. E.g., with a blocksize of 64, this example from the Fb1
helpfile generates ca. 600 ugens (the number depends on the blocksize):
// OnePole is implemented by out(i) = ((1 - abs(coef)) * in(i)) + (coef * out(i-1))
// so it can be written with Fb1
y = { Fb1({ |in, out| (in[0] * 0.05) + (out[1] * 0.95) }, WhiteNoise.ar(0.3), leakDC: false) }.play
You could also check the DX suite helpfiles, e.g., here’s a comparison from the DXEnvGen
helpfile, Ex.4:
// As channel switching with DXEnvFan / DXFan is implemented by "watcher ugens",
// it becomes costly if the number of output channels increases (growth of quadratic order).
// The effort is lowered significantly if you pass a reserved bus for this or use DXEnvFanOut,
// this also concerns DXFan / DXFanOut.
(
// load with extended resources
s = Server.local;
Server.default = s;
s.options.numPrivateAudioBusChannels = 256;
s.options.memSize = 8192 * 4;
s.options.numWireBufs = 512;
s.reboot;
)
// on my machine this example needs ca. 2.5 % CPU (818 ugens) ...
(
x = {
DXEnvFan.ar(
Dshuf((0..29), inf),
size: 30,
fadeTime: 0.005
) * 0.25
}.play
)
x.release
// ... whereas this needs ca. 0.6 % CPU (167 ugens)
(
a = Bus.audio(s, 30);
x = {
DXEnvFan.ar(
Dshuf((0..29), inf),
size: 30,
fadeTime: 0.005,
bus: a
) * 0.25
}.play
)
x.release
(
a.free;
b.free;
)
// care has to be taken with buses and multichannel expansion:
// here two buses have to passed as otherwise we get a wrong result,
// the same bus would be taken for different calculations at the same time
(
a = Bus.audio(s, 8);
b = Bus.audio(s, 8);
{
Mix(DXEnvFan.ar(
[Dseq((0..7), inf), Dseq((7..0), inf)],
size: 8,
fadeTime: 0.01,
equalPower: 0,
bus: [a, b]
))
}.plot(0.1)
)
(
a.free;
b.free;
)