Shuffling an Array of Audio on Demand

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

2 Likes