User Tools

Site Tools


MIDI Remote Control

mAirList can use any MIDI device for remote control. You can also use scripts to send MIDI messages from mAirList to a MIDI device.


Open the config app or Control Panel, go to the Remote Control page, and add a new MIDI remote control.

In the dialog that appears, first select the desired MIDI device from the list on the top:

The Monitor function is only available when a valid device is selected. It will always be enabled when you configure an enabled MIDI remote from the Control Panel, i.e., if the mAirList main program is running. All received MIDI messages will be displayed in the monitor list:

You can just double-click any message to add it to the commands list and assign a remote control command to it:

Each MIDI message consists of three values:

  • Status (or Channel)
  • Data1
  • Data2

The values are displayed in hexadecimal format. For Data2, there is an additional Condition, so that the remote control command will be executed for a range of Data2 values:

  • = - Command will be executed if Data2 equals the specified value.
  • != - Command will be executed if Data2 does not equal the specified value.
  • < - Command will be executed if Data2 is less than the specified value.
  • <= - Command will be executed if Data2 is less or equal the specified value.
  • > - Command will be executed if Data2 is greater than the specified value.
  • >= - Command will be executed if Data2 is greater or equal the specified value.
  • * - Command will be executed regardless of the Data2 value.

When using ranges for Data2, you can include the $DATA2 variable in the remote control command, which will be replaced by the received Data2 value (in the range 0..127, decimal notation). This is particularly useful when you want to use a fader on your MIDI controller to control the volume of a player in mAirList. Just type the following command:


Or for voicetracking player A:


This will set the volume to the fader position. The /127 parts defines the 0 dB point to be at the upper end of the fader range. You could also use a value like /100 if you want some overhead in the volume.

The VOLUME command will automatically use a reasonable logarithmic scale to convert the fader value to a volume. There is no need for any logarithmic conversions.


Any received MIDI message will also be passed to background scripts, using the following procedure:

// Called when a MIDI message is received
procedure OnMidiMessage(Device: integer; Status, Data1, Data2: byte);

There is another procedure that will catch all MIDI SysEx messages:

// Called when a MIDI sysex is received
procedure OnMidiSysex(Device: integer; Data: string);

If you want to send back messages to the MIDI device, you should first enumerate the available devices, as the order of the output devices will not necessarily coincide with the order of the input devices. The following procedure will list all available output devices to the System Log:


At the beginning of your script (or in the OnLoad procedure in case of a background script), you must first use the MidiOutOpen procedure to open the device for output, e.g. the device with index 1:


Then you can send messages to that device. Note that we use hexadecimal values here, prefixed by $ in the Pascal language.

MidiOut(1, $B0, $10, 0); // device, status, data1, data2

There is also a procedure to send out SysEx messages:

MidiOutSysEx(1, 'somesysexdata');

At the end of the script, or in OnUnload, you should close the device again:

config/remotecontrol/midi.txt · Last modified: 2020/01/12 14:29 by tondose