quickly and maybe offensively: Max and Pd [dac~] can take non-contiguous outputs, which is very convenient for reassigning them as part of delivery of a piece for various soundcards and setups. I might want to use move my usual [dac~ 1 2 3 4 5 6] to [dac~ 11 12 13 1 15 16] for instance. the 1 in the middle is not a typo.
I was thinking of making an array for my outs but then I’m stuck as it seems I can’t pass an array to the bus out. What would be the most elegant way to achieve what I am trying to do in SC?
thanks.
You can do something like this:
s.options.numOutputBusChannels_(8)
SynthDef(\test, {|outs = #[0,1,2,3]|
var testSig = SinOsc.ar(110) * 0.1;
outs.collect{|n|Out.ar(n, testSig)}
}).add;
Synth(\test); // watch the meter
Synth(\test).free;
Synth(\test, [\outs, [2, 4, 5, 7]]) // watch the meter
Thanks for this. It would probably not work for me as I am creating a sum of many files and processes in my performance code which I send to a 5.1 bus (L-R-C-x-Ls-Rs) and that bus is the thing I need to rejig.
Here is some code trying to do it around your idea. There might be a more efficient way but that works so thanks!
s.options.numOutputBusChannels_(8)
s.reboot
SynthDef(\test, {arg outs = #[0,1,2,3,4,5];
var input = SinOsc.ar(110,mul: ((0..5) * -10).dbamp);
outs.collect{|j, i| Out.ar(j,input[i])};
}).add;
x = Synth(\test); // watch the meter - the amplitude helps to see what is where
x.free;
// another order
x = Synth(\test, [\outs, [3,2,4,5,1,0]]) // watch the meter
You can do this:
SynthDef(\test, {|outs = #[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(outs[i], surroundMockUp[i]) }
}).add
Synth(\test); // standard
÷Synth(\test, [\outs, [3,5,1,7,6]]); // new configuration
Well, basically the same thing…
1 Like
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
My planned approach is similar but with a single 6chan bus and only a re-router like your 2nd synth at the end of the chain, with a master volume and master urgent mute button 
thanks for it all I think there is a lot to solutions in this thread.