From 0f110ea32b84bee95b9f9662d1824e82cb5dcac7 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sun, 13 Nov 2016 22:35:50 +0100 Subject: [PATCH] Much more about MIDI mappings. --- audio.rst | 96 ++++++++++++++++++++++++++++++++-- images/audio-bus-controls.png | Bin 0 -> 23699 bytes 2 files changed, 93 insertions(+), 3 deletions(-) create mode 100644 images/audio-bus-controls.png diff --git a/audio.rst b/audio.rst index 8023a5f..94b31b6 100644 --- a/audio.rst +++ b/audio.rst @@ -269,8 +269,6 @@ keys on the keyboard) allow you to select between two views: .. image:: images/audio-bus-controls.png -(TODO: fix image) - There's one set each of these controls for every bus. The most important parts of the mix are given the most screen estate, so even though the way through the signal chain is left-to-right @@ -356,4 +354,96 @@ preset for the Akai MIDImix, looks like this: .. image:: images/midi-controller-setup.png -(TODO: Write more.) +There are three types of controls, which correspond to different types +of MIDI events: + + * **Controllers** map directly to MIDI controllers (the value in the + dialog is the controller number), which are continuous + values that can take on values from 0 to 127. (Unfortunately, MIDI + was made in the 80s, where 7-bit precision was seen as enough.) + They are typically used for faders and knobs. + + * **Buttons** are one-shot events that map to MIDI note-on events, + and the value in the dialog is the MIDI note number (also from + 0 to 127). They are similar to mouse buttons in that they don't + have an on or off state (the MIDI note-off events are ignored). + A typical example would be a mute button that can be pressed to + either mute or unmute a channel. + + * **Lights** are *output* events where Nageru can send feedback + to the controller (and by extension, the user), represented by + MIDI note-on and note-off events (to turn the light on or off). + A typical example would be a mute light, that is on when a + channel is muted. + +In addition, each event can be *per-bus* or *global*. It can be a bit +confusing that even the global events can be set once per-bus, +but this is merely a convenience, allowing you to bind multiple +physical controls to the same global controller; for global controllers, +the bus number(s) you use for your mapping do not matter. + +The combination of controller type and per-bus/global constitutes +a **mapping group**, clearly marked and collapsible in the UI. + + +Creating and updating mappings +'''''''''''''''''''''''''''''' + +Unless you have a reference sheet for your MIDI controller, specifying which +controller and number numbers the different physical knobs and faders +emit, inputting these numbers by hand can be a frustating procedure. +(Actually, even with a reference sheet, it probably is.) Thus, the preferred +way is by autosensing; simply select the given mapping with the mouse +and use the control you want to bind it to, and Nageru automatically +fills it in. + +Also, most devices support many channels, with very similar structure +in their controller and/or note numbers. Once you've filled out one +and then started filling out another one, Nageru can guess for you; +if it thinks it can make a reasonable guess (ie., find a consistent +offset from its left or right neighbor), the “Guess bus” and/or +“Guess group” buttons will be clickable. This can save considerable +amounts of time, although it is advisable to check Nageru's guess for +at least the first guessed channel. In particular, some controllers +do not have a consistent offset between channels on all the controllers +(making “Guess bus” give the wrong answer), just on the controller groups, +so there, you must limit yourself to guessing only a single controller +group (using “Guess group”). + +Lights currently cannot be learned, so some trial and error is needed. +(However, if there are buttons associated with the light, a good place +to start is using the same note number.) However, just like the input +controllers, they can be guessed once you have all the mapping you want +for a neighboring bus and partial information about the current one. + + +Controller banks, and UI visibility +''''''''''''''''''''''''''''''''''' + +Many MIDI controllers do not have enough faders and knobs for every +Nageru function you might want to control; some even contain only +one fader or one knob. Thus, Nageru supports assigning a physical +control to multiple functions, through **controller banks**. +If a mapping is assigned to a controller bank, it is only active +when that bank is active. The act of switching banks is in itself +an action that can be initiated from the MIDI controller; in fact, +that is currently the only way to switch them. + +A typical example would be having a knob that in bank 1 is assigned +to gain, and in bank 2 to cutoff (which happens to be a global control, +as described in the previous section). This way, one can switch between +the two banks and have both functions accessible from the MIDI controller. +Similarly, buttons can be reused by assigning them to multiple banks. + +Note that when switching banks, the associated controller(s) is +*not* immediately updated; this happens only when you move the control. +Otherwise, a bank switch would cause a host of unwanted changes, +as it is unlikely that you would want the control in the exact +same position for the two controllers. (There is a similar problem +when starting up Nageru for the first time, where the controllers +are not necessarily in the place matching Nageru's startup settings.) +Some more expensive controllers support *motorized faders*, where +the host can simply tell the control to move to the right place +and thus solve the problem, but Nageru does not currently support them. + +(TODO: write about highlighting) diff --git a/images/audio-bus-controls.png b/images/audio-bus-controls.png new file mode 100644 index 0000000000000000000000000000000000000000..b4fe1146f52a4d741885851a3c8c9c6031597204 GIT binary patch literal 23699 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 z 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 literal 0 HcmV?d00001 -- 2.39.2