Table of Contents
MIDIBox: MIDI file player
Unify's built-in MIDIBox plug-in is a MIDI effect. It doesn't produce sound by itself, but outputs MIDI data from a specified MIDI (.mid) file, which can trigger sounds from a synth plug-in such as Guru Sampler.
MIDIBox is mainly intended for short rhythmic or melodic loops, but can also play longer MIDI files if desired.
You can put a MIDIBox instance into the MIDI-inserts area of a single INST layer, or, if you need the MIDI output to drive multiple INST layers, on a MIDI layer. When you first call up the MIDIBox GUI, it looks like this:
Loop position indicator
Along the top of the MIDIBox GUI, just under the decorative blue stripe, is the loop-position indicator. The full width of the indicator represents the full length of the MIDI sequence, which is automatically rounded up to an even number of measures (as encoded time-signature in the MIDI file itself). Measure-boundaries are marked off with white vertical lines, and beats are marked off with slightly shorter lines. When the sequence is running, the loop-position indicator gradually fills with a light blue color; the rightmost end of the colored area represents the current position within the sequence.
Just below the loop-position indicator is the lead/lag slider, which adjusts the timing of MIDI events relative to the playhead (Transport) position. The numeric readout to the left of the slider shows the current offset in milliseconds. As you'll see when you drag the slider, the response is non-linear; the central half of the slider's length is devoted to small adjustments.
Dragging the slider to the right causes the playback to lag the beat. The effect is very similar to using an instance of JitterBox after MIDIBox, and adding a constant delay time. This can be used to achieve a more relaxed feel, from a quantized MIDI file which might otherwise sound too robotically “on the beat”.
Dragging the slider to the left causes the playback to lead the beat–notes from the MIDI file actually start earlier than the corresponding beat-times. There is no other way to achieve this result in Unify (short of putting a JitterBox on every other layer.) This is particularly useful with orchestral samples, particularly strings, which tend to “speak” a little after each MIDI note-on event, because the sound-designers chose not to trim the natural attack portion of each sample too aggressively.
There are practical limits to what lead-time adjustment can accomplish. In a live orchestra, the string players will always lead the beat to compensate, but there is no way to do this with MIDI. When working with string samples in a DAW (without Unify), the producer will often take steps to ensure that all of the MIDI notes on entire string tracks are played sooner than the corresponding notes on other instrument tracks, working very carefully by ear; this is only possible because the producer has access to the entire track. MIDIBox only has access to short note-sequences, usually loops.
For loops which repeat over and over, adjusting the lead-time can work wonders, except for the down-beat of the very first time through, which is usually triggered by an incoming MIDI note, which is usually right on the beat. MIDIBox can't magically start the looped sequence before it receives the trigger, so it does the next-best thing: It starts the first note(s) of the sequence immediately, and only adjusts when they end. This may result in the very first notes sounding late (because the instrument rendering them does not speak immediately). The only way to avoid this would be to ensure that the initial MIDI note-on (e.g. played live, or from your DAW) itself starts before the beat.
Library and file controls
Just below the loop-position indicator, there is a library selector (pop-up menu) on the left, and a “file-load button” on the right.
- The library selector allows you to choose among the available patch libraries, to facilitate choosing MIDI files from that library's MIDI Files sub-folder. If you leave it set at “no library”, you can choose files from the MIDI Files folder under the main Unify data folder, or anywhere else on your computer.
- NOTE Unify expects MIDI Files folders to be called “MIDI Files”—exactly that, no variation.
- The file-load button starts out marked “Click to load MIDI file…”. Once a file has been loaded, the button text will change to the name of the file. If the file cannot be loaded, the file name will appear in red, and clicking the button will display a pop-up alert box explaining why not; the button will then revert to its original “Click to load” state after you dismiss the alert.
After you have loaded a MIDI file, you can drag a copy of the MIDI sequence to your DAW using the file-load button. Just click the button and drag to your DAW. Most DAWs will respond by adding the MIDI data to an existing track or to a newly-created track.
Track and loop-bounds selectors
The third row of controls relate to which parts of the loaded MIDI file are to be replayed; hence these are only meaningful once a MIDI file has been loaded.
- On the right is the track selector, which allows you to select which track of a multi-track (type-1 or type-2) MIDI file is to be played back. If there is only one track available (always the case for type-0 MIDI files), there will only be one choice. Each of the choices indicates the track name from the MIDI file itself (or a generic name like “Track 1” if there isn't one), followed by the number of MIDI events in the track in parentheses.
- On the left are the from-bar and length selectors. These allow you to choose which bar-number you want playback to begin from, and how many bars you want played.
- “from bar” defaults to 1
- “length” defaults to the number of bars in the file.
Controls relating to MIDI input output
In the middle area of the MIDIBox GUI are four groups of controls, each with its own heading as follows:
- The Guru Sampler group relates to how MIDIBox can be configured to control Guru Sampler
- When Note→Coarse is selected, MIDI note-on events received by MIDIBox are transformed into MIDI CC#127 events, which cause any down-stream Guru Sampler instance to adjust its Coarse tuning parameter. This is useful when you would like to play drum sounds, but have their pitch adjust to match played notes.
- The MIDI Pass-Thru group allows you to specify that certain MIDI-events received by MIDIBox should pass through to down-stream plug-ins.
- Check Notes/Pedal to allow MIDI note and sustain-pedal events to pass
- Check Pitch Bend to allow pitch-bend events to pass
- Check All CCs to allow all continuous-controller (CC) events, including Mod Wheel (CC#1) to pass
- The MIDI file notes controls relate to how the pitch of notes in the MIDI sequence may be altered
- Offset allows you to apply a constant offset to all output notes (e.g +12 to go up one octave)
- The Transpose checkbox provides three choices:
- Play Only: the MIDI sequence will be played as-is, no matter which MIDI key triggers it
- Key Tpose (key transpose): the notes from the MIDI sequence will be transposed by the number of semitones between the note you play and the root-note of the sequence (see Root below).
- Poly Tpose (polyphonic transpose): same as key transpose, but every note in the MIDI sequence is processed once for every note you play, meaning you can play chords. This works best with monophonic MIDI sequences consisting of a single note played repeatedly to define a rhythm.
- Root is where you define which note pitch should correspond to “no transpose”. (This value is also used, in a similar way, to determine the amount of coarse-pitch adjustment applied if Note→Coarse is checked.)
- The Output note range controls allow you to set up simple filtering of output notes based on pitch
- The two note-boxes define the lower and upper note pitches of the selected range
- The pop-up on the left allows you to choose whether to Include or Exclude notes in the range
- As of Unify v1.1.10, the default setting is “Include notes C1 to C6”. (In prior versions it was C-2 to G8, i.e. no filtering at all.)
Note as of Unify 1.2, Poly Tpose is the default transpose mode.
Playback Speed and Mode controls
The controls at the bottom-left corner of the MIDIBox GUI allow you to control the speed at which the MIDI sequence is played back, and also the “playback mode”, explained below.
- The ratio selectors (two pop-up menus at the top of this group) define the basic playback speed as an integer ratio of the host transport speed.
- The default ratio of 1:1 plays back at the same bpm rate as the transport.
- 2:1 plays at twice the transport speed; 1:2 plays at half speed.
- Other ratios can be used to create polyrhythms, e.g. 3:2 would play 3 measures from the MIDI file in the time the transport takes to play 2 measures (provided the time signatures are the same; see below).
- The Speed knob allows you to adjust this basic playback speed in a continuous way, from 0.1x (one-tenth) to 10x (ten times).
- The Mode selector at the bottom lets you choose among three distinct playback modes:
- One-shot plays the sequence once, each time a note-on event is received.
- Loop/Key causes the sequence to loop, but suppresses output when no notes are down. (This is the default mode.)
- Loop causes looped playback, controlled only by the host transport, not by input notes. (You could use this for e.g. using MIDI files as backing tracks.)
- 1-shot/Key plays the sequence once, like “One-shot”, but cuts it off when the MIDI key is lifted.
MIDI note-velocity controls
The controls at the bottom-right corner of the MIDIBox GUI allow you to adjust how note-velocities in the MIDI sequence are adjusted during playback.
- Clicking the velocity graph on the left pops up a curve editor with which you can define an arbitrary mapping from input velocities 0-127 (horizontal axis) to output velocities 0-127 (vertical axis).
- The Vel.scale knob defines a multiplicative factor applied after the velocity curve.
- The Vel.offset knob defines a fixed offset applied after the velocity curve and scaling.
- (Default settings result in no modification of note-velocity values whatsoever.)
The controls at the bottom center of the MIDIBox GUI, just above the “midiBOX” logo, allow you to audition the currently-loaded MIDI file (i.e., play the currently-selected track), and also provide a quick way to select other MIDI files in the same folder.
- The Audition icon (triangle in a circle) starts MIDIBox playing in Audition mode
- Note that audition playback is only available if the sequence is not already playing normally
- The -/+ buttons immediately replace the currently-loaded MIDI file with the previous (-) or next (+) file in the same folder.
Understanding MIDI files
A full description of MIDI files is beyond the scope of this manual; see e.g. http://www.music.mcgill.ca/~ich/classes/mumt306/StandardMIDIfileformat.html. Here are a few key points:
- MIDI files typically have the extension “.mid”. Occasionally other extensions may be used, but MIDIBox expects the “.mid” at the end; rename if necessary.
- MIDI files come in three flavors:
- Type 0 MIDI files have only one track
- Type 1 and 2 MIDI files can have multiple tracks; the only difference is how the data are ordered within the file.
- Each MIDI file can have its own time-signature (which defaults to 4/4 if none is specified).
- MIDIBox uses this to compute the number of bars (measures) in the file.
- When MIDIBox says there are, say, 5 bars, this is relative to the time-signature of the MIDI file, which is not necessarily the same as the current time-signature specified for the Transport.
- Each MIDI file will normally also have its own Tempo or “bpm rate” specification, but MIDIBox ignores this, and plays at the tempo specified by the Transport, modified according to the ratio and speed settings.
The Transport and how it relates to MIDI Playback
To really understand MIDIBox, and especially how its instances work together with other plug-in instances, you have to understand what a “Transport” is. A music-software Transport is based on the notion of a tape-transport (in a traditional mechanical tape recorder) combined with music-theoretic concepts of time-signature and tempo.
There are three super-important things to understand about Transports in Unify, DAWs, and plug-ins.
All MIDI timing is based on quarter notes
This is incredibly important.
- The so-called “bpm” or “tempo” in any plug-in host (i.e., Unify or a DAW) is actually the number of quarter-notes per minute, NOT the number of beats per minute.
- When the time-signature denominator is 4 (e.g., 2/4, 3/4, 4/4, etc.), the “bpm” value actually is beats per minute.
- When the time-signature denominator is 2 (e.g., 2/2), each beat is a half-note, so if the (incorrectly named) “bpm” value is 120, the actual tempo will be 60 half-note beats per minute.
- When the time-signature denominator is 8, things get complicated.
- In rare cases where each beat is an eighth-note, “120 bpm” actually means 240 eighth-note beats per minute
- Much more commonly, the time-signature numerator is a multiple of three (e.g., 6/8, 9/8, 12/8), signifying that each beat is a dotted quarter note. “120 bpm” (i.e., 120 quarter-notes per minute) then implies a musical tempo of 80 beats per minute (two-thirds of the “bpm” value).
- MIDIBox plays back notes based on the current “bpm”, i.e., quarter-notes per minute rate of the Transport, adjusted according to its ratio and speed settings.
- If MIDIBox is playing a MIDI file whose time-signature is 6/8, bars/measures from the MIDI file will only correspond to the Transport's bars/measures if the transport's time-signature is also set to 6/8.
- When this is the case, MIDIBox's ratio settings can be interpreted in terms of bars/measures.
- Otherwise, the ratio settings can only be interpreted in terms of quarter notes.
A "Transport" is the key to tempo-locked operation of plug-ins
Every plug-in host (or at least, every non-trivial one) has its own Transport. If you have worked with plug-ins in a DAW, you are probably familiar with the notion of your DAW's Transport, which is where you set the current Tempo (“bpm”) and time-signature, that all “tempo-locked” plug-in features synchronize with.
- The Unify stand-alone app has a Transport, which works just like that of a DAW.
- A Transport is so called because it's a software model of a tape transport mechanism.
- Every Transport keeps track of at least three numeric items:
- The current Tempo, in quarter-notes per minute, usually misleadingly named “bpm”.
- The current Time Signature which consists of a Numerator and a Denominator, and is used to resolve time values based on quarter-notes to musical bars aka measures.
- The current “Song Position” (sometimes called “playhead position”), which is the position of the current playback/record point (“playhead”), expressed as an amount of time since the start of the “song” or sequence.
- Like most hosts, Unify can display the current song-position either as a time value in hours/minutes/seconds or as a beat-value in bars/beats/ticks (where a tick is a user-selected subdivision of the beat, most commonly 8 or 16).
When multiple plug-ins play together, they need to be able to synchronize to a common Transport, just as multiple players in an orchestra synchronize with the conductor's baton and other directions. This is why every non-trivial plug-in host has a full-featured Transport which tracks tempo, time signature, and song position.
- To play at the same speed, plug-ins refer to the host Transport's tempo (“bpm”) value
- To play with comparable musical structure, they refer to the time signature (so each plug-in knows what a “bar” is)
- To play exactly together, they sync to the song position (so each plug-in knows which beat is the “down beat”)
Sequencer-type plug-ins like MIDIBox (and also many drum-machine plug-ins, and any software instrument with an internal sequencer capable of playing more than one-measure loops) also sync to their host Transport's song position in order to play in a fully coordinated way. For example, if you had one plug-in playing an 8-measure sequence, and another playing a 4-measure sequence, it would be critical that both “line up” at the initial beat of both sequences.
Unify has its own Transport
It's pretty easy to understand why the Unify stand-alone app has a Transport–because it must, in order to keep multiple plug-in instances running in sync. However, the Unify plug-ins also have a Transport, and it's important to understand why, and how both plug-ins and the host (e.g. DAW) relate to the Unify Transport:
- Unify's Transport is the mechanism for synchronizing multiple plug-in instances running in Unify.
- Plug-in instances can't communicate directly with one another; they must sync to a common Transport.
- Plug-in instances running inside Unify “see” Unify's Transport, NOT the host's.
- Hence it's very important that Unify's transport be able to sync to the host's Transport (so the plug-ins will, as well).
- When Unify's Transport is set to “follow host”, it will automatically adjust its bpm rate and time signature to match the host's Transport, and will automatically start and stop when the host's transport does. Furthermore, it will also synchronize its “song position” (current measure and beat numbers) with that of the host, when the host Transport is running.
- When the host's Transport is not running, or when Unify's “follow host” checkbox is NOT checked, Unify's Transport works entirely independently, just as it does when running stand-alone.
As with nearly all of Unify's included plug-ins, just about all of MIDIBox's parameters can be linked to Macro Knobs. However, Unify v1.8 added four new parameters which are a bit special, because they allow triggering actions rather than adjusting parameter values:
- Prev MIDI File and Next MIDI File correspond to the “-” and “+” buttons below “Automation”, to select the previous or next MIDI file (sorted alphabetically) in the current MIDI-files folder.
- Prev MIDI Track and Next MIDI Track select the next or previous track in the Track menu.
These four parameters are rising-edge triggered. This means when the parameter value changes from anything below 0.5 to something above 0.5, the action is triggered. When the parameter value subsequently drops below the 0.5 threshold, nothing happens.