Unify Manual

Your complete reference to PlugInGuru's creative playground!

User Tools

Site Tools


midibox

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:

GUI controls

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.

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.
  • 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.

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)
    • Checking Transpose causes output notes to be transposed according to notes you play on the keyboard
    • 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.)

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.
    • 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.)

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.)

Audition controls

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

This section will be fleshed out further in time. For now, here are the 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.
midibox.txt · Last modified: 2020/08/15 00:33 by shane