Table of Contents
How Unify processes MIDI data
Basic MIDI routing
This diagram (from Getting started with Unify: Overview) shows the basic signal routing in Unify:
For patches with no MIDI layers, incoming MIDI data (from your DAW and/or MIDI keyboard/controller) is always routed to ALL Instrument layers.
When there are MIDI layers, incoming MIDI data is always routed to ALL MIDI layers, and each Instrument layer can be set to receive MIDI either directly from the input stream, OR from the output of any selected MIDI layer.
In Unify v1.0.x, MIDI data is not routed to audio-effects layers (either AUX or MASTER). This may change in future.
MIDI routing in MIDI layers
As the above diagram shows, MIDI data is passed in daisy-chain fashion along a chain of MIDI effects. The MIDI input stream is the MIDI input for the first MIDI effect, the output of the first effect is the input to the next, and so on, and the output of the last MIDI effect in the chain is the output of the entire MIDI layer.
This chaining can be useful when you need to modify the input MIDI stream before passing it on to the next effect, e.g. using an instance of MIDI Filter to interpret MIDI sustain-pedal (CC#64) events ahead of an instance of BlueARP, which doesn't understand those events itself.
MIDI routing in Instrument layers
MIDI routing in Instrument layers is completely different from that in MIDI layers: The input MIDI stream is routed directly to EVERY plug-in in the layer, like this, and the layer does not have any MIDI output:
What this means is that not only the Instrument plug-in, but ALSO any insert effects on the layer, can be controlled via MIDI. This is particularly useful when using MIDI data-streams generated by MIDI generator plug-ins such as arpeggiators. Of course, only plug-ins that actually support MIDI control can take advantage of this feature. Nearly all instrument plug-ins support MIDI control (if only for playing notes), but quite a few audio effects do too. (Effect plug-ins by Polyverse/Infected Mushroom have particularly good MIDI control abilities.
MIDI processing built into MIDI and Instrument layers
The above descriptions of MIDI routing in MIDI and Instrument layers don't tell the whole story. Both MIDI and Instrument layers have quite a bit of built-in MIDI-stream processing.
The following diagram shows both MIDI and audio routing in Unify's Instrument layers:
The box labeled MIDI filtering/processing on the left is represented in the Unify GUI by the “MIDI controls cluster” at the left-hand side of the layer, which consists of eight primary control rectangles plus two more (the MIDI activity light and MIDI latch control) which appear only when they are relevant.
The MIDI Source box (top left corner) determines where the layer's MIDI data comes from. This routing choice happens before the MIDI data even enters the MIDI filtering/processing box.
- IN selects the main input
- M1 selects the output of MIDI layer 1
- M2 selects the output of MIDI layer 2, etc.
The “MIDI filtering/processing” box in the diagram above is itself a sequence of five processing stages:
Stage 1: MIDI channel filtering
At the first stage, the MIDI channel number (1–16) of each incoming MIDI event is compared against the setting of the Input Channel control, and the event is only passed on to the next stage if it matches:
- ALL allows all events to pass (no MIDI channel filtering)
- 1 through 16 filter out events whose MIDI channel (1–16) does not match
Stage 2: MIDI channel conversion
The second stage allows the option to change the event's MIDI channel number. This could be useful if you have multiple MIDI keyboards assigned to, say, MIDI channels 4, 5, and 6, and you have set up MIDI channel-based filtering to route these to different layers, but you would like to change the channel numbers back to 1 before processing them, either because you're working with a plug-in which only works on MIDI channel 1, or you simply prefer not to set your individual plug-ins to specific MIDI channels. (You might have loaded the layer from a layer preset, which you have defined with all plug-ins set on MIDI channel 1 for simplicity.) Stage 2 is controlled by the MIDI output channel control:
- NC means “no change”, and is the setting you would most commonly use
- 1 through 16 cause all incoming MIDI events to be reassigned to that channel number
Stage 3: MIDI pitch- and velocity-based filtering
The third filtering stage is the basis for key- and velocity-splitting. By setting multiple layers to respond to non-overlapping pitch ranges, you can define key-splits. By setting two or more layers to respond to the same pitch range, but non-overlapping ranges of the MIDI note-velocity (1–127), you can define a velocity split, where the layer which plays depends on how hard you strike notes on the keyboard. Stage 3 is controlled by the four control boxes at the right-hand side of the MIDI-controls cluster:
The control box marked G8 in the image indicates the upper limit of pitch; the box below it marked C-2 is the lower limit. You can adjust these values in four ways:
- Click and drag up/down with the mouse
- Right-click (or Ctrl+clicking) to pop up a small edit box, and either:
- Type a note name (e.g. “C3”) or a MIDI note-number (e.g. 60) and hit Enter, OR
- Press the appropriate key on your MIDI keyboard, and the displayed note-name will change to match
- Right-mouse operations in the layer title bar (advanced—see MIDI range and velocity based fading)
The two control boxes on the right are similar, but define the upper (top-right) and lower (bottom-right) velocity limits. These can only be adjusted using the mouse (either click/drag or use mouse-wheel).
Stage 4: Pitch transpose
MIDI pitch values for key-splits are defined prior to transposing, so you can specify splits based on physical keys on your keyboard. (Technically, the key-split ranges are defined based on the MIDI note-numbers output by your keyboard, which might themselves be transposed if you have activated any transpose capability built into the keyboard controller itself.)
The fourth processing stage allows you to transpose the pitch at which the layer sounds by adding an offset (in semitones, which may be negative) to the note-numbers for each MIDI note-on or note-off event. The offset is the sum of the layer transpose offset and the global transpose offset.
The layer transpose offset affects only the given layer, and is is set by the layer transpose control at the bottom-left corner of the MIDI-controls cluster:
The global transpose offset affects ALL instrument and MIDI layers, and hence allows you to transpose the entire composite Unify “instrument” up and down. The global transpose offset is set by the global transpose box at the bottom-right corner of the Show MIDI view which appears in the Footer of the Unify GUI window when you click on the MIDI icon in the Icon Strip below:
Both the global and layer-transpose boxes can be adjusted in the same three ways:
- Click and drag up/down with the mouse
- If you hold down the Alt key (on a PC) or the Option key (on a Mac), the value will change by octaves
- Right-click (or Ctrl+clicking) to pop up a small edit box, enter a value in semitones (may be negative) and hit the Enter key.
Stage 5: Note-velocity modification
Finally, the fifth stage of layer MIDI processing allows you to apply an arbitrary response curve to the velocity values associated with each note-on event. Clicking on the MIDI Velocity Graph control at the right-hand side of the MIDI-controls cluster pops up a curve editor window like this:
The graph itself represents incoming MIDI note-velocity values along the horizontal axis, with lowest (quietest) velocities on the left and highest (loudest) velocities on the right. The vertical axis represents outgoing (processed) velocity values, lowest at the bottom and highest at the top. The default velocity curve is a straight line–the so-called “identity mapping” where each incoming velocity value is mapped to the identical value (no change at all).
- The Reset button reverts the curve shape back to the straight-line “identity” curve, as shown
- The Load… button lets you load a previously-saved curve-shape preset (XML file)
- The Save… button lets you save the current shape as a new curve-shape preset
In the graph control itself, you can:
- Click and drag the endpoints (circles) up and down
- Click anywhere between endpoints and drag up/down to change the curvature of that segment of the curve
- Double-click anywhere between endpoints to create a new split point, splitting the segment into two
- Single-click directly on a split point and drag to move it up, down, left, or right.
- Double-click directly on a split point to delete it, joining two segments back into one
For velocity curves, you will rarely need to create split points. You will usually only need to adjust the curvature (slightly – a little change goes a long way). Dragging upward to create a convex curve will make the layer more responsive to velocity, and can be useful when you are working with a weighted-key MIDI controller. Dragging downward to create a concave curve will make the layer less responsive to velocity, and can be useful when playing a very lightweight synth-action keyboard.