I’ll have a look, but should say that limiting the number of wire buffers isn’t the goal because @Spacechild1 wasn’t able to observe a performance hit.
I don’t really have time to count the wirebuffs, but I think it is better?
Ex1
(
d = SynthDef(\test, {
var n = 3;
var ctls = Array.fill(n, { |i|
[
("freq" ++ i).asSymbol.kr(110 * (i+1)),
("amp" ++ i).asSymbol.kr(1 / (i+1))
]
}).flop; // 'flop' puts all freqs in one subarray, amps in the other
var sig = SinOsc.ar(ctls[0]) * ctls[1];
Out.ar(0, sig.sum)
}).dumpUGens;
)
OLD
[ 0_Control, control, nil ]
[ 1_SinOsc, audio, [ 0_Control[0], 0.0 ] ]
[ 2_Control, control, nil ]
[ 3_Control, control, nil ]
[ 4_SinOsc, audio, [ 3_Control[0], 0.0 ] ]
[ 5_Control, control, nil ]
[ 6_*, audio, [ 4_SinOsc, 5_Control[0] ] ]
[ 7_MulAdd, audio, [ 1_SinOsc, 2_Control[0], 6_* ] ]
[ 8_Control, control, nil ]
[ 9_SinOsc, audio, [ 8_Control[0], 0.0 ] ]
[ 10_Control, control, nil ]
[ 11_MulAdd, audio, [ 9_SinOsc, 10_Control[0], 7_MulAdd ] ]
[ 12_Out, audio, [ 0, 11_MulAdd ] ]
NEW
[0_Control, control, [110]]
[1_SinOsc, audio, [0_Control[0], 0.0]]
[2_Control, control, [1.0]]
[3_*, audio, [1_SinOsc, 2_Control[0]]]
[4_Control, control, [220]]
[5_SinOsc, audio, [4_Control[0], 0.0]]
[6_Control, control, [0.5]]
[7_MulAdd, audio, [5_SinOsc, 6_Control[0], 3_*]]
[8_Control, control, [330]]
[9_SinOsc, audio, [8_Control[0], 0.0]]
[10_Control, control, [0.33333333333333]]
[11_MulAdd, audio, [9_SinOsc, 10_Control[0], 7_MulAdd]]
[12_Out, audio, [0, 11_MulAdd]]
Ex2
(
d = SynthDef(\test, {
var n = 3;
var freqs = Array.fill(n, { |i|
("freq" ++ i).asSymbol.kr(110 * (i+1))
});
var amps = Array.fill(n, { |i|
("amp" ++ i).asSymbol.kr(1 / (i+1))
});
var sines = SinOsc.ar(freqs);
var sig = sines * amps;
Out.ar(0, sig.sum)
}).dumpUGens;
)
OLD
[ 0_Control, control, nil ]
[ 1_SinOsc, audio, [ 0_Control[0], 0.0 ] ]
[ 2_Control, control, nil ]
[ 3_SinOsc, audio, [ 2_Control[0], 0.0 ] ]
[ 4_Control, control, nil ]
[ 5_SinOsc, audio, [ 4_Control[0], 0.0 ] ]
[ 6_Control, control, nil ]
[ 7_Control, control, nil ]
[ 8_*, audio, [ 3_SinOsc, 7_Control[0] ] ]
[ 9_MulAdd, audio, [ 1_SinOsc, 6_Control[0], 8_* ] ]
[ 10_Control, control, nil ]
[ 11_MulAdd, audio, [ 5_SinOsc, 10_Control[0], 9_MulAdd ] ]
[ 12_Out, audio, [ 0, 11_MulAdd ] ]
NEW
[0_Control, control, [110]]
[1_SinOsc, audio, [0_Control[0], 0.0]]
[2_Control, control, [1.0]]
[3_*, audio, [1_SinOsc, 2_Control[0]]]
[4_Control, control, [220]]
[5_SinOsc, audio, [4_Control[0], 0.0]]
[6_Control, control, [0.5]]
[7_MulAdd, audio, [5_SinOsc, 6_Control[0], 3_*]]
[8_Control, control, [330]]
[9_SinOsc, audio, [8_Control[0], 0.0]]
[10_Control, control, [0.33333333333333]]
[11_MulAdd, audio, [9_SinOsc, 10_Control[0], 7_MulAdd]]
[12_Out, audio, [0, 11_MulAdd]]