Is it possible for Out.ar to output to non-contiguous outputs

You would probably want to use busses rather than doing everything inside the same SynthDef. I have not worked with surround sounds myself. You might wanna take a lot at the Ambisonic Toolkit. Here is solution with standard Ugens I think should work, kind of like a half-normal patch bay.

~surroundbus = 5.collect{Bus.audio(s, 1)}

(
SynthDef(\surroundSig, {|bus = #[0,1,2,3,4]|
	var surroundMockUp = 5.collect{|i|SinOsc.ar(110 * (i + 1)) * 1/(i+1) * 0.1};
	5.collect{|i|Out.ar(bus[i], surroundMockUp[i])}
}).add;

SynthDef(\out, {|in = #[0,1,2,3,4], routing = #[0,1,2,3,4]|
	routing.collect{|n, i|Out.ar(n, In.ar(in[i]))};
}).add;
)

x = Synth(\surroundSig, [\bus, ~surroundbus]);
y = Synth(\out, [\in, ~surroundbus], addAction: \addToTail);

y.set(\routing, [3,5,6,7,1]); // change routing
1 Like