I initially thought this is more complicated than it needs to be, but by the end of this post I realised there were a few ways to skin this cat - here's what I initially thought you would do:
Option 1:
Inside s.reboot {
s.options.numOutputBusChannels = 16;
Then inside s.waitForBoot
:
// leave this at 2 (stereo channel per orbit)
~dirt = SuperDirt(2, s); // two output channels, increase if you want to pan across more channels
...
~dirt.start(57120, [0, 2, 4, 6, 8, 10, 12, 14] ); // start listening on port 57120, create 8 stereo busses
then you have # orbit 0..7
each with a stereo pair of speakers (use # pan [0|1]
to access individual speakers.
Option 2:
realistically, another option would be to make each orbit a single speaker, might look like:
leave sc output channels at 16 -> inside s.waitForBoot
:
~dirt = SuperDirt(1, s); // mono output channel
...
~dirt.start(57120, [0,1, 2,3, 4,5, 6,7, 8,9, 10,11, 12,13, 14,15] ); // start listening on port 57120, create 16 mono busses
Then you use # orbit 0..15
to access each individual speaker, # pan
does nothing
Option 3:
then of course you could use a single orbit with 16 speakers which is what I think you've proposed. sc output channels stay at 16 -> inside s.waitForBoot
:
~dirt = SuperDirt(16, s); // 16ch output
...
~dirt.start(57120, [0] ); // start listening on port 57120, create 16 mono busses
Then you use # orbit 0
to access the bank of speakers, and use divisions of 1/16 in # pan
to access each individual speaker
Disclaimer: all of this is wholly untested - without knowing exactly what your plan is,it's hard to say which would work best but I feel like option 3 might be most flexible (I'm not sure if you can specify a pattern to play on multiple orbits for example, which you'd need to pan smoothly I think)