Mixing and Panning in MC
Mixing Multichannel Signals
The primary tool for mixing multichannel audio signals is the mc.mixdown~ object. This object mixes inputs in a multichannel signal connected to its left inlet to an output multichannel signal, optionally using pan information provided in its right inlet.
You can use mc.list~ to define static pan positions for each incoming audio channel. If fewer pan positions are provided than audio channels, the pan positions will be replicated as necessary.
For dynamic panning, you can use any multichannel signal for the pan input of the mc.mixdown~ object. For example, we can use an mc.sig~ object with the message to create a set of values for channel panning.
Using oscillators for the panning position allows you to create evolving results with only a few objects.
Understanding Panning Modes
There are four panning modes available when using the mc.mixdown~ object: Mode 0 (Circular Panning), Mode 1 (Line Panning, ranged 0-1), Mode 2 (Line Panning, ranged 1-N) and Mode 3 (Circular Panning, ranged 0-N). Each uses a different method of determining where the outputs are located in relation to the number range available for panning.
Mode 0: Circular Panning (0-1)
The pan position is a value between 0.0 and 1.0, and represents an even-power pan within a circular configuration of channels spread evenly across that range. For example, a two channel configuration has the two outputs at pan position 0.25 and 0.75.
Why not 0.0 and 1.0? Because 0.5 should represent a value evenly placed between the two channels, and 0.0 should also be halfway between the two channels - as if they were in a circle.
As you can see from the following diagram, if there are three outputs, they will be located at .167, .5 and .833.
Likewise, if there are four outputs, they will be located at 0.125, 0.375, 0.625 and 0.875.
To determine the pan position of any single channel in a mc.mixdown~ scenario, divide 1.0 by the number of channels times 2, then use the odd-numbered values produced. For example, if you have 5 output channels, the pan positions for the outputs will be:
Calculate 1.0 / (5 channels * 2) = 0.1
The five output channels are 0.1, 0.3, 0.5, 0.7 and 0.9
Mode 1: Line Panning (0-1)
In this mode, the pan position is a value between 0.0 and 1.0, and represents an even-power pan across a linear configuration of channels spread evenly across that range, but with the first and last locations at positions 0.0 and 1.0.
This mode can be somewhat more easily understood, but the values are also clamped to the range of 0.0 to 1.0. If we have three outputs, their locations are at 0.0, 0.5 and 1.0:
A four-output configuration would have the output locations at 0.0, 0.33, 0.66 and 1.0:
Mode 2: Line Ranging (1-N)
Panning mode 2 is similar to mode 1, in that the values are placed on across a linear path with the values at the extreme ends. However, in this mode, each output is placed at its integer value, with the lowest output at 1.0, and the highest output located at its value. For example, a three-output configuration would have outputs at 1.0, 2.0 and 3.0:
And a four-output object would have output locations at 1.0, 2.0, 3.0 and 4.0:
Like mode 1, the values are clamped at the top and the bottom of the range, so values under 1.0, or over the integer value of the highest output, will not produce expected results.
Mode 3: Circular Ranging (0-N)
Mode 3 is similar to mode 0, in that the panning exists in a circular layout. But like mode 2, the outputs are located at their integer value locations. A four-channel configuration would have the outputs as follows:
Note that location 0.0 is the same as the location of the last output, and the first output occupies location 1.0. This allows you to 'rotate' a sound around the outputs, but makes direct access to each output easier to manage.
Auto-adding Multichannel Signals
As with standard signal patchcords, combining two multichannel patchcords at an object inlet will mix the contents of prior to processing. When the two patchcords contain the same number of channels, the channels will be mixed together individually.
If one multichannel patchcord contains more channels than the other, the result will be the largest channel count of either of the patchcords.
In many cases, you can also mix multichannel and standard audio signals, with the standard signal treated as the equivalent of a 1-channel MC signal.
User Interface Objects for Multichannel Mixing
To set all levels of a multichannel signal, use the mc.gain~ object. By default, mc.gain~ auto-adapts to the number of channels in its input and produces the same number of channels, with the incoming signals scaled by the value of the gain slider.
To set levels of a multichannel signal individually, use the mc.live.gain~ or mc.multigain~ objects. mc.live.gain~ is a version of live.gain~ with a single multi-channel input and a single multi-channel output. Like mc.gain~ it auto-adapts to its input channel count by default. If the attribute mc.live.gain~ is set to a non-zero value it outputs a fixed number of channels regardless of the input channel count.
The mc.multigain~ object is a version of mc.gain~ offering individual sliders for each input channel.
The mc.multigain~ provides a way to set all sliders with modifier key gestures.
- To set a slider individually, click in the slider and drag to increase or decrease the level. You will not be able to change a different slider until you end the drag.
- To draw across all sliders setting them to the position of the cursor, hold down the option while dragging.
- To change the level of all sliders proportionally, hold down the shift key while dragging one slider.