title: Stereo Panner
---
-<h2>Stereo Panner</h2>
-
<p>
-The stereo panner distributes 2 inputs to 2 outputs. Its behaviour is
-controlled by two parameters, <code>width</code>
-and <code>position</code> (the latter could also be referred to as
-"direction", or "azimuth" without loss of accuracy).
+ The default stereo panner distributes 2 inputs to 2 outputs. Its
+ behaviour is controlled by two parameters, width and position. The
+ default settings for the stereo panner are width=100%,
+ position=center (L=50%, R=50%). This panner assumes that the signals
+ you wish to distribute are either uncorrelated (that means totally
+ independent), or they contain a stereo image which is
+ mono-compatible, such as a co-incident microphone recording, or a
+ stereo image that has been created with pan pots.<sup><a href="#caveat">*</a></sup>
+</p>
+<div class="well">
+<p>
+ With the default values it is not possible to alter the position,
+ since the width is already spread entirely across both outputs. To
+ alter the position, you must first reduce the width.
</p>
+</div>
+<h2>Stereo Panner User Interface</h2>
+
+<img src="/images/stereo-panner-annotated.png" alt=""/>
+
+<p>
+ The panner user interface consists of 3 elements, divided between
+ the top and bottom half. Click and/or drag in the top half to
+ control position; click and/or drag in the bottom half to control
+ width (see below for details).
<p>
-The default settings for the stereo panner
-are <code>width=100%</code>, <code>position=center</code>. With these
-values it is not possible to alter the position, since the width is
-already spread entirely across both outputs. To alter the position,
-you must first reduce the width.
+<p>
+ In the top half is the position indicator, which shows where the
+ center of the stereo image is relative to the left and right
+ edges. When this is the middle of the panner, the stereo image is
+ centered between the left and right outputs. When it all the way to
+ the left, the stereo image collapses to just the left speaker.
+</p>
+<p>
+ In the bottom half are two signal indicators, one marked "L" and the
+ other "R". The distance between these two shows the width of the
+ stereo image. If the width is reduced to zero, there will only be a
+ single signal indicator marked "M" (for mono), and whose color will
+ change to indicate the special state.
+</p>
+<p>
+ It is possible to invert the outputs (see below) so that whatever
+ would have gone to the right channel goes to the left and vice
+ versa. When this happens, the entire movable part of the panner
+ changes color to indicate clearly that this is the case.
</p>
-<h4>Using the mouse</h4>
+<h3>Position vs. L/R</h3>
-<p>Mouse operations in the upper half of the panner adjust the position
- parameter, constrained by the current width setting.
+<p>
+ Although the implementation of the panner uses the "position"
+ parameter, when the user interface displays it numerically, it shows a pair of numbers that
+ will be familiar to most audio engineers.
</p>
-<p>Mouse operations in the lower half of the panner adjust the width
- parameter, constrained by the current position setting.
+<table>
+<tr><th>Position</th><th>L/R</th><th>English</th></tr>
+<tr><td>0</td><td>L=50% R=50%</td><td>signal image is midway between
+ left and right speakers</td></tr>
+
+<tr><td>-1</td><td>L=100% R=0%</td><td>signal image is entirely
+ at the left speaker </td></tr>
+
+<tr><td>1</td><td>L=0% R=100%</td><td>signal image is entirely
+ at the right speaker</td></tr>
+</table>
+
+<p>
+ One way to remember this sort of convention is that the middle of the
+ USA is not Kansas, but "Los Angeles: 50% New York: 50%".
</p>
+<h2>Examples In Use</h2>
-<p>To change the position smoothly, press the right button and drag
+<table>
+<tr><th>Appearance</th><th>Settings</th></tr>
+<tr><td><img src="/images/stereo-panner.png"></td><td>Width=100%,
+ L=50 R=50</td></tr>
+<tr><td><img src="/images/stereo-panner-zero.png"></td><td>Width=0%,
+ L=50 R=50</td></tr>
+<tr><td><img src="/images/stereo-panner-inverted.png"></td><td>Width=-100%, Position = 0 (center)</td></tr>
+<tr><td><img src="/images/stereo-panner-right.png"></td><td>Width=36%,
+ L=44 R=56</td></tr>
+<tr><td><img src="/images/stereo-panner-hard-right.png"></td><td>Width=0%,
+ L=0 R=100</td></tr>
+</table>
+
+<h2>Using the mouse</h2>
+
+<p>
+ Mouse operations in the upper half of the panner adjust the position
+ parameter, constrained by the current width setting.
+</p>
+<p>
+ Mouse operations in the lower half of the panner adjust the width
+ parameter, constrained by the current position setting.
+</p>
+<p>
+ To change the position smoothly, press the right button and drag
within the top half of the panner, then release. The position will
- be limited by the current width setting.
+ be limited by the current width setting. <em>Note: you do not need
+ to grab the position indicator in order to drag</em>
</p>
-
-<p>To change the width smoothly, press the right button and drag
+<p>
+ To change the width smoothly, press the right button and drag
within the lower half of the panner, then release. The width will be
- limited by the current position setting.
+ limited by the current position setting.<em>Note: you do not need to
+ grab the L/R indicators in order to drag</em>
</p>
<dl class="faq">
<dt>Reset to defaults</dt>
-<dd>Click <key class="mod3">button 1</key></dd>
+<dd>Click <key class="mod3">right button</key></dd>
<dt>Change to a "hard left"</dt>
-<dd>Double click <key class="mod1">button 1</key> in the upper left half
+<dd>Double click <key class="mod2">right button</key> in the upper left half
of the panner</dd>
<dt>Change to a "hard right"</dt>
-<dd>Double click <key class="mod1">button 1</key> in the upper right half
+<dd>Double click <key class="mod2">right button</key> in the upper right half
of the panner</dd>
<dt>Move position as far left as possible, given width</dt>
-<dd>Double click <key>button 1</key> in the upper left half of the
+<dd>Double click <key>right button</key> in the upper left half of the
panner</dd>
<dt>Move position as far right as possible, given width</dt>
-<dd>Double click <key>button 1</key> in the upper right half of the
+<dd>Double click <key>right button</key> in the upper right half of the
panner</dd>
<dt>Set the position to center</dt>
-<dd>Click <key>button 1</key> in the upper middle of the panner</dd>
+<dd>Click <key>right button</key> in the upper middle of the panner</dd>
-<dt>Reset width to 180° (100%)</dt>
-<dd>Double click <key>button 1</key> on the lower left side</dd>
+<dt>Reset to maximum possible width</dt>
+<dd>Double click <key>right button</key> on the lower left side</dd>
-<dt>Reset width to -180° (inverted 100%)</dt>
-<dd>Double click <key>button 1</key> on the lower right side</dd>
+<dt>Invert (flip channel assignments)</dt>
+<dd>Double click <key>right button</key> on the lower right side</dd>
<dt>Set width to 0°</dt>
-<dd>Double click <key>button 1</key> in the lower middle</dd>
+<dd>Double click <key>right button</key> in the lower middle</dd>
</dl>
<h4>Keyboard bindings</h4>
-When the pointer is within a stereo panner user interface, the following
-keybindings are available to operate on that panner:
+<p>
+ When the pointer is within a stereo panner user interface, the following
+ keybindings are available to operate on that panner:
+</p>
<dl>
-<dt><key>↑</key></dt>
-<dd>increase width by 1°</dd>
-<dt><key class="mod1">↑</key></dt>
-<dd>increase width by 5°</dd>
-<dt><key>↓</key></dt>
-<dd>decrease width by 1°</dd>
-<dt><key class="mod1">↓</key></dt>
-<dd>decrease width by 5°</dd>
-<dt><key class="mod2">↑</key></dt>
-<dd>reset width to 180° (100%)</dd>
-<dt><key>←</key></dt>
-<dd>move position 1° to the left</dd>
-<dt><key>→</key></dt>
-<dd>move position 1° to the right</dd>
-<dt><key>0</key></dt>
-<dd>reset position to center</dd>
+ <dt><key>↑</key> / <key class="mod1">↑</key></dt>
+ <dd>increase width by 1° / 5°</dd>
+ <dt><key>↓</key> / <key class="mod1">↓</key></dt>
+ <dd>decrease width by 1° / 5°</dd>
+ <dt><key>←</key> / <key class="mod1">←</key></dt>
+ <dd>move position 1° / 5° to the left</dd>
+ <dt><key>→</key> / <key class="mod1">→</key></dt>
+ <dd>move position 1° / 5° to the right</dd>
+ <dt><key>0</key></dt>
+ <dd>reset position to center</dd>
+ <dt><key class="mod2">↑</key></dt>
+ <dd>reset width to full (100%)</dd>
</dl>
-<h4>Using the scroll wheel</h4>
+<h4>Using the scroll wheel/touch scroll</h4>
-When the pointer is within a stereo panner user interface, the scroll
-wheel may be used as follows:
+<p>
+ When the pointer is within a stereo panner user interface, the scroll
+ wheel may be used as follows:
+</p>
<dl>
-<dt>scroll left</dt>
-<dd>increase width by 1°</dd>
+<dt>left / <key class="mod1">left</key></dt>
+<dd>increase width by 1° / 5°</dd>
-<dt><key class="mod1">scroll left</key></dt>
-<dd>increase width by 5°</dd>
+<dt>right / <key class="mod1">right</key></dt>
+<dd>decrease width by 1° / 5°</dd>
-<dt>scroll left</dt>
-<dd>decrease width by 1°</dd>
+<dt>up / <key class="mod1">up</key></dt>
+<dd>move position 1° / 5° to the left</dd>
-<dt><key class="mod1">scroll left<key></dt>
-<dd>decrease width by 5°</dd>
+<dt>down / <key class="mod1">down</key></dt>
+<dd>move position 1° / 5°to the right</dd>
+</dl>
-<dt>scroll up</dt>
-<dd>move position 1° to the right</dd>
+<h2><a name="caveat"></a>Panning caveats</h2>
+
+<div class="well">
+Note that the stereo panner will introduce unwanted side effects on
+material that includes a time difference between the channels, such
+as AB, ORTF or NOS microphone recordings, or delay-panned mixes.<br />
+With such signals, when you reduce the with, you are summing two signals
+with different delays, which will introduce comb filtering.
+</div>
+<p>
+Let's take a look at what happens when you record a source at 45° to the
+right side with an ORTF array and then manipulate the width.
+</p>
+<p>
+For testing, we apply a pink noise signal to both inputs of an Ardour stereo
+bus with the stereo panner, and feed the bus output to a two-channel analyser.
+Since pink noise contains equal energy per octave, the readout is a straight line:
+</p>
+<img src="/images/stereo-panner-with-ORTF-fullwidth.png" />
+<p>
+To simulate an ORTF, we use Robin Gareus' stereo balance
+control LV2 to set the level difference and time delay. Ignore the Trim/Gain
+— its purpose is just to align the test signal with the 0dB line of the
+analyser.
+</p>
+<p>
+Recall that an ORTF microphone pair consists of two cardioids spaced 17 cm
+apart, with an opening angle of 110°.<br />
+For a source at 45° to the right, the time difference between the capsules
+is 350 usecs or approximately 15 samples at 44.1 kHz. The level difference
+due to the directivity of the microphones is about 7.5dB.
+</p>
+<p>
+Now for the interesting part: if we reduce the width of the signal to 50%,
+the time-delayed signals will be combined in the panner. Observe what
+happens to the frequency response of the left and right outputs:
+</p>
+<img src="/images/stereo-panner-with-ORTF-halfwidth.png" />
+<p>
+You may argue that all spaced microphone recordings will get comb filters
+later, when the two channels recombine in the air between the speakers. But
+perceptually, this is a world of difference, since our hearing system is
+very good at eliminating comb filters in the real world, if their component
+signals are spatially separated. But once you combine two delayed signals
+inside your signal chain, this spatial separation is lost. As usual, you
+get to keep the pieces.
+</p>
+<div class="well">
+Depending on your material and on how much you need to manipulate the width,
+the comb filter may be acceptable. Then again, it may not. Listen
+carefully for artefacts if you manipulate unknown stereo signals — many
+orchestra sample libraries for example do contain time-delay components.
+</div>
-<dt>scroll down</dt>
-<dd>move position 1° to the right</dd>
-</dl>