The reordering part is like this:
var sig = /* ... 12 channels of something... */;
var trig = /* ... something to trigger a reshuffle */;
var shuffler = Dseq([Dshuf((0..11), 1)], inf);
var order = Array.fill(12, {
Demand.kr(trig, 0, shuffler)
});
oscs = Select.ar(order, oscs);
Demo with panning the clumps across the field (use the mouse to isolate the clumps, and click to reorder):
(
a = {
var oscs = SinOsc.ar(220 * (1..12));
var trig = MouseButton.kr(lag: 0) + Impulse.kr(0);
var shuffler = Dseq([Dshuf((0..11), 1)], inf);
var order = Array.fill(12, {
Demand.kr(trig, 0, shuffler)
});
var x = MouseX.kr(0, 3);
var mask = Array.fill(4, { |i|
var theta = (x - i).clip(-1, 1) * 0.5pi;
cos(theta)
});
oscs = Select.ar(order, oscs).clump(3)
.collect(_.sum); // collapse 12 --> 4
oscs = Pan2.ar(oscs * mask, Array.series(4, -1, 2/3));
oscs.sum * 0.1
}.play;
)
hjh