MIDI Designer Reference Manual
MIDI Designer Reference Manual
MIDI Designer A to Z
Alphabetical list of MD functions, capability, and related topics.
Work in Progress - starting with recent functionality adds not otherwise described in manual and recent help desk questions.
added in 2.300
Ableton Link synchronizes beat, tempo, and start/stop in music apps. Available in Ableton plus other apps. Link capability varies by device.
Link is a technology that keeps devices in time over a local network, so you can forget the hassle of setting up and focus on playing music. Link is now part of Live, and also comes as a built-in feature of other software and hardware for music making. ableton.com/en/link
MD syncs Beat, Tempo, and Start/Stop.
Ableton Link provides the beat & tempo for MD Loopers.
Ableton Link is configured in MORE / Connections / Ableton Link. This brings up a menu with the Link settings.
When enabled, a pop-up will appear when devices join and leave the Link.
Supporting Ableton Link are three control subtypes:
For a sequential beat display, create four buttons (no MIDI Send / Receive) and make them subcontrols of the beat knob then hide the beat knob
Link Beat knob can be used to drive other desired action in MDP2 via subcontrol relationships, controllable via the Play and Tempo controls, such as continuous panning LFOs, etc. MD will generate beat if no Link device is connected.
Continuous (or variable) controls send a value from a range of MIDI values from MIN to MAX, as set in the control's MIDI Properties panel or in the NAMED TICKS values. The NAMED TICKS option can provide non-continuous, arbitrary order, and repeated MIDI values, as desired. Compare to discrete controls (button only), which can send only one (on only) or two (on/off) different values.
Continuous controls:
The continuous control types provide different panel interfaces for the same MIDI control backend.
Continuous control types and key features:
| Type | Action | Displays | MIDI Properties |
|---|---|---|---|
| Knob | Up/Down * or Rotary | Single number &/or Named Ticks text # | All |
| Fader | Up/Down * | Number &/or Named Ticks text # | All |
| Cross Fader | Left/Right * | Single number &/or Named Ticks text # | All |
| X/Y | Left/Right & Up/Down + | Single number &/or Named Ticks text for each axis # | All |
| Picker | Up/Down, spin with momentum | Multiple lines of Numbers &/or Named Ticks text | All - Send On Release always active |
| * Rotate Touch Axis & Inverted options |
| + Inverted options |
| Rotate Touch Axis turns control action 90 degrees |
| Inverted changes control axis 180 degrees |
| Rotary requires a rotary sweeping motion to activate |
| # display options include handle, fill, ticks, display zero, numeric label, as applicable |
New in 10.3.0
All controls have complete flexibility in color and opacity. You can select a custom LED color for the Page and for each individual control.
Tap on Custom LED Color, then tap the circle under LED Color to bring up the color pickers.
LED Color will bring up the system color pickers, with all operating system options.
Tap for last color is also available.
New in 2.3300
Option in the Relationships pane. This provides for dynamic enable & disable of MIDI transmission and subcontrol response from the control.
When a button is selected for Enable/Disable, and that button is off:
When the button is on or there is no selection in this option, MIDI transmission and subcontrol response occurs.
The two controls have to be on the same page to select - the controls can be moved after selection.
New in 10.3.0
Highlight color (i.e., text color) is now selectable for individual controls. Options are:
Note: selecting Black Page color may override individual control selections
Added in 2.175
Make labels dynamic - show values from knobs, buttons and other controls. Show the name of a selected preset, change labels based on control settings - many uses to enhance your layout.
MIDI Learn button appears on control MIDI settings page.
MIDI Learn functionality by control type
| Control Type | “Learned” |
|---|---|
| Cc | Channel and Cc # |
| Note On / Off | Channel and Note # |
| Note On / On | Channel and Note # |
| NRPN | Channel and NRPN # |
| NRPN 16K | Channel and NRPN # |
| Bank / Prog | learn non functional * |
| Bank | Channel |
| Program Change | Channel |
| Pitch | learn non functional * |
| SysEx | SysEx Verbatim |
* only valid value to learn would be channel
Notes:
added in 2.300
Control Loopers – look-ahead, tempo-locked loopers with mute, reloop, and adjustable length.
When Ableton Link is running, MD is always capturing control actions, and on pressing the loop button, control actions during the selected number of prior beats is captured and looped.
Loopers bring one new control subtype - Link Looper - and three new relationships, selected in the Link Looper control properties page:
Note - these controls should typically be set to No MIDI Send / Receive
Notes
Related QA topic with sample Looper page
New in 10.3.0
Found under Config / Options
Creates all the available permutations of screenshots.
For a layout with numerous pages, can take some time - a max layout with 48 pages, 2 at a time, generates 2256 screen shots.
To stop the shots before ending, shift to another window (iPad) or close the app (Mac).
Screenshots are saved to:
The file names indicate left and right bank and page, as follows: bank-1-page-1-bank-2-page-5.jpg
To preclude filename chaos, file or delete screenshots from one layout before working on another. Identical filenames will be overwritten without prompt.
MORE button is used to access MIDI Designer menus on:
Tap an empty area of the screen to hide the MORE menu
Since Apple introduced multitasking, MD has attempted to maintain a non-aggression pact between our MORE button and the iPad … multi-tasking menu. Our challenge is that the … doesn't stay fixed, it wanders depending on zoom level, split, slide-over, and Stage Manager arrangement. We have tried other implementations, even dispensing with the MORE button, but we returned to MORE as the most approachable option.
If … is not behind MORE, you can directly press MORE
If … is behind MORE
* MORE drop down can be disabled in options
Unfortunately, there is no standard definition for negative values in MIDI spec, so each manufacturer does their own thing(s).
Examples are
With SysEx, it gets even hairier
Roland may set 0 at 08 00 00 00, so 08 00 00 01 is 1, 07 7F 7F 7F is minus one, etc. Or sometimes they set 0 at 04 00 00 00. Or maybe completely arbitrary, such as 0 = -Inf, 1 = -53, 2 = -51.7, 3 = -50.4, etc.
For simple cases, such as zero at 64, you can set display min and max as appropriate for the negative values.
Search for “negative” in the forums and you will see some prior discussions.
For more complicated cases, Named Ticks are the solution. Easiest to build in a spreadsheet, then paste into the Named Ticks text field.
For example, presume a two byte SysEx, 0 is at 00 00, 1 is 00 01, -1 is 7F 7F, etc. We can build the table as follows:
| Value | MSB | LSB | 128*MSB+LSB # | Load this Column in Named Ticks |
|---|---|---|---|---|
| … | ||||
| -2 | 7F | 7E | 16382 | 16382 \ -2 |
| -1 | 7F | 7F | 16383 | 16383 \ -1 |
| 0 | 00 | 00 | 0 | 0 \ 0 |
| 1 | 00 | 01 | 1 | 1 \ 1 |
| 2 | 00 | 02 | 2 | 2 \ 2 |
| … |
# Hex2Dec(MSB) * 128 + Hex2Dec(LSB), or use decimal in MSB, LSB columns (7F = 127, etc)
While the SysEx definition field uses Hex, the named ticks values are decimal.
Note - this example puts the display value in the text position (and we just skip the display value). This is necessary if your negative values exceed -99, the negative limit for displayed value.
Why does not MD have options for the negative values? Frankly there are too many possible formats, even within a single manufacturer, and you do have a generic approach with Named Ticks.
Added in 2.300
MIDI Message option that turns off MIDI functionality on a control.
Useful on controls being used in Relationships - Other to preclude unneeded MIDI messages.
Previously you had to assign these controls to a message type that would not cause undesired effects or block with outbound StreamByter rules.
In the beginning, there was a single iPad page size, and all layouts were the same size.
We now have a wide variety of page sizes, and a layout's aspect ratio may not match the current device. In this case, you have two icons at the bottom right of the display.
- magnifying glass - zooms in to full width, or out to show full layout
- hand - when highlighted and zoomed-in, repositions layout view
There is capability to disable these icons when the aspect ratio does not match.
These icons not shown on a Mac. The layout is always shown full width. Use your trackpad or mouse to zoom layout view.
New layouts will start in a device's native capability. Mac layouts will be a maximum size. For more universal compatibility you can start with a smaller device layout size. This is not currently a menu option - see Q&A forum where some smaller blank layouts are posted.
You can resize an existing layout to a devices native size - More / Config / Change Layout Size. Choosing TALL (i.e., portrait) with a layout designed in WIDE (landscape) can have adverse impact on control positioning.
The control type PICKER was introduced in MD 2.0 as part of the Extra Features Pack. In MD Pro-X, it is always included (as are all the legacy in-app purchases)
The PICKER adds a flexible text display to the existing continuous controls. The continuous control types provide different panel interfaces for the same MIDI control backend.
Continuous controls can send a value from a range of MIDI values (min to max)
Button controls can only send a one (on) or two (on/off) discrete values
MIDI Properties
Examples of some PICKERS uses:
A picker for drum machine preset patterns:
PICKERS can present any text information. In the RD2000 example below, we see the tone source and number, category, and name. In this advanced example:
Text formatting in PICKERS:
New in 2.3300
Randomize Subcontrol: have any subcontrol switch to a random value on button press
A new selection in the Options as Super panel. When the supercontrol is activated, all subcontrols are sent to a random position within the control range.
Randomize works best as a momentary button, but can be enabled on most type controls.
Randomize on a knob will send a large number of random values as the control is moved above 64. Below 64 it has no impact.
Multi-level randomize example - the main button randomizes an array of supercontrol knobs and their enable / disable buttons - randomizing which of the subcontrols that get randomized.
Modifying one control behavior with a second, not super/sub relationship. These provide the additional building blocks to implement complex relationships. These relationships are dynamic - they can change during PLAY - a control is selected that will dynamically enable / disable the behavior. In most cases, the implementing control is a button. The one exception is the knob used for LOOPER length.
| Option | Action | Notes |
|---|---|---|
| A / B Control | Send values to a second sets of identical controls | A-B exchange activated in CONFIG / MIDI |
| Button Off Sets to Default | Returns controls to default value when button goes off | |
| Enable / Disable (transmit) | Turns on and off control transmit | Affects both MIDI transmit and subcontrol change |
| Enable / Disable Receive | Turns on & off MIDI receive | If a selection is made in this box, the MIDI Receive option on the MIDI page will not be visible |
| Extra CC and Hold | When touching a continuous control, activates the toggle button - the extra Cc | Continuous controls only, except Pickers - in Picker properties, but does not function |
| Label Value Source | Dynamically change label text | Labels only |
| Latch (Make Toggle) | Dynamically change a momentary button to toggle | Momentary buttons only |
| Looper controls | Mute, Reloop, and Length looper control | Target control must be LOOPER |
| Recall Preset | Recalls a preset | Momentary or toggle |
| Show / Hide (Panels) | Dynamically show / hide panels | |
| Store Preset | Stores a preset | Momentary or toggle |
Notes
Added in 2.150
Dynamically show or Hide a panel. Group a set of controls and labels on a panel, then choose when they are displayed.
Example uses;
The controls must be on the same page to select, but can then be moved
Tips to working with stacked panels:
To implement complex show / hide, consider an array of knobs with named ticks defining when panels show and hide, driving the individual panel Show / Hide buttons
Examples:
Jupiter X(m) ZEN-Core Editor - sound chain dynamically updates based on oscillator mode
Jupiter X(m) Manager - menus change based on effects selected, show effects in sound functional flow, show global or scene controls settings, etc.
Added in 10.5.0
A new variable “S” (for String) in System Exclusive (SysEx) format to receive or transmit string data (patch, program, tone, etc., names). S works alongside the current L and V variables in the SysEx message definition.
To support this addition, the SysEx architecture was updated, which should correct the legacy occasions where some combinations of L and V did not function properly.
A new Relationship - Other is added - Enable / Disable Receive Button. This provides for dynamic control of when the SysEx string data can be updated. It is also generally useful for switching MIDI Receive for any control.
* Note - L is also known as Channel, and is controlled by a Channel Changer control. In SysEx format it does not control channel, but is an extra variable, not limited to 0-15, but can have values from 0-7F.
Note - Channel appearing as an option in the variables pane indicates there is no channel changer supercontrol connected.
As of beta 5-24
A few “helper” controls will be required to command the target device to transmit the strings for storage. In this example, we see the Enable / Disable Receive button on the left, a “Query” button in the middle, and a “scanner” on the right - the “scanner” can be hidden in play mode.
The above approach works when patch values are stored in discrete memory locations. Some devices may only have the data accessible in scratchpad memory. In this case, we would build a set of helper controls that successively recall all the patches to scratchpad, read the string, then move to the next patch.
StreamByter could be used to add a synthetic V to the inbound data for storing.
Once the data is retrieved, you can copy the data out of the Named Ticks for other uses - create a set list or patch cheat sheet. Use a spreadsheet to separate the text from the MIDI and display values.
Advanced - pre-process the inbound string data with a SteamByter rule to add bank information in place of the numeric label, ex: A-02 or 6-15. See Patterns in above figure.
So we have all the patch names in memory, and want to use the names to recall the a specific patch. But the SysEx string data is not the format needed to change the patch - it is the format to change the patch name.
Typically, the solution is to make the control with the patch names a supercontrol of the controls necessary to recall the patch.