the number of output channels
the input signal
the pan position. Channels are evenly spaced over a
cyclic period of 2.0. the output channel position is
pos / 2 * numChannels + orient
. Thus, assuming an
orient
of 0.0
, and numChannels
being for example
3
, a pos
of 0*2.0/3 == 0.0
corresponds to the
first output channel, a pos
of 1*2.0/3
corresponds
to the second output channel, a pos
of 2*2.0/3=4.0/3
corresponds to the third and last output channel, and a
pos
of 3*2.0/3=2.0
completes the circle and wraps
again to the first channel. Using a bipolar pan
position, such as a sawtooth that ranges from -1 to +1,
all channels will be cyclically panned through. Must be
control rate.
a control rate level input (linear multiplier).
the width of the panning envelope. The default of 2.0 pans between pairs of adjacent speakers. Width values greater than two will spread the pan over greater numbers of speakers. Width values less than one will leave silent gaps between speakers.
the offset in the output channels regarding a pan
position of zero. Note that ScalaCollider uses a default
of zero which means that a pan pos of zero outputs the
signal exactly on the first output channel. This is
different in sclang where the default is 0.5 which means
that a pan position of zero will output the signal
between the first and second speaker. Accordingly, an
orient
of 1.0
would result in a channel offset of
one, where a pan position of zero would output the
signal exactly on the second output channel, and so
forth.
the number of output channels
the input signal
the pan position. Channels are evenly spaced over a
cyclic period of 2.0. the output channel position is
pos / 2 * numChannels + orient
. Thus, assuming an
orient
of 0.0
, and numChannels
being for example
3
, a pos
of 0*2.0/3 == 0.0
corresponds to the
first output channel, a pos
of 1*2.0/3
corresponds
to the second output channel, a pos
of 2*2.0/3=4.0/3
corresponds to the third and last output channel, and a
pos
of 3*2.0/3=2.0
completes the circle and wraps
again to the first channel. Using a bipolar pan
position, such as a sawtooth that ranges from -1 to +1,
all channels will be cyclically panned through. Must be
control rate.
a control rate level input (linear multiplier).
the width of the panning envelope. The default of 2.0 pans between pairs of adjacent speakers. Width values greater than two will spread the pan over greater numbers of speakers. Width values less than one will leave silent gaps between speakers.
the offset in the output channels regarding a pan
position of zero. Note that ScalaCollider uses a default
of zero which means that a pan pos of zero outputs the
signal exactly on the first output channel. This is
different in sclang where the default is 0.5 which means
that a pan position of zero will output the signal
between the first and second speaker. Accordingly, an
orient
of 1.0
would result in a channel offset of
one, where a pan position of zero would output the
signal exactly on the second output channel, and so
forth.
An azimuth-based panorama UGen. It uses vector-based-amplitude panning where the arbitrary number of speakers is supposed to be distributed in a circle with even spacing between them. It uses an equal-power-curve to transition between adjacent speakers. Note the different default value for the
orient
argument!Use case: To spread an multi-channel input signal across an output bus with a different number of channels, such that the first input channel is played on the first output channel (no spread to adjacent channels) and the last input channel is played to the last output channel (no spread to adjacent channels), you would create a dedicated
PanAz
per input channel where the pan position isinChanIdx * 2f / (inChannels - 1) * (outChannels - 1) / outChannels
.SplayAz
Pan2