Mixer: Update documentation

This commit is contained in:
Jonathan Moore Liles 2013-08-15 00:14:38 -07:00
parent f68232ab5c
commit ca7d95a92d
15 changed files with 276 additions and 127 deletions

View File

@ -19,54 +19,59 @@ Jonathan Moore Liles <a href="mailto:male@tuxfamily.org">&lt;male@tuxfamily.org&
<div id=toc> <div id=toc>
<h1 id=toc>Table Of Contents</h1> <h1 id=toc>Table Of Contents</h1>
<ul> <ul>
<li><a href="#n:1.">1. User Manual</a> <li><a href="#n:1.">1. Non Mixer User Manual</a>
<ul><li><a href="#n:1.1.">1.1. The Mixer</a> <ul><li><a href="#n:1.1.">1.1. Mixer Groups</a>
<ul><li><a href="#n:1.1.1.">1.1.1. Display Options</a> <ul><li><a href="#n:1.1.1.">1.1.1. How to Choose Groupings</a>
<li><a href="#n:1.1.2.">1.1.2. Mixer Groups</a> <li><a href="#n:1.1.2.">1.1.2. Considering JACK Overhead</a>
<ul><li><a href="#n:1.1.2.1.">1.1.2.1. How to Choose Groupings</a> <li><a href="#n:1.1.3.">1.1.3. Creating a New Group</a>
<li><a href="#n:1.1.2.2.">1.1.2.2. Considering JACK Overhead</a> <li><a href="#n:1.1.4.">1.1.4. Adding a Strip to an Existing Group</a>
<li><a href="#n:1.1.2.3.">1.1.2.3. Creating a New Group</a> <li><a href="#n:1.1.5.">1.1.5. Removing a Strip from a Group</a>
<li><a href="#n:1.1.2.4.">1.1.2.4. Adding a Strip to an Existing Group</a> <li><a href="#n:1.1.6.">1.1.6. Removing a Group</a>
<li><a href="#n:1.1.2.5.">1.1.2.5. Removing a Strip from a Group</a> <li><a href="#n:1.1.7.">1.1.7. Monitoring Group DSP Load</a>
<li><a href="#n:1.1.2.6.">1.1.2.6. Removing a Group</a> </ul><li><a href="#n:1.2.">1.2. Mixer Strips</a>
</ul><li><a href="#n:1.1.3.">1.1.3. Mixer Strips</a> <ul><li><a href="#n:1.2.1.">1.2.1. Navigation</a>
<ul><li><a href="#n:1.1.3.1.">1.1.3.1. Navigation</a> <li><a href="#n:1.2.2.">1.2.2. Control</a>
<li><a href="#n:1.1.3.2.">1.1.3.2. Control</a> <li><a href="#n:1.2.3.">1.2.3. Signal Chain</a>
<li><a href="#n:1.1.3.3.">1.1.3.3. Signal Chain</a> <ul><li><a href="#n:1.2.3.1.">1.2.3.1. Modules</a>
<ul><li><a href="#n:1.1.3.3.1.">1.1.3.3.1. Modules</a> <ul><li><a href="#n:1.2.3.1.1.">1.2.3.1.1. OSC Control</a>
<ul><li><a href="#n:1.1.3.3.1.1.">1.1.3.3.1.1. OSC Control</a> <li><a href="#n:1.2.3.1.2.">1.2.3.1.2. Manipulation</a>
<li><a href="#n:1.1.3.3.1.2.">1.1.3.3.1.2. Manipulation</a> <li><a href="#n:1.2.3.1.3.">1.2.3.1.3. Module Parameter Editor</a>
<li><a href="#n:1.1.3.3.1.3.">1.1.3.3.1.3. Module Parameter Editor</a> <li><a href="#n:1.2.3.1.4.">1.2.3.1.4. Controls</a>
<li><a href="#n:1.1.3.3.1.4.">1.1.3.3.1.4. Controls</a> <ul><li><a href="#n:1.2.3.1.4.1.">1.2.3.1.4.1. Control Voltages</a>
<ul><li><a href="#n:1.1.3.3.1.4.1.">1.1.3.3.1.4.1. Control Voltages</a> </ul><li><a href="#n:1.2.3.1.5.">1.2.3.1.5. Spatialization </a>
</ul><li><a href="#n:1.1.3.3.1.5.">1.1.3.3.1.5. Spatialization </a> <ul><li><a href="#n:1.2.3.1.5.1.">1.2.3.1.5.1. Spatializer Module</a>
</ul></ul></ul><li><a href="#n:1.1.4.">1.1.4. Projects</a> <ul><li><a href="#n:1.2.3.1.5.1.1.">1.2.3.1.5.1.1. Reverb Routing</a>
<ul><li><a href="#n:1.1.4.1.">1.1.4.1. JACK I/O</a> </ul><li><a href="#n:1.2.3.1.5.2.">1.2.3.1.5.2. LADSPA Plugins</a>
</ul></ul></ul></ul></ul><hr></div> </ul></ul></ul></ul><li><a href="#n:1.3.">1.3. Spatialization Console</a>
<h1 id="n:1.">1. User Manual</h1>
<h2 id="n:1.1.">1.1. The Mixer</h2> <li><a href="#n:1.4.">1.4. Projects</a>
<ul><li><a href="#n:1.4.1.">1.4.1. JACK I/O</a>
</ul></ul></ul></ul><hr></div>
<h1 id="n:1.">1. Non Mixer User Manual</h1>
<center><div class="fig image"><table id="Fig.1.1" border=1> <center><div class="fig image"><table id="Fig.1.1" border=1>
<caption> <caption>
<strong>Fig. 1.1.</strong> Mixer <strong>Fig. 1.1.</strong> Mixer
@ -90,22 +95,21 @@ Start by creating a new project (menu item <tt>Project/New</tt>).
<p> <p>
After the project has been created. Hit <tt>a</tt> or choose <tt>Mixer/Add Strip</tt> from the menu to add a new strip to the mixer. After the project has been created. Hit <tt>a</tt> or choose <tt>Mixer/Add Strip</tt> from the menu to add a new strip to the mixer.
</p> </p>
<h3 id="n:1.1.1.">1.1.1. Display Options</h3> <h2 id="n:1.1.">1.1. Mixer Groups</h2>
<p> <center><div class="fig image"><table border=1>
The display options, found in the <tt>Options/Display</tt> submenu may be adjusted to suit your needs. Set the color scheme, widget style, and other graphic options to your liking. These options are global and affect all projects. <tr><td><img src="group-dropdown.png" alt="fig. "></td></tr>
</p> </table></div></center>
<h3 id="n:1.1.2.">1.1.2. Mixer Groups</h3>
<p> <p>
Groups serve several purposes. Firstly, they allow for some organization of strips. Groups also allow parallel relationships of mixer strips to be made explicit. This has important performance implications in JACK2. Non Mixer supports an unlimited number of groups, each of which can contain an unlimited number of mixer strips. Groups serve several purposes. Firstly, they allow for some organization of strips. Groups also allow parallel relationships of mixer strips to be made explicit. This has important performance implications in JACK2. Non Mixer supports an unlimited number of groups, each of which can contain an unlimited number of mixer strips.
</p> </p>
<h4 id="n:1.1.2.1.">1.1.2.1. How to Choose Groupings</h4> <h3 id="n:1.1.1.">1.1.1. How to Choose Groupings</h3>
<p> <p>
All strips in a group should be completely parallel with no feedback loop connections. A typical group might be named 'Input' and contain all input strips (strips that accept input from Non Timeline and have outputs all connecting to some master bus). All strips in a group should be completely parallel with no feedback loop connections. A typical group might be named 'Input' and contain all input strips (strips that accept input from Non Timeline and have outputs all connecting to some master bus).
</p> </p>
<p> <p>
To put it another way, if you have 100 inputs strips with identical output configurations (e.g. stereo or B-Format), that all connect to a master bus, then you have a candidate for a group. To put it another way, if you have 100 inputs strips with identical output configurations (e.g. stereo or B-Format), that all connect to a master bus, then you have a candidate for a group.
</p> </p>
<h4 id="n:1.1.2.2.">1.1.2.2. Considering JACK Overhead</h4> <h3 id="n:1.1.2.">1.1.2. Considering JACK Overhead</h3>
<p> <p>
JACK provides immense flexibility. But, as in most situations, that flexibility comes with a cost. In JACK the cost is a context switch per client. This applies <i>even for many clients which belong to the same process</i>, as in Non Mixer. Various factors go into determining the price of a context switch on any given system. It's not very expensive, but it does add up. It becomes problematic in sessions involving many clients (think 100s), each of which having a small DSP load (often smaller than the cost of JACK's context context switch). JACK <b>could</b> be smart enough to recognize that some clients belong to the same process and could be executed serially without requiring a context switch, but at the time of writing neither JACK1 nor JACK2's scheduling is that smart. JACK provides immense flexibility. But, as in most situations, that flexibility comes with a cost. In JACK the cost is a context switch per client. This applies <i>even for many clients which belong to the same process</i>, as in Non Mixer. Various factors go into determining the price of a context switch on any given system. It's not very expensive, but it does add up. It becomes problematic in sessions involving many clients (think 100s), each of which having a small DSP load (often smaller than the cost of JACK's context context switch). JACK <b>could</b> be smart enough to recognize that some clients belong to the same process and could be executed serially without requiring a context switch, but at the time of writing neither JACK1 nor JACK2's scheduling is that smart.
</p> </p>
@ -120,7 +124,7 @@ Groups mitigate this cost by reducing the number of JACK clients required for a
To illustrate this point here are some figures from an actual song session including the whole Non suite plus a sampler, a synth and an ambisonics convolution reverb with a total of 13 strips in 4 groups in different configurations on the same system. To illustrate this point here are some figures from an actual song session including the whole Non suite plus a sampler, a synth and an ambisonics convolution reverb with a total of 13 strips in 4 groups in different configurations on the same system.
</p> </p>
<p> <p>
JACK's DSP load figures are interpreted thus: if at a 2.7ms software latency setting the average time a proces cycle takes to complete is 2.7ms, then the DSP load is 100%. The usable ceiling on DSP load is 80%. This is true for both JACK1 and JACK2. The difference is that JACK2 may use all available CPU cores to execute the graph \(if there are enough clients in parallel signal flow\). JACK's DSP load figures are interpreted thus: if at a 2.7ms software latency setting the average time a proces cycle takes to complete is 2.7ms, then the DSP load is 100%. The usable ceiling on DSP load is 80%. This is true for both JACK1 and JACK2. The difference is that JACK2 may use all available CPU cores to execute the graph (if there are enough clients in parallel signal flow).
</p> </p>
<p> <p>
32-bit Intel Core2 Duo @1.6Ghz -r 48000 -p 256 -n 2 (5.3ms) 32-bit Intel Core2 Duo @1.6Ghz -r 48000 -p 256 -n 2 (5.3ms)
@ -171,23 +175,30 @@ Of course, results will vary depending on the system and the mix. On the dual co
<p> <p>
So, for maximum capacity the combination of a multicore CPU with JACK2 and mixer groups is best. So, for maximum capacity the combination of a multicore CPU with JACK2 and mixer groups is best.
</p> </p>
<h4 id="n:1.1.2.3.">1.1.2.3. Creating a New Group</h4> <h3 id="n:1.1.3.">1.1.3. Creating a New Group</h3>
<p> <p>
Groups can be created by selecting the group dropdown on any mixer strip and choosing 'New Group'. A window will popup asking for a group name. Group names must be unique. The group will then be created and the selected strip added to it. Groups can be created by selecting the group dropdown on any mixer strip and choosing 'New Group'. A window will popup asking for a group name. Group names must be unique. The group will then be created and the selected strip added to it.
</p> </p>
<h4 id="n:1.1.2.4.">1.1.2.4. Adding a Strip to an Existing Group</h4> <h3 id="n:1.1.4.">1.1.4. Adding a Strip to an Existing Group</h3>
<p> <p>
To add a strip to an existing group, simply select a group name from the group dropdown on the strip. To add a strip to an existing group, simply select a group name from the group dropdown on the strip.
</p> </p>
<h4 id="n:1.1.2.5.">1.1.2.5. Removing a Strip from a Group</h4> <h3 id="n:1.1.5.">1.1.5. Removing a Strip from a Group</h3>
<p> <p>
Select '---' from the group dropdown. The strip will be removed from the group and will run in an independent JACK client. Select '---' from the group dropdown. The strip will be removed from the group and will run in an independent JACK client.
</p> </p>
<h4 id="n:1.1.2.6.">1.1.2.6. Removing a Group</h4> <h3 id="n:1.1.6.">1.1.6. Removing a Group</h3>
<p> <p>
Groups are destroyed automatically as soon as they contain zero strips. Groups are destroyed automatically as soon as they contain zero strips.
</p> </p>
<h3 id="n:1.1.3.">1.1.3. Mixer Strips</h3> <h3 id="n:1.1.7.">1.1.7. Monitoring Group DSP Load</h3>
<p>
Above the grop dropdown on each strip is a DSP load meter for the selected group. For ungrouped strips or strips which are the only one in their group, this is simply the DSP load of the single strip.
</p>
<p>
If DSP usage goes up when strips are fed silence, then you're probably running a plugin which has denormal issues.
</p>
<h2 id="n:1.2.">1.2. Mixer Strips</h2>
<center><div class="fig image"><table id="Fig.1.3" border=1> <center><div class="fig image"><table id="Fig.1.3" border=1>
<caption> <caption>
<strong>Fig. 1.3.</strong> Mixer Strip <strong>Fig. 1.3.</strong> Mixer Strip
@ -208,19 +219,19 @@ The fader view comprises a large gain control and digital peak meter indicator.
<p> <p>
To see how an audio signal traveling through this strip will be processed, switch to its <i>signal</i> view. To see how an audio signal traveling through this strip will be processed, switch to its <i>signal</i> view.
</p> </p>
<h4 id="n:1.1.3.1.">1.1.3.1. Navigation</h4> <h3 id="n:1.2.1.">1.2.1. Navigation</h3>
<p> <p>
A strip is focused when you click on it. Focus can be moved among strips with the <tt>Tab</tt> and <tt>Shift-Tab</tt> keys. A strip is focused when you click on it. Focus can be moved among strips with the <tt>Tab</tt> and <tt>Shift-Tab</tt> keys.
</p> </p>
<h4 id="n:1.1.3.2.">1.1.3.2. Control</h4> <h3 id="n:1.2.2.">1.2.2. Control</h3>
<p> <p>
The focused strip can be moved in the display order via the <tt>[</tt> and <tt>]</tt> keys. <tt>Delete</tt> removes a strip (with confirmation dialog). <tt>n</tt> and <tt>w</tt> set the focused strip's width to <i>narrow</i> or <i>wide</i>, respectively, and <tt>f</tt> and <tt>s</tt> switch between <i>fader</i> and <i>signal</i> views. The strip's context menu can be invoked without the mouse by hitting the <tt>Menu</tt> key (assuming your keyboard has one). The focused strip can be moved in the display order via the <tt>[</tt> and <tt>]</tt> keys. <tt>Delete</tt> removes a strip (with confirmation dialog). <tt>n</tt> and <tt>w</tt> set the focused strip's width to <i>narrow</i> or <i>wide</i>, respectively, and <tt>f</tt> and <tt>s</tt> switch between <i>fader</i> and <i>signal</i> views. The strip's context menu can be invoked without the mouse by hitting the <tt>Menu</tt> key (assuming your keyboard has one).
</p> </p>
<h4 id="n:1.1.3.3.">1.1.3.3. Signal Chain</h4> <h3 id="n:1.2.3.">1.2.3. Signal Chain</h3>
<p> <p>
The signal chain view of a mixer strip provides a way to view and manipulate the signal processing of a mixer strip. The signal chain view of a mixer strip provides a way to view and manipulate the signal processing of a mixer strip.
</p> </p>
<h5 id="n:1.1.3.3.1.">1.1.3.3.1. Modules</h5> <h4 id="n:1.2.3.1.">1.2.3.1. Modules</h4>
<center><div class="fig image"><table id="Fig.1.4" border=1> <center><div class="fig image"><table id="Fig.1.4" border=1>
<caption> <caption>
<strong>Fig. 1.4.</strong> Modules <strong>Fig. 1.4.</strong> Modules
@ -252,10 +263,14 @@ Non Mixer has several built-in modules. They are:
<dd>Digital Peak Meter</dd> <dd>Digital Peak Meter</dd>
<dt><em>Mono Pan</em></dt> <dt><em>Mono Pan</em></dt>
<dd>Performs intensity panning of a mono signal into a stereo signal.</dd> <dd>Performs intensity panning of a mono signal into a stereo signal.</dd>
<dt><em>Aux</em></dt>
<dd>Provides auxiliary outputs</dd>
<dt><em>Spatializer</em></dt>
<dd>Provides advanced Ambisonics spatialization with distance simulation.</dd>
<dt><em>Plugin</em></dt> <dt><em>Plugin</em></dt>
<dd>Hosts a LADSPA plugin</dd> <dd>Hosts a LADSPA plugin</dd>
</dl> </dl>
<h6 id="n:1.1.3.3.1.1.">1.1.3.3.1.1. OSC Control</h6> <h5 id="n:1.2.3.1.1.">1.2.3.1.1. OSC Control</h5>
<p> <p>
The input parameters of all modules are controllable via OSC, regardless of whether the parameter is set as controllable. The input parameters of all modules are controllable via OSC, regardless of whether the parameter is set as controllable.
</p> </p>
@ -292,7 +307,7 @@ For the second instance of the Gain module on the strip named 'Foo'.
<p> <p>
Non-DAW accesses these same signals via a more advanced signal routing layer on top of OSC. Any module parameter is easily controlled via Control Sequences in Non-DAW without the need to specify an OSC URL. Non-DAW accesses these same signals via a more advanced signal routing layer on top of OSC. Any module parameter is easily controlled via Control Sequences in Non-DAW without the need to specify an OSC URL.
</p> </p>
<h6 id="n:1.1.3.3.1.2.">1.1.3.3.1.2. Manipulation</h6> <h5 id="n:1.2.3.1.2.">1.2.3.1.2. Manipulation</h5>
<p> <p>
Left-clicking on a module brings up a Module Parameter Editor window for the selected module. Left-clicking on a module brings up a Module Parameter Editor window for the selected module.
</p> </p>
@ -308,41 +323,27 @@ Control+Right-clicking on a module causes it to be removed from the chain (modul
<p> <p>
The focused module may also be controlled via the keyboard. <tt>Menu</tt> brings up the context menu for the focused module. <tt>Space</tt> opens the module parameter editor, <tt>b</tt> toggles the bypassed state, and <tt>Delete</tt> removes the module from the chain (without confirmation!). <tt>Control-X</tt>, <tt>Control-C</tt> and <tt>Control-V</tt>, cut, copy, and paste modules, respectively. Modules may be copied within or across chain boundaries. The normal module I/O constraints also apply to pasted modules. The focused module may also be controlled via the keyboard. <tt>Menu</tt> brings up the context menu for the focused module. <tt>Space</tt> opens the module parameter editor, <tt>b</tt> toggles the bypassed state, and <tt>Delete</tt> removes the module from the chain (without confirmation!). <tt>Control-X</tt>, <tt>Control-C</tt> and <tt>Control-V</tt>, cut, copy, and paste modules, respectively. Modules may be copied within or across chain boundaries. The normal module I/O constraints also apply to pasted modules.
</p> </p>
<h6 id="n:1.1.3.3.1.3.">1.1.3.3.1.3. Module Parameter Editor</h6> <h5 id="n:1.2.3.1.3.">1.2.3.1.3. Module Parameter Editor</h5>
<center><div class="fig image"><table id="Fig.1.5" border=1> <center><div class="fig image"><table id="Fig.1.5" border=1>
<caption> <caption>
<strong>Fig. 1.5.</strong> Module Parameter Editor <strong>Fig. 1.5.</strong> Module Parameter Editor
</caption> </caption>
<tr><td><img src="gverb-parameters-knobs.png" alt="fig. 1.5"></td></tr> <tr><td><img src="module-parameter-editor.png" alt="fig. 1.5"></td></tr>
</table></div></center> </table></div></center>
<p> <p>
The Module Parameter Editor is used to alter the values of a module's parameters, and in addition, to bind its parameters to controls. A menu button in the upper left-hand corner allows you to select between knob, vertical slider and horizontal slider controls. The Module Parameter Editor is used to alter the values of a module's parameters, and in addition, to bind its parameters to controls. A menu button in the upper left-hand corner allows you to select between knob, vertical slider and horizontal slider controls.
</p> </p>
<center><div class="fig image"><table id="Fig.1.6" border=1>
<caption>
<strong>Fig. 1.6.</strong> Horizontal Sliders
</caption>
<tr><td><img src="gverb-parameters-hsliders.png" alt="fig. 1.6"></td></tr>
</table></div></center>
<center><div class="fig image"><table id="Fig.1.7" border=1>
<caption>
<strong>Fig. 1.7.</strong> Vertical Sliders
</caption>
<tr><td><img src="gverb-parameters-vsliders.png" alt="fig. 1.7"></td></tr>
</table></div></center>
<p> <p>
Underneath each control is a bind button. Clicking adds a new control to the chain's <i>Controls</i> view and binds it to the parameter in question. For simplicity, only one control at a time may be bound to a given parameter. Underneath each control is a bind button. Clicking adds a new control to the chain's <i>Controls</i> view and binds it to the parameter in question. For simplicity, only one control at a time may be bound to a given parameter.
</p> </p>
<h6 id="n:1.1.3.3.1.4.">1.1.3.3.1.4. Controls</h6> <h5 id="n:1.2.3.1.4.">1.2.3.1.4. Controls</h5>
<center><div class="fig image"><table id="Fig.1.8" border=1> <center><div class="fig image"><table id="Fig.1.6" border=1>
<caption> <caption>
<strong>Fig. 1.8.</strong> Control View <strong>Fig. 1.6.</strong> Control View
</caption> </caption>
<tr><td><img src="controls.png" alt="fig. 1.8"></td></tr> <tr><td><img src="controls.png" alt="fig. 1.6"></td></tr>
</table></div></center> </table></div></center>
<p> <p>
The control view of a chain groups together all of the controls bound to parameters of modules in that chain. The default mode of controls is <i>Manual</i>. Right click on a control to bring up a menu which will allow you to select one of the available control I/O methods to use. When <i>Control Voltage</i> (CV) is selected, a CV input port will be created on the containing mixer strip's JACK client. The control will now accept values from that input. A control bound and configured in this way can then be connected to the output of a Non-DAW control sequence using your favorite connection manager. The control view of a chain groups together all of the controls bound to parameters of modules in that chain. The default mode of controls is <i>Manual</i>. Right click on a control to bring up a menu which will allow you to select one of the available control I/O methods to use. When <i>Control Voltage</i> (CV) is selected, a CV input port will be created on the containing mixer strip's JACK client. The control will now accept values from that input. A control bound and configured in this way can then be connected to the output of a Non-DAW control sequence using your favorite connection manager.
@ -355,7 +356,7 @@ events. Hold down the `Ctrl` key while scrolling the mousewheel to
achieve finer resolution. achieve finer resolution.
</td></table> </td></table>
</div> </div>
<h7 id="n:1.1.3.3.1.4.1.">1.1.3.3.1.4.1. Control Voltages</h7> <h6 id="n:1.2.3.1.4.1.">1.2.3.1.4.1. Control Voltages</h6>
<p> <p>
The control voltage concept should be familiar to anyone who has experience with analog modular synthesizers. MIDI, while having definite advantages in many respects, multiplexes control data in such a way as to make connecting one MIDI control to a parameter involve a significant inconvenience, usually requiring the adjustment of settings on both ends of the connection in order to separate the control data streams. The control voltage concept should be familiar to anyone who has experience with analog modular synthesizers. MIDI, while having definite advantages in many respects, multiplexes control data in such a way as to make connecting one MIDI control to a parameter involve a significant inconvenience, usually requiring the adjustment of settings on both ends of the connection in order to separate the control data streams.
</p> </p>
@ -374,23 +375,71 @@ of parameter automation, as LADSPA plugins are incapable of
processing Control Voltage signals at full audio resolution anyway. processing Control Voltage signals at full audio resolution anyway.
</td></table> </td></table>
</div> </div>
<h6 id="n:1.1.3.3.1.5.">1.1.3.3.1.5. Spatialization </h6> <h5 id="n:1.2.3.1.5.">1.2.3.1.5. Spatialization </h5>
<center><div class="fig image"><table id="Fig.1.9" border=1> <h6 id="n:1.2.3.1.5.1.">1.2.3.1.5.1. Spatializer Module</h6>
<caption> <center><div class="fig image"><table border=1>
<strong>Fig. 1.9.</strong> Spatialization Control on a Strip <tr><td><img src="spatializer-module.png" alt="fig. "></td></tr>
</caption>
<tr><td><img src="spatialization-on-strip.png" alt="fig. 1.9"></td></tr>
</table></div></center> </table></div></center>
<p> <p>
Non-Mixer supports Ambisonic spatialization via the excellent amb-* LADSPA plugin set and others. Whenever a LADSPA plugin is added to a strip whose set of parameters include parameters named Azimuth and Elevation, Non-Mixer will detect this and automatically attach a Spatializer control to these parameters. The Spatializer will be displayed at the bottom of the mixer strip. A larger version of the control may also be found in the Module Parameter Editor. The Spatializer Module included with Non Mixer allows one to not only control the position of a sound source (angle and elevation), but also to control it's apparent distance from the listener.
</p> </p>
<center><div class="fig image"><table id="Fig.1.10" border=1> <p>
Distance cues are based on physical properties--the speed of sound in air, the damping effect of humidity, the ratio of reverb early and late reflections, the volume of the sound.
</p>
<p>
In legacy mixers, all of these properties must be controlled individually by the engineer. This is nearly always a process of trial and error. Much of a studio engineers' skill lies in his ability to guess at these values and arrive at a reasonably realistic sounding result.
</p>
<p>
Non Mixer eliminates the guesswork and combines all of these controls into a single spatialization point encoding both a sound source's position relative to the listener and its distance. No matter where the point is placed, the result will be realistic.
</p>
<p>
Use of the Spatializer Modules eliminates much complexity from the mixing process. No more back and forth, no more guessing at values for reverb sends and predelay and EQ. The Spatializer does it all for you.
</p>
<p>
The B-Format outputs of the Spatializer Module are in the order standard order WXYZ.
</p>
<p>
All Spatializer Module instances will present controls and aziumuth, elevation, and radius. Additionally, a <i>Highpass</i> control is provided to compensate for the proximity effect in close-mic'd signals. The default cutoff is 200Hz. Adjust it according to the nature of the input signal.
</p>
<p>
A Spatializer Module fed stereo input will perform stereo encoding and will present a <i>Width</i> control.
</p>
<h7 id="n:1.2.3.1.5.1.1.">1.2.3.1.5.1.1. Reverb Routing</h7>
<p>
The Spatializer module is intended to work with an external reverb engine having Ambisonics B-Format inputs for early reflections and a Mono input for reverb tail (and, of course, B-Format outputs).
</p>
<center><div class="fig image"><table border=1>
<tr><td><img src="reverb-routing.png" alt="fig. "></td></tr>
</table></div></center>
<p>
The Spatializer Module has two sets auxiliary outputs for reverb send. One, consisting of a single mono signal, is intended to be connected to the input of a reverb tail, otherwise known as a diffuse field. Another set of outputs in B-Format is indended to be connected to the B-Format inputs of an early reflection reverb engine. The output of the reverb engine should be 100% 'wet'.
</p>
<p>
I have crafted several jconvolver config files that meet these specifications. They can be found in <a class=ext href="http://non.tuxfamily.org/ambiverb.tar.bz2">ambiverb.tar.bz2</a>
</p>
<p>
The main outputs of the strip should go to a master bus, into which the output of the reverb engine is also fed.
</p>
<h6 id="n:1.2.3.1.5.2.">1.2.3.1.5.2. LADSPA Plugins</h6>
<p>
There are several Ambisonics panners/encoders released as LADSPA plugins. When one of these plugins is added to a strip, Non Mixer will detect its parameter signature and create a Spatialization Control for it just as with the Spatializer Module.
</p>
<center><div class="fig image"><table id="Fig.1.7" border=1>
<caption> <caption>
<strong>Fig. 1.10.</strong> Larger Spatialization Control <strong>Fig. 1.7.</strong> Spatialization Control on a Strip
</caption> </caption>
<tr><td><img src="spatialization-in-mpe.png" alt="fig. 1.10"></td></tr> <tr><td><img src="spatialization-on-strip.png" alt="fig. 1.7"></td></tr>
</table></div></center>
<p>
Whenever a module is added to a strip whose set of parameters include parameters named Azimuth and Elevation (and perhaps Radius), Non-Mixer will detect this and automatically attach a Spatializer control to these parameters. The Spatializer will be displayed at the bottom of the mixer strip. A larger version of the control may also be found in the Module Parameter Editor.
</p>
<center><div class="fig image"><table id="Fig.1.8" border=1>
<caption>
<strong>Fig. 1.8.</strong> Spatialization Control in the Module Parameter Editor
</caption>
<tr><td><img src="spatialization-in-mpe.png" alt="fig. 1.8"></td></tr>
</table></div></center> </table></div></center>
<p> <p>
The spatialization control may be visualized as moving the sound source across the surface of a hemispherical dome enclosing the listener. The spatialization control may be visualized as moving the sound source across the surface of a hemispherical dome enclosing the listener.
@ -398,7 +447,23 @@ The spatialization control may be visualized as moving the sound source across t
<p> <p>
The output of the spatializing plugin may be routed into a decoding plugin following it the same strip or, more usefully, the output of a number of Ambisonic panning plugins on different strips may be routed (through JACK) into a single master decoder instance on a final strip. The output of the spatializing plugin may be routed into a decoding plugin following it the same strip or, more usefully, the output of a number of Ambisonic panning plugins on different strips may be routed (through JACK) into a single master decoder instance on a final strip.
</p> </p>
<h3 id="n:1.1.4.">1.1.4. Projects</h3> <h2 id="n:1.3.">1.3. Spatialization Console</h2>
<center><div class="fig image"><table border=1>
<tr><td><img src="spatialization-console.png" alt="fig. "></td></tr>
</table></div></center>
<p>
The Spatialization Console allows the user to view and control all of the source positions in an Ambisonics mix at once.
</p>
<p>
The visibility of the Spatialization Console may be toggled with the <tt>F8</tt> key.
</p>
<p>
The console will display a point for each Spatializer Module or other Ambisonics panner plugin contained in the mix.
</p>
<p>
There are two projections available, Planar and Spherical. The range of the view can be adjusted with the range dropdown in the lower lefthand corner.
</p>
<h2 id="n:1.4.">1.4. Projects</h2>
<p> <p>
A Non-Mixer project is a directory where Non-Mixer keeps the strip settings, project specific settings, and some meta-data. A project is completely self-contained. You can rename a project as simply as: A Non-Mixer project is a directory where Non-Mixer keeps the strip settings, project specific settings, and some meta-data. A project is completely self-contained. You can rename a project as simply as:
</p> </p>
@ -406,7 +471,7 @@ A Non-Mixer project is a directory where Non-Mixer keeps the strip settings, pro
$ mv Project-A Project-B $ mv Project-A Project-B
</pre></td></tr> </pre></td></tr>
</table></div> </table></div>
<h4 id="n:1.1.4.1.">1.1.4.1. JACK I/O</h4> <h3 id="n:1.4.1.">1.4.1. JACK I/O</h3>
<p> <p>
Each mixer strip is presented as a separate JACK "client". This helps to avoid the necessity of internally duplicating JACK's routing logic and, with JACK2, permits the possibility of parallel execution of mixer strip signal chains. Each mixer strip is presented as a separate JACK "client". This helps to avoid the necessity of internally duplicating JACK's routing logic and, with JACK2, permits the possibility of parallel execution of mixer strip signal chains.
</p> </p>
@ -420,12 +485,12 @@ The JACK API makes implementing this far more difficult and kludgey than it shou
Please petition your local JACK developer to accept jack_client_set_name() into the API. Please petition your local JACK developer to accept jack_client_set_name() into the API.
</td></table> </td></table>
</div> </div>
<center><div class="fig image"><table id="Fig.1.11" border=1> <center><div class="fig image"><table id="Fig.1.9" border=1>
<caption> <caption>
<strong>Fig. 1.11.</strong> Patchage <strong>Fig. 1.9.</strong> Patchage
</caption> </caption>
<tr><td><img src="non-mixer-and-non-daw-in-patchage.png" alt="fig. 1.11"></td></tr> <tr><td><img src="non-mixer-and-non-daw-in-patchage.png" alt="fig. 1.9"></td></tr>
</table></div></center> </table></div></center>
</div> </div>
</body> </body>

View File

@ -4,9 +4,7 @@
-- Table Of Contents -- Table Of Contents
: User Manual : Non Mixer User Manual
:: The Mixer
/ Mixer / Mixer
< non-mixer-complex.png < non-mixer-complex.png
@ -25,13 +23,9 @@
After the project has been created. Hit `a` or choose `Mixer\/Add After the project has been created. Hit `a` or choose `Mixer\/Add
Strip` from the menu to add a new strip to the mixer. Strip` from the menu to add a new strip to the mixer.
::: Display Options :: Mixer Groups
The display options, found in the `Options\/Display` submenu may be adjusted < group-dropdown.png
to suit your needs. Set the color scheme, widget style, and other graphic
options to your liking. These options are global and affect all projects.
::: Mixer Groups
Groups serve several purposes. Firstly, they allow for some Groups serve several purposes. Firstly, they allow for some
organization of strips. Groups also allow parallel relationships of organization of strips. Groups also allow parallel relationships of
@ -40,7 +34,7 @@
groups, each of which can contain an unlimited number of mixer groups, each of which can contain an unlimited number of mixer
strips. strips.
:::: How to Choose Groupings ::: How to Choose Groupings
All strips in a group should be completely parallel with no feedback All strips in a group should be completely parallel with no feedback
loop connections. A typical group might be named 'Input' and contain loop connections. A typical group might be named 'Input' and contain
@ -51,7 +45,7 @@
output configurations (e.g. stereo or B-Format), that all connect to output configurations (e.g. stereo or B-Format), that all connect to
a master bus, then you have a candidate for a group. a master bus, then you have a candidate for a group.
:::: Considering JACK Overhead ::: Considering JACK Overhead
JACK provides immense flexibility. But, as in most situations, that JACK provides immense flexibility. But, as in most situations, that
flexibility comes with a cost. In JACK the cost is a context switch flexibility comes with a cost. In JACK the cost is a context switch
@ -93,8 +87,8 @@
latency setting the average time a proces cycle takes to complete is latency setting the average time a proces cycle takes to complete is
2.7ms, then the DSP load is 100%. The usable ceiling on DSP load is 2.7ms, then the DSP load is 100%. The usable ceiling on DSP load is
80%. This is true for both JACK1 and JACK2. The difference is that 80%. This is true for both JACK1 and JACK2. The difference is that
JACK2 may use all available CPU cores to execute the graph \(if JACK2 may use all available CPU cores to execute the graph (if
there are enough clients in parallel signal flow\). there are enough clients in parallel signal flow).
32-bit Intel Core2 Duo @1.6Ghz -r 48000 -p 256 -n 2 (5.3ms) 32-bit Intel Core2 Duo @1.6Ghz -r 48000 -p 256 -n 2 (5.3ms)
@ -154,29 +148,38 @@
# configuration differs from the group configuration will be marked as # configuration differs from the group configuration will be marked as
# invalid and will not be executed. # invalid and will not be executed.
:::: Creating a New Group ::: Creating a New Group
Groups can be created by selecting the group dropdown on any mixer Groups can be created by selecting the group dropdown on any mixer
strip and choosing 'New Group'. A window will popup asking for a strip and choosing 'New Group'. A window will popup asking for a
group name. Group names must be unique. The group will then be group name. Group names must be unique. The group will then be
created and the selected strip added to it. created and the selected strip added to it.
:::: Adding a Strip to an Existing Group ::: Adding a Strip to an Existing Group
To add a strip to an existing group, simply select a group name from To add a strip to an existing group, simply select a group name from
the group dropdown on the strip. the group dropdown on the strip.
:::: Removing a Strip from a Group ::: Removing a Strip from a Group
Select '---' from the group dropdown. The strip will be removed from Select '---' from the group dropdown. The strip will be removed from
the group and will run in an independent JACK client. the group and will run in an independent JACK client.
:::: Removing a Group ::: Removing a Group
Groups are destroyed automatically as soon as they contain zero Groups are destroyed automatically as soon as they contain zero
strips. strips.
::: Mixer Strips ::: Monitoring Group DSP Load
Above the grop dropdown on each strip is a DSP load meter for the
selected group. For ungrouped strips or strips which are the only
one in their group, this is simply the DSP load of the single strip.
If DSP usage goes up when strips are fed silence, then you're
probably running a plugin which has denormal issues.
:: Mixer Strips
/ Mixer Strip / Mixer Strip
< single-strip.png < single-strip.png
@ -199,12 +202,12 @@
To see how an audio signal traveling through this strip will be To see how an audio signal traveling through this strip will be
processed, switch to its /signal/ view. processed, switch to its /signal/ view.
:::: Navigation ::: Navigation
A strip is focused when you click on it. Focus can be moved among A strip is focused when you click on it. Focus can be moved among
strips with the `Tab` and `Shift-Tab` keys. strips with the `Tab` and `Shift-Tab` keys.
:::: Control ::: Control
The focused strip can be moved in the display order via the `[` and The focused strip can be moved in the display order via the `[` and
`]` keys. `Delete` removes a strip (with confirmation dialog). `n` `]` keys. `Delete` removes a strip (with confirmation dialog). `n`
@ -213,12 +216,12 @@
views. The strip's context menu can be invoked without the mouse by views. The strip's context menu can be invoked without the mouse by
hitting the `Menu` key (assuming your keyboard has one). hitting the `Menu` key (assuming your keyboard has one).
:::: Signal Chain ::: Signal Chain
The signal chain view of a mixer strip provides a way to view and The signal chain view of a mixer strip provides a way to view and
manipulate the signal processing of a mixer strip. manipulate the signal processing of a mixer strip.
::::: Modules :::: Modules
/ Modules / Modules
< modules.png < modules.png
@ -252,10 +255,14 @@
= Digital Peak Meter = Digital Peak Meter
= Mono Pan = Mono Pan
= Performs intensity panning of a mono signal into a stereo signal. = Performs intensity panning of a mono signal into a stereo signal.
= Aux
= Provides auxiliary outputs
= Spatializer
= Provides advanced Ambisonics spatialization with distance simulation.
= Plugin = Plugin
= Hosts a LADSPA plugin = Hosts a LADSPA plugin
:::::: OSC Control ::::: OSC Control
The input parameters of all modules are controllable via OSC, The input parameters of all modules are controllable via OSC,
regardless of whether the parameter is set as controllable. regardless of whether the parameter is set as controllable.
@ -292,7 +299,7 @@
controlled via Control Sequences in Non-DAW without the need to controlled via Control Sequences in Non-DAW without the need to
specify an OSC URL. specify an OSC URL.
:::::: Manipulation ::::: Manipulation
Left-clicking on a module brings up a Module Parameter Editor window Left-clicking on a module brings up a Module Parameter Editor window
for the selected module. for the selected module.
@ -316,28 +323,22 @@
boundaries. The normal module I\/O constraints also apply to pasted boundaries. The normal module I\/O constraints also apply to pasted
modules. modules.
:::::: Module Parameter Editor ::::: Module Parameter Editor
/ Module Parameter Editor / Module Parameter Editor
< gverb-parameters-knobs.png < module-parameter-editor.png
The Module Parameter Editor is used to alter the values of a The Module Parameter Editor is used to alter the values of a
module's parameters, and in addition, to bind its parameters to module's parameters, and in addition, to bind its parameters to
controls. A menu button in the upper left-hand corner allows you to controls. A menu button in the upper left-hand corner allows you to
select between knob, vertical slider and horizontal slider controls. select between knob, vertical slider and horizontal slider controls.
/ Horizontal Sliders
< gverb-parameters-hsliders.png
/ Vertical Sliders
< gverb-parameters-vsliders.png
Underneath each control is a bind button. Clicking adds a new Underneath each control is a bind button. Clicking adds a new
control to the chain's /Controls/ view and binds it to the parameter control to the chain's /Controls/ view and binds it to the parameter
in question. For simplicity, only one control at a time may be bound in question. For simplicity, only one control at a time may be bound
to a given parameter. to a given parameter.
:::::: Controls ::::: Controls
/ Control View / Control View
< controls.png < controls.png
@ -358,7 +359,7 @@
{ events. Hold down the `Ctrl` key while scrolling the mousewheel to { events. Hold down the `Ctrl` key while scrolling the mousewheel to
{ achieve finer resolution. { achieve finer resolution.
::::::: Control Voltages :::::: Control Voltages
The control voltage concept should be familiar to anyone who has The control voltage concept should be familiar to anyone who has
experience with analog modular synthesizers. MIDI, while having experience with analog modular synthesizers. MIDI, while having
@ -386,20 +387,87 @@
{ of parameter automation, as LADSPA plugins are incapable of { of parameter automation, as LADSPA plugins are incapable of
{ processing Control Voltage signals at full audio resolution anyway. { processing Control Voltage signals at full audio resolution anyway.
:::::: Spatialization ::::: Spatialization
:::::: Spatializer Module
< spatializer-module.png
The Spatializer Module included with Non Mixer allows one to not
only control the position of a sound source (angle and elevation),
but also to control it's apparent distance from the listener.
Distance cues are based on physical properties--the speed of sound
in air, the damping effect of humidity, the ratio of reverb early and
late reflections, the volume of the sound.
In legacy mixers, all of these properties must be controlled
individually by the engineer. This is nearly always a process of
trial and error. Much of a studio engineers' skill lies in his
ability to guess at these values and arrive at a reasonably
realistic sounding result.
Non Mixer eliminates the guesswork and combines all of these
controls into a single spatialization point encoding both a sound
source's position relative to the listener and its distance. No
matter where the point is placed, the result will be realistic.
Use of the Spatializer Modules eliminates much complexity from the
mixing process. No more back and forth, no more guessing at values
for reverb sends and predelay and EQ. The Spatializer does it all
for you.
The B-Format outputs of the Spatializer Module are in the order
standard order WXYZ.
All Spatializer Module instances will present controls and aziumuth,
elevation, and radius. Additionally, a /Highpass/ control is
provided to compensate for the proximity effect in close-mic'd
signals. The default cutoff is 200Hz. Adjust it according to the
nature of the input signal.
A Spatializer Module fed stereo input will perform stereo encoding
and will present a /Width/ control.
::::::: Reverb Routing
The Spatializer module is intended to work with an external reverb
engine having Ambisonics B-Format inputs for early reflections and a
Mono input for reverb tail (and, of course, B-Format outputs).
< reverb-routing.png
The Spatializer Module has two sets auxiliary outputs for reverb
send. One, consisting of a single mono signal, is intended to be
connected to the input of a reverb tail, otherwise known as a
diffuse field. Another set of outputs in B-Format is indended to be
connected to the B-Format inputs of an early reflection reverb
engine. The output of the reverb engine should be 100% 'wet'.
I have crafted several jconvolver config files that meet these
specifications. They can be found in #(url,http:\/\/non.tuxfamily.org\/ambiverb.tar.bz2,ambiverb.tar.bz2)
The main outputs of the strip should go to a master bus, into which
the output of the reverb engine is also fed.
:::::: LADSPA Plugins
There are several Ambisonics panners\/encoders released as LADSPA
plugins. When one of these plugins is added to a strip, Non Mixer
will detect its parameter signature and create a Spatialization
Control for it just as with the Spatializer Module.
/ Spatialization Control on a Strip / Spatialization Control on a Strip
< spatialization-on-strip.png < spatialization-on-strip.png
Non-Mixer supports Ambisonic spatialization via the excellent amb-\* Whenever a module is added to a strip whose set of parameters
LADSPA plugin set and others. Whenever a LADSPA plugin is added to a include parameters named Azimuth and Elevation (and perhaps Radius),
strip whose set of parameters include parameters named Azimuth and Non-Mixer will detect this and automatically attach a Spatializer
Elevation, Non-Mixer will detect this and automatically attach a control to these parameters. The Spatializer will be displayed at
Spatializer control to these parameters. The Spatializer will be the bottom of the mixer strip. A larger version of the control may
displayed at the bottom of the mixer strip. A larger version of the also be found in the Module Parameter Editor.
control may also be found in the Module Parameter Editor.
/ Larger Spatialization Control / Spatialization Control in the Module Parameter Editor
< spatialization-in-mpe.png < spatialization-in-mpe.png
The spatialization control may be visualized as moving the sound The spatialization control may be visualized as moving the sound
@ -412,7 +480,23 @@
routed (through JACK) into a single master decoder instance on a routed (through JACK) into a single master decoder instance on a
final strip. final strip.
::: Projects :: Spatialization Console
< spatialization-console.png
The Spatialization Console allows the user to view and control all
of the source positions in an Ambisonics mix at once.
The visibility of the Spatialization Console may be toggled with the `F8` key.
The console will display a point for each Spatializer Module or
other Ambisonics panner plugin contained in the mix.
There are two projections available, Planar and Spherical. The range
of the view can be adjusted with the range dropdown in the lower
lefthand corner.
:: Projects
A Non-Mixer project is a directory where Non-Mixer keeps the strip A Non-Mixer project is a directory where Non-Mixer keeps the strip
settings, project specific settings, and some meta-data. A project settings, project specific settings, and some meta-data. A project
@ -420,7 +504,7 @@
> $ mv Project-A Project-B > $ mv Project-A Project-B
:::: JACK I/O ::: JACK I/O
Each mixer strip is presented as a separate JACK "client". This Each mixer strip is presented as a separate JACK "client". This
helps to avoid the necessity of internally duplicating JACK's helps to avoid the necessity of internally duplicating JACK's

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 437 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB