Update NTK.
[nondaw.git] / mixer / doc / MANUAL.mu
blobb19cb8cdd166a1305aa069656c5b185669719ad5
2 ! title         Non Mixer User Manual
3 ! author        Jonathan Moore Liles #(email,male@tuxfamily.org)
4 ! date          January 21, 2010
6 -- Table Of Contents
8 : User Manual
10 :: The Mixer
12 / Mixer
13 < non-mixer-complex.png
15   The Non-Mixer is a stand-alone audio mixer, utilizing JACK as an
16   audio subsystem. At the time of writing, the architecture of
17   Non-Mixer is unique. By making the mixer stand-alone, concepts such
18   as busses, sends, and inserts are eliminated, as the same goals can
19   be achieved by simply adding more strips to the mixer.
21   Start by creating a new project (menu item `Project\/New`).
23 / New Project
24 < new-project.png
26   After the project has been created. Hit `a` or choose `Mixer\/Add
27   Strip` from the menu to add a new strip to the mixer.
29 ::: Display Options
31   The display options, found in the `Options\/Display` submenu may be adjusted
32   to suit your needs. Set the color scheme, widget style, and other graphic
33   options to your liking. These options are global and affect all projects.
35 ::: Mixer Strips
37 / Mixer Strip
38 < single-strip.png
40   Each mixer strip has a name and color, each of which may be defined
41   by the user. Names, but not colors, must be unique. In addition,
42   each strip has controls to move it left or right (the arrows) in the
43   display and to remove it entirely (the 'X').
45   Strips start out in /narrow/ mode, with the /fader/ view
46   enabled. Click the desired button to toggle the mode or view.
48   Each strip has a context menu which lists the available options
49   and their associated key-bindings. To bring up the context menu, `Right
51   The fader view comprises a large gain control and digital peak meter
52   indicator. These are automatically connected to the default gain and
53   meter modules of the strip's signal chain.
55   To see how an audio signal traveling through this strip will be
56   processed, switch to its /signal/ view.
58 :::: Navigation
60   A strip is focused when you click on it. Focus can be moved among
61   strips with the `Tab` and `Shift-Tab` keys.
63 :::: Control
65   The focused strip can be moved in the display order via the `[` and
66   `]` keys. `Delete` removes a strip (with confirmation dialog). `n`
67   and `w` set the focused strip's width to /narrow/ or /wide/,
68   respectively, and `f` and `s` switch between /fader/ and /signal/
69   views. The strip's context menu can be invoked without the mouse by
70   hitting the `Menu` key (assuming your keyboard has one).
72 :::: Signal Chain
74   The signal chain view of a mixer strip provides a way to view and
75   manipulate the signal processing of a mixer strip.
77 ::::: Modules
79 / Modules
80 < modules.png
82   All signal processing in Non Mixer occurs in /Modules/. Modules are
83   signal processing abstractions providing ports for audio and control
84   I\/O and, in addition, some simple user interface. Sink and source
85   modules carry audio out of and into JACK.
87   Modules are displayed as named blocks. Some modules (e.g. the Meter
88   module) may have additional GUI components.
90   Each module has zero or more audio I\/O ports and zero or more
91   control ports. Audio routing between modules is handled
92   automatically. Modules with mono audio configurations (one channel
93   in, one channel out) can be automatically adjusted to support any
94   number of discrete channels. Modules with more (related) channels,
95   however, introduce restrictions on the order in which modules can be
96   chained.
98   An indicator in the upper left-hand corner of each module block
99   indicates whether the module has any parameters bound to controls.
101   Non Mixer has several built-in modules. They are:
103 = JACK
104         = Performs JACK I\/O
105 = Gain
106         = Applies gain in dB
107 = Meter
108         = Digital Peak Meter
109 = Mono Pan
110         = Performs intensity panning of a mono signal into a stereo signal.
111 = Plugin
112         = Hosts a LADSPA plugin
114 :::::: OSC Control
116   The input parameters of all modules are controllable via OSC,
117   regardless of whether the parameter is set as controllable.
119   The format of the automatically generated OSC path names is as follows:
121 > /strip/[STRIP_NAME]/[MODULE_NAME]/[PARAMETER_NAME]
123   The UDP port that the OSC server binds to can be set by providing
124   the `--osc-port` command-line option. Without this option, a random
125   port will be bound automatically (the exact OSC URL will always be
126   printed to the console as a line beginning with "OSC: ").
128   The default path accepts a float value between 0.0 and 1.0 (a
129   Control Voltage like signal) which will be automatically scaled to
130   the allowable range of the control.
132   A path ending in \/unscaled is also available, which accepts exact values,
133   which will be clamped to the allowable range. For example:
135 > /strip/[STRIP_NAME]/[MODULE_NAME]/[PARAMETER_NAME]/unscaled
137   If same module\/plugin is used twice in a signal chain
138   (e.g. multiple Gain stages), then a position dependent sequence
139   number will be appended to the module name. For example, a path
140   might look like the following:
142 > /strip/Foo/Gain.1/Gain_(dB)
144   For the second instance of the Gain module on the strip named 'Foo'.
146   Non-DAW accesses these same signals via a more advanced signal
147   routing layer on top of OSC. Any module parameter is easily
148   controlled via Control Sequences in Non-DAW without the need to
149   specify an OSC URL.
151 :::::: Manipulation
153   Left-clicking on a module brings up a Module Parameter Editor window
154   for the selected module.
156   Right-clicking on a module brings up a context menu allowing you
157   manipulate the module, as well as to pick a new module to insert
158   before the selected one in the chain.
160   Middle-clicking on a module toggles its activation state (the audio
161   signal will bypass inactive modules).
163   Control+Right-clicking on a module causes it to be removed from the
164   chain (modules added by default cannot be removed).
166   The focused module may also be controlled via the keyboard. `Menu`
167   brings up the context menu for the focused module. `Space` opens the
168   module parameter editor, `b` toggles the bypassed state, and
169   `Delete` removes the module from the chain (without confirmation!).
170   `Control-X`, `Control-C` and `Control-V`, cut, copy, and paste
171   modules, respectively. Modules may be copied within or across chain
172   boundaries. The normal module I\/O constraints also apply to pasted
173   modules.
175 :::::: Module Parameter Editor
177 / Module Parameter Editor
178 < gverb-parameters-knobs.png
180   The Module Parameter Editor is used to alter the values of a
181   module's parameters, and in addition, to bind its parameters to
182   controls. A menu button in the upper left-hand corner allows you to
183   select between knob, vertical slider and horizontal slider controls.
185 / Horizontal Sliders
186 < gverb-parameters-hsliders.png
188 / Vertical Sliders
189 < gverb-parameters-vsliders.png
191   Underneath each control is a bind button. Clicking adds a new
192   control to the chain's /Controls/ view and binds it to the parameter
193   in question. For simplicity, only one control at a time may be bound
194   to a given parameter.
196 :::::: Controls
198 / Control View
199 < controls.png
201   The control view of a chain groups together all of the controls
202   bound to parameters of modules in that chain. The default mode of
203   controls is /Manual/. Right click on a control to bring up a menu
204   which will allow you to select one of the available control I\/O
205   methods to use. When /Control Voltage/ (CV) is selected, a CV input
206   port will be created on the containing mixer strip's JACK
207   client. The control will now accept values from that input. A
208   control bound and configured in this way can then be connected to
209   the output of a Non-DAW control sequence using your favorite
210   connection manager.
212 { NOTE:
213 { All knob and slider controls respond to mousewheel
214 { events. Hold down the `Ctrl` key while scrolling the mousewheel to
215 { achieve finer resolution.
217 ::::::: Control Voltages
219   The control voltage concept should be familiar to anyone who has
220   experience with analog modular synthesizers. MIDI, while having
221   definite advantages in many respects, multiplexes control data in
222   such a way as to make connecting one MIDI control to a parameter
223   involve a significant inconvenience, usually requiring the
224   adjustment of settings on both ends of the connection in order to
225   separate the control data streams.
227   Control Voltages, on the other hand, provide a simple 1:1 source to
228   sink relationship and offer much higher resolution, both in time and
229   value, than can be natively expressed through MIDI. The chief
230   advantage of CV in the context of Non-DAW is the ease with which an
231   control sequence can be connected to a mixer module parameter. If
232   you have a MIDI controller that you'd like to use to control
233   parameters of Non-Mixer, consider /jm2cv/, a JACK MIDI to Control
234   Voltage daemon which was written by Peter Nelson specifically for
235   use with Non-Mixer. jm2cv can be acquired by:
237 > git clone git://fuzzle.org/jm2cv.git
240 { NOTE:
241 { The use of Control Signals (OSC) should be preferred for most types
242 { of parameter automation, as LADSPA plugins are incapable of
243 { processing Control Voltage signals at full audio resolution  anyway.
245 :::::: Spatialization 
247 / Spatialization Control on a Strip
248 < spatialization-on-strip.png
250   Non-Mixer supports Ambisonic spatialization via the excellent amb-\*
251   LADSPA plugin set and others. Whenever a LADSPA plugin is added to a
252   strip whose set of parameters include parameters named Azimuth and
253   Elevation, Non-Mixer will detect this and automatically attach a
254   Spatializer control to these parameters. The Spatializer will be
255   displayed at the bottom of the mixer strip. A larger version of the
256   control may also be found in the Module Parameter Editor.
258 / Larger Spatialization Control
259 < spatialization-in-mpe.png
261   The spatialization control may be visualized as moving the sound
262   source across the surface of a hemispherical dome enclosing the
263   listener.
265   The output of the spatializing plugin may be routed into a decoding
266   plugin following it the same strip or, more usefully, the output of
267   a number of Ambisonic panning plugins on different strips may be
268   routed (through JACK) into a single master decoder instance on a
269   final strip.
271 ::: Projects
273   A Non-Mixer project is a directory where Non-Mixer keeps the strip
274   settings, project specific settings, and some meta-data.  A project
275   is completely self-contained. You can rename a project as simply as:
277 > $ mv Project-A Project-B
279 :::: JACK I/O
281   Each mixer strip is presented as a separate JACK "client". This
282   helps to avoid the necessity of internally duplicating JACK's
283   routing logic and, with JACK2, permits the possibility of parallel
284   execution of mixer strip signal chains.
286   The JACK client name of each strip will correspond to the name of the strip.
288 { NOTE:
289 { The JACK API makes implementing this far more difficult and kludgey than it should have to be.
290 { Please petition your local JACK developer to accept jack_client_set_name() into the API.
292 / Patchage
293 < non-mixer-and-non-daw-in-patchage.png