Skip to content

Instantly share code, notes, and snippets.

@dolanor
Created April 5, 2026 20:11
Show Gist options
  • Select an option

  • Save dolanor/f6a61ef47c4e249e837eb613845e52e7 to your computer and use it in GitHub Desktop.

Select an option

Save dolanor/f6a61ef47c4e249e837eb613845e52e7 to your computer and use it in GitHub Desktop.
Hercules DJ Control Air+ mixxx configuration
//
// ****************************************************************************
// * Mixxx mapping script file for the Hercules DJControl Air+.
// * Author: DJ Phatso, contributions by Kerrick Staley and Tanguy Herrmann (dolanor)
// * Version 1.1 (March 2019)
// * Forum: https://www.mixxx.org/forums/viewtopic.php?f=7&t=9403
// * Wiki: http://www.mixxx.org/wiki/
// Changes to v1.1
// - Controller knob/slider values are queried on startup, so MIXXX is synced.
// - Fixed vinyl button behavior the first time it's pressed.
//
// v1.0 : Original release
// TODO: Functions that could be implemented to the script:
//
// - Beats LED
//
//
// ****************************************************************************
function AirPlus() {}
var AirPlus = {};
AirPlus.scratchButtonState = true;
AirPlus.EffectsState = new Map();
AirPlus.EffectsState.set("[EffectRack1_EffectUnit1_Effect1]", 0);
AirPlus.EffectsState.set("[EffectRack1_EffectUnit1_Effect2]", 0);
AirPlus.EffectsState.set("[EffectRack1_EffectUnit1_Effect3]", 0);
AirPlus.EffectsState.set("[EffectRack1_EffectUnit2_Effect1]", 0);
AirPlus.EffectsState.set("[EffectRack1_EffectUnit2_Effect2]", 0);
AirPlus.EffectsState.set("[EffectRack1_EffectUnit2_Effect3]", 0);
AirPlus.EffectsButtonHold = new Map();
AirPlus.EffectsButtonHold.set("[EffectRack1_EffectUnit1_Effect1]", false);
AirPlus.EffectsButtonHold.set("[EffectRack1_EffectUnit1_Effect2]", false);
AirPlus.EffectsButtonHold.set("[EffectRack1_EffectUnit1_Effect3]", false);
AirPlus.EffectsButtonHold.set("[EffectRack1_EffectUnit2_Effect1]", false);
AirPlus.EffectsButtonHold.set("[EffectRack1_EffectUnit2_Effect2]", false);
AirPlus.EffectsButtonHold.set("[EffectRack1_EffectUnit2_Effect3]", false);
function logX(context, fxState, holdState, value) {
print("fx: "+ fxState + ", hold: " + holdState + ", val: " + value + ", " + context );
}
AirPlus.toggleAirControlEffect = function(channel, control, value, status, group) {
script.midiDebug(channel, control, value, status, group);
print("================ in toggle fx ===========================");
if (value > 0) {
AirPlus.EffectsButtonHold.set(group, true);
} else {
AirPlus.EffectsButtonHold.set(group, false);
}
logX("hold ?", enabled, AirPlus.EffectsButtonHold.get(group), value);
var buttonPressed = false;
if (value > 0) {
buttonPressed = true;
} else if (value == 0) {
buttonPressed = false;
}
fxEnabled = AirPlus.EffectsState.get(group)
logX("before fx", fxEnabled, AirPlus.EffectsButtonHold.get(group), value);
var enabled = 0;
if (buttonPressed) {
if (fxEnabled == 1) {
enabled = 0;
} else if (fxEnabled == 0) {
enabled = 1;
}
logX("fx ?", enabled, AirPlus.EffectsButtonHold.get(group), value);
AirPlus.EffectsState.set(group, enabled);
engine.setParameter(group, "enabled", enabled);
}
}
AirPlus.fxAirControl = function(channel, control, value, status, group) {
script.midiDebug(channel, control, value, status, group);
if (value) {
for (var [key, fxButtonHold] of AirPlus.EffectsButtonHold) {
if (fxButtonHold) {
engine.setParameter(key, "meta", value/128);
}
print("in fx state ON value: " + value);
}
}
};
AirPlus.init = function() {
//Update all LED states
midi.sendShortMsg(0xB0, 0x7F, 0x00);
midi.sendShortMsg(0xB1, 0x7F, 0x00);
// Vinyl button LED On.
midi.sendShortMsg(0x90, 0x39, 0x7F);
// Headphone CUE/MIX state
if(engine.getValue("[Master]", "headMix") > 0.5) {
midi.sendShortMsg(0x90, 0x38, 0x7f) // headset "Mix" button LED
} else {
midi.sendShortMsg(0x90, 0x37, 0x7f) // headset "Cue" button LED
}
//Enable Soft takeover
engine.softTakeover("[Master]","crossfader",true);
engine.softTakeover("[QuickEffectRack1_[Channel1]]","super1",true);
engine.softTakeover("[QuickEffectRack1_[Channel2]]","super1",true);
//Set effects Levels - Dry/Wet - Filters
engine.setParameter("[EffectRack1_EffectUnit1_Effect1]", "meta", 0.6);
engine.setParameter("[EffectRack1_EffectUnit1_Effect2]", "meta", 0.6);
engine.setParameter("[EffectRack1_EffectUnit1_Effect3]", "meta", 0.6);
engine.setParameter("[EffectRack1_EffectUnit2_Effect1]", "meta", 0.6);
engine.setParameter("[EffectRack1_EffectUnit2_Effect2]", "meta", 0.6);
engine.setParameter("[EffectRack1_EffectUnit2_Effect3]", "meta", 0.6);
engine.setParameter("[EffectRack1_EffectUnit1]", "mix", 0.6);
engine.setParameter("[EffectRack1_EffectUnit2]", "mix", 0.6);
engine.setParameter("[QuickEffectRack1_[Channel1]]","super1", 0.5);
engine.setParameter("[QuickEffectRack1_[Channel2]]","super1", 0.5);
// Ask the controller to send all current knob/slider values over MIDI, which will update
// the corresponding GUI controls in MIXXX.
midi.sendShortMsg(0xB0, 0x7F, 0x7F);
};
// Headphone CUE/MIX buttons status
AirPlus.headCue = function(midino, control, value, status, group) {
if(engine.getValue(group, "headMix") == 0) {
engine.setValue(group, "headMix", -1.0);
midi.sendShortMsg(0x90, 0x37, 0x7f);
midi.sendShortMsg(0x90, 0x38, 0x00);
}
};
AirPlus.headMix = function(midino, control, value, status, group) {
if(engine.getValue(group, "headMix") != 1) {
engine.setValue(group, "headMix", 0);
midi.sendShortMsg(0x90, 0x37, 0x00);
midi.sendShortMsg(0x90, 0x38, 0x7f);
}
};
// The Vinyl button, used to enable or disable scratching on the jog wheels.
AirPlus.vinylButton = function(channel, control, value, status, group) {
if (value) {
if (AirPlus.scratchButtonState) {
AirPlus.scratchButtonState = false;
midi.sendShortMsg(0x90, 0x39, 0x00);
} else {
AirPlus.scratchButtonState = true;
midi.sendShortMsg(0x90, 0x39, 0x7F);
}
}
};
// The pressure action over the jog wheel
AirPlus.wheelTouchDA = function(channel, control, value, status, group) {
channel = channel + 1;
if (value > 0 && (engine.getValue("[Channel1]", "play") != 1 || AirPlus.scratchButtonState)) {
// Touching the wheel.
var alpha = 1.0 / 8;
var beta = alpha / 16;
engine.scratchEnable(1, 400, 33 + 1 / 3, alpha, beta);
} else {
// Released the wheel.
engine.scratchDisable(1);
}
};
AirPlus.wheelTouchDB = function(channel, control, value, status, group) {
channel = channel + 2;
if (value > 0 && (engine.getValue("[Channel2]", "play") != 1 || AirPlus.scratchButtonState)) {
// Touching the wheel.
var alpha = 1.0 / 8;
var beta = alpha / 32;
engine.scratchEnable(2, 400, 33 + 1 / 3, alpha, beta);
} else {
// Released the wheel.
engine.scratchDisable(2);
}
};
// Using the top of wheel for scratching (Vinyl button On) and bending (Vinyl button Off)
AirPlus.scratchWheelDA = function(channel, control, value, status, group) {
var newValue;
if (value < 64) {
newValue = value;
} else {
newValue = value - 128;
}
if (engine.isScratching(1)) {
engine.scratchTick(1, newValue); // Scratch!
} else {
engine.setValue('[Channel' + 1 + ']', 'jog', newValue); // Pitch bend
}
}
AirPlus.scratchWheelDB = function(channel, control, value, status, group) {
var newValue;
if (value < 64) {
newValue = value;
} else {
newValue = value - 128;
}
// In either case, register the movement
if (engine.isScratching(2)) {
engine.scratchTick(2, newValue); // Scratch!
} else {
engine.setValue('[Channel' + 2 + ']', 'jog', newValue); // Pitch bend
}
}
// Using the side of wheel for the bending
AirPlus.bendWheelDA = function(channel, control, value, status, group) {
var newValue;
if (value < 64) {
newValue = value;
} else {
newValue = value - 128;
}
{
engine.setValue('[Channel' + 1 + ']', 'jog', newValue); // Pitch bend
}
}
AirPlus.bendWheelDB = function(channel, control, value, status, group) {
// A: For a control that centers on 0:
var newValue;
if (value < 64) {
newValue = value;
} else {
newValue = value - 128;
} {
engine.setValue('[Channel' + 2 + ']', 'jog', newValue); // Pitch bend
}
}
AirPlus.shutdown = function() {
for (var i = 1; i <= 40; i++) {
midi.sendShortMsg(0x90, i, 0x00);
}
};
<?xml version='1.0' encoding='utf-8'?>
<MixxxControllerPreset schemaVersion="1" mixxxVersion="2.2">
<info>
<name>djcontrolair+</name>
<author>DJ Phatso for Hercules Technical Support + Tanguy Herrmann (dolanor)</author>
<description>MIDI Preset for Hercules DJControl Air+</description>
</info>
<controller id="DJControl">
<scriptfiles>
<file filename="lodash.mixxx.js" functionprefix=""/>
<file filename="midi-components-0.0.js" functionprefix=""/>
<file filename="DJControl_AirPlus.script.js" functionprefix="AirPlus"/>
</scriptfiles>
<controls>
<control>
<group>[Master]</group>
<key>crossfader</key>
<description>Crossfader</description>
<status>0xB0</status>
<midino>0x01</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>volume</key>
<description>Volume Deck A</description>
<status>0xB0</status>
<midino>0x02</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit1]</group>
<key>group_[Channel1]_enable</key>
<description>(Button 4)</description>
<status>0x90</status>
<midino>0x04</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>rate</key>
<status>0xB0</status>
<midino>0x04</midino>
<options>
<fourteen-bit-msb/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>beatloop_0.5_toggle</key>
<description>Loop 1/2 Beat (Button 1)</description>
<status>0x90</status>
<midino>0x05</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[EqualizerRack1_[Channel1]_Effect1]</group>
<key>parameter3</key>
<description>EQ HIGH Deck A</description>
<status>0xB0</status>
<midino>0x05</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>beatloop_1_toggle</key>
<description>Loop 1 Beat (Button 2)</description>
<status>0x90</status>
<midino>0x06</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[EqualizerRack1_[Channel1]_Effect1]</group>
<key>parameter2</key>
<description>EQ MID Deck A</description>
<status>0xB0</status>
<midino>0x06</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>beatloop_2_toggle</key>
<description>Loop 2 Beat (Button 3)</description>
<status>0x90</status>
<midino>0x07</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[EqualizerRack1_[Channel1]_Effect1]</group>
<key>parameter1</key>
<description>EQ LOW Deck A</description>
<status>0xB0</status>
<midino>0x07</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>beatloop_4_toggle</key>
<description>Loop 4 Beat (Button 4)</description>
<status>0x90</status>
<midino>0x08</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>pregain</key>
<description>Platine 1: gain</description>
<status>0xB0</status>
<midino>0x08</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit1_Effect1]</group>
<key>effect_selector</key>
<description>SHIFT +(Button 1)</description>
<status>0x90</status>
<midino>0x09</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>volume</key>
<description>Volume Deck B</description>
<status>0xB0</status>
<midino>0x09</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit1_Effect2]</group>
<key>effect_selector</key>
<description>SHIFT +(Button 2)</description>
<status>0x90</status>
<midino>0x0A</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>rate</key>
<status>0xB0</status>
<midino>0x0A</midino>
<options>
<fourteen-bit-msb/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit1_Effect3]</group>
<key>effect_selector</key>
<description>SHIFT +(Button 3)</description>
<status>0x90</status>
<midino>0x0B</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[EqualizerRack1_[Channel2]_Effect1]</group>
<key>parameter3</key>
<description>EQ HIGH Deck B</description>
<status>0xB0</status>
<midino>0x0B</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[EqualizerRack1_[Channel2]_Effect1]</group>
<key>parameter2</key>
<description>EQ MID Deck B</description>
<status>0xB0</status>
<midino>0x0C</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[EqualizerRack1_[Channel2]_Effect1]</group>
<key>parameter1</key>
<description>EQ LOW Deck B</description>
<status>0xB0</status>
<midino>0x0D</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>pregain</key>
<description>Platine 2: gain</description>
<status>0xB0</status>
<midino>0x0E</midino>
<options>
<normal/>
</options>
</control>
<control>
<key>AirPlus.fxAirControl</key>
<description>Air control</description>
<status>0xB0</status>
<midino>0x0F</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>play</key>
<description>Play button</description>
<status>0x90</status>
<midino>0x11</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>cue_default</key>
<description>Cue button</description>
<status>0x90</status>
<midino>0x12</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>sync_enabled</key>
<description>Sync button</description>
<status>0x90</status>
<midino>0x13</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>pfl</key>
<description>PFL button</description>
<status>0x90</status>
<midino>0x19</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>LoadSelectedTrack</key>
<description>LOAD A button</description>
<status>0x90</status>
<midino>0x1A</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>AirPlus.wheelTouchDA</key>
<description>Jog Wheel Touch Deck A</description>
<status>0x90</status>
<midino>0x1B</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit2_Effect1]</group>
<key>AirPlus.toggleAirControlEffect</key>
<description>(Button 1)</description>
<status>0x90</status>
<midino>0x1C</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit2_Effect2]</group>
<key>AirPlus.toggleAirControlEffect</key>
<description>(Button 2)</description>
<status>0x90</status>
<midino>0x1D</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit2_Effect3]</group>
<key>AirPlus.toggleAirControlEffect</key>
<description>(Button 3)</description>
<status>0x90</status>
<midino>0x1E</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit2]</group>
<key>group_[Channel2]_enable</key>
<description>(Button 4)</description>
<status>0x90</status>
<midino>0x1F</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>beatloop_0.5_toggle</key>
<description>Loop 1/2 Beat (Button 1)</description>
<status>0x90</status>
<midino>0x20</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>beatloop_1_toggle</key>
<description>Loop 1 Beat (Button 2)</description>
<status>0x90</status>
<midino>0x21</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>beatloop_2_toggle</key>
<description>Loop 2 Beat (Button 3)</description>
<status>0x90</status>
<midino>0x22</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>beatloop_4_toggle</key>
<description>Loop 4 Beat (Button 4)</description>
<status>0x90</status>
<midino>0x23</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit2_Effect1]</group>
<key>effect_selector</key>
<description>SHIFT +(Button 1)</description>
<status>0x90</status>
<midino>0x24</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>rate</key>
<status>0xB0</status>
<midino>0x24</midino>
<options>
<fourteen-bit-lsb/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit2_Effect2]</group>
<key>effect_selector</key>
<description>SHIFT +(Button 2)</description>
<status>0x90</status>
<midino>0x25</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit2_Effect3]</group>
<key>effect_selector</key>
<description>SHIFT +(Button 3)</description>
<status>0x90</status>
<midino>0x26</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>rate</key>
<status>0xB0</status>
<midino>0x2A</midino>
<options>
<fourteen-bit-lsb/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>play</key>
<description>Play button</description>
<status>0x90</status>
<midino>0x2C</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>cue_default</key>
<description>Cue button</description>
<status>0x90</status>
<midino>0x2D</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>sync_enabled</key>
<description>Sync button</description>
<status>0x90</status>
<midino>0x2E</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>pfl</key>
<description>PFL button</description>
<status>0x90</status>
<midino>0x34</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>LoadSelectedTrack</key>
<description>LOAD B button</description>
<status>0x90</status>
<midino>0x35</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>AirPlus.wheelTouchDB</key>
<description>Jog Wheel Touch Deck B</description>
<status>0x90</status>
<midino>0x36</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group>[Master]</group>
<key>AirPlus.headCue</key>
<description>Headphone CUE button</description>
<status>0x90</status>
<midino>0x37</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group>[Master]</group>
<key>AirPlus.headMix</key>
<description>Headphone MIX button</description>
<status>0x90</status>
<midino>0x38</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group>[Master]</group>
<key>AirPlus.vinylButton</key>
<description>Vinyl button</description>
<status>0x90</status>
<midino>0x39</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group>[Master]</group>
<key>maximize_library</key>
<description>Browser button - Maximize Library view</description>
<status>0x90</status>
<midino>0x41</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[AutoDJ]</group>
<key>enabled</key>
<description>AutoDJ On/Off</description>
<status>0x90</status>
<midino>0x42</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Library]</group>
<key>MoveFocus</key>
<description>Browser button</description>
<status>0x90</status>
<midino>0x43</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>hotcue_1_activate</key>
<description>PAD 1</description>
<status>0x90</status>
<midino>0x44</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>hotcue_1_clear</key>
<description>PAD 1</description>
<status>0xB0</status>
<midino>0x44</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>hotcue_2_activate</key>
<description>PAD 2</description>
<status>0x90</status>
<midino>0x45</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>hotcue_2_clear</key>
<description>PAD 2</description>
<status>0xB0</status>
<midino>0x45</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>hotcue_3_activate</key>
<description>PAD 3</description>
<status>0x90</status>
<midino>0x46</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>hotcue_3_clear</key>
<description>PAD 3</description>
<status>0xB0</status>
<midino>0x46</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>hotcue_4_activate</key>
<description>PAD 4</description>
<status>0x90</status>
<midino>0x47</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>hotcue_4_clear</key>
<description>PAD 4</description>
<status>0xB0</status>
<midino>0x47</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Sampler1]</group>
<key>cue_gotoandplay</key>
<description>PAD 1 - Deck A</description>
<status>0x90</status>
<midino>0x48</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Sampler2]</group>
<key>cue_gotoandplay</key>
<description>PAD 2 - Deck A</description>
<status>0x90</status>
<midino>0x49</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Sampler3]</group>
<key>cue_gotoandplay</key>
<description>PAD 3 - Deck A</description>
<status>0x90</status>
<midino>0x4A</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Sampler4]</group>
<key>cue_gotoandplay</key>
<description>PAD 4 - Deck A</description>
<status>0x90</status>
<midino>0x4B</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>hotcue_1_activate</key>
<description>PAD 1</description>
<status>0x90</status>
<midino>0x4C</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>hotcue_1_clear</key>
<description>PAD 1</description>
<status>0xB0</status>
<midino>0x4C</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>hotcue_2_activate</key>
<description>PAD 2</description>
<status>0x90</status>
<midino>0x4D</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>hotcue_2_clear</key>
<description>PAD 2</description>
<status>0xB0</status>
<midino>0x4D</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>hotcue_3_activate</key>
<description>PAD 3</description>
<status>0x90</status>
<midino>0x4E</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>hotcue_3_clear</key>
<description>PAD 3</description>
<status>0xB0</status>
<midino>0x4E</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>hotcue_4_activate</key>
<description>PAD 4</description>
<status>0x90</status>
<midino>0x4F</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>hotcue_4_clear</key>
<description>PAD 4</description>
<status>0xB0</status>
<midino>0x4F</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Sampler5]</group>
<key>cue_gotoandplay</key>
<description>PAD 1 - Deck B</description>
<status>0x90</status>
<midino>0x50</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Sampler6]</group>
<key>cue_gotoandplay</key>
<description>PAD 2 - Deck B</description>
<status>0x90</status>
<midino>0x51</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Sampler7]</group>
<key>cue_gotoandplay</key>
<description>PAD 3 - Deck B</description>
<status>0x90</status>
<midino>0x52</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Sampler8]</group>
<key>cue_gotoandplay</key>
<description>PAD 4 - Deck B</description>
<status>0x90</status>
<midino>0x53</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>AirPlus.bendWheelDA</key>
<description>Pitch Bend Deck A (Jog-Wheel)</description>
<status>0xB0</status>
<midino>0x66</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>AirPlus.bendWheelDB</key>
<description>Pitch Bend Deck B (Jog-Wheel)</description>
<status>0xB0</status>
<midino>0x67</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>AirPlus.scratchWheelDA</key>
<description>Scratch Deck A (Jog-Wheel)</description>
<status>0xB0</status>
<midino>0x68</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>AirPlus.scratchWheelDB</key>
<description>Scratch Deck B (Jog-Wheel)</description>
<status>0xB0</status>
<midino>0x69</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group>[Library]</group>
<key>MoveVertical</key>
<description>Move Vertical (Browser Knob)</description>
<status>0xB0</status>
<midino>0x6A</midino>
<options>
<selectknob/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit1_Effect1]</group>
<key>AirPlus.toggleAirControlEffect</key>
<description>(Button 1)</description>
<status>0x90</status>
<midino>0x01</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit1_Effect2]</group>
<key>AirPlus.toggleAirControlEffect</key>
<description>(Button 2)</description>
<status>0x90</status>
<midino>0x02</midino>
<options>
<key>AirPlus.toggleAirControlEffect</key>
<script-binding/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit1_Effect3]</group>
<key>AirPlus.toggleAirControlEffect</key>
<description>(Button 3)</description>
<status>0x90</status>
<midino>0x03</midino>
<options>
<script-binding/>
</options>
</control>
</controls>
<outputs>
<output>
<group>[AutoDJ]</group>
<key>enabled</key>
<description>LOAD Prepare button LED</description>
<status>0x90</status>
<midino>0x42</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel1]</group>
<key>beatloop_0.5_enabled</key>
<description>Loop 1/2 Beat (Pad 1)</description>
<status>0x90</status>
<midino>0x05</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel1]</group>
<key>beatloop_1_enabled</key>
<description>Loop 1 Beat (Pad 2)</description>
<status>0x90</status>
<midino>0x06</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel1]</group>
<key>beatloop_2_enabled</key>
<description>Loop 2 Beat (Pad 3)</description>
<status>0x90</status>
<midino>0x07</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel1]</group>
<key>beatloop_4_enabled</key>
<description>Loop 4 Beat (Pad 4)</description>
<status>0x90</status>
<midino>0x08</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel1]</group>
<key>cue_indicator</key>
<description>CUE LED Deck A</description>
<status>0x90</status>
<midino>0x12</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel1]</group>
<key>hotcue_1_enabled</key>
<description>Hotcue 1 (Pad 1)</description>
<status>0xB0</status>
<midino>0x44</midino>
<on>0x7E</on>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel1]</group>
<key>hotcue_1_enabled</key>
<description>Hotcue 1 (Pad 1)</description>
<status>0x90</status>
<midino>0x44</midino>
<on>0x7E</on>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel1]</group>
<key>hotcue_2_enabled</key>
<description>Hotcue 2 (Pad 2)</description>
<status>0xB0</status>
<midino>0x45</midino>
<on>0x7E</on>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel1]</group>
<key>hotcue_2_enabled</key>
<description>Hotcue 2 (Pad 2)</description>
<status>0x90</status>
<midino>0x45</midino>
<on>0x7E</on>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel1]</group>
<key>hotcue_3_enabled</key>
<description>Hotcue 3 (Pad 3)</description>
<status>0xB0</status>
<midino>0x46</midino>
<on>0x7E</on>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel1]</group>
<key>hotcue_3_enabled</key>
<description>Hotcue 3 (Pad 3)</description>
<status>0x90</status>
<midino>0x46</midino>
<on>0x7E</on>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel1]</group>
<key>hotcue_4_enabled</key>
<description>Hotcue 4 (Pad 4)</description>
<status>0xB0</status>
<midino>0x47</midino>
<on>0x7E</on>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel1]</group>
<key>hotcue_4_enabled</key>
<description>Hotcue 4 (Pad 4)</description>
<status>0x90</status>
<midino>0x47</midino>
<on>0x7E</on>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel1]</group>
<key>pfl</key>
<description>PFL LED DECK A</description>
<status>0x90</status>
<midino>0x19</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel1]</group>
<key>play_indicator</key>
<description>PLAY LED Deck A</description>
<status>0x90</status>
<midino>0x11</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel1]</group>
<key>sync_enabled</key>
<description>SYNC LED Deck A</description>
<status>0x90</status>
<midino>0x13</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel2]</group>
<key>beatloop_0.5_enabled</key>
<description>Loop 1/2 Beat (Pad 1)</description>
<status>0x90</status>
<midino>0x20</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel2]</group>
<key>beatloop_1_enabled</key>
<description>Loop 1 Beat (Pad 2)</description>
<status>0x90</status>
<midino>0x21</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel2]</group>
<key>beatloop_2_enabled</key>
<description>Loop 2 Beat (Pad 3)</description>
<status>0x90</status>
<midino>0x22</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel2]</group>
<key>beatloop_4_enabled</key>
<description>Loop 4 Beat (Pad 4)</description>
<status>0x90</status>
<midino>0x23</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel2]</group>
<key>cue_indicator</key>
<description>CUE LED Deck B</description>
<status>0x90</status>
<midino>0x2D</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel2]</group>
<key>hotcue_1_enabled</key>
<description>Hotcue 1 (Pad 1)</description>
<status>0xB0</status>
<midino>0x4C</midino>
<on>0x7E</on>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel2]</group>
<key>hotcue_1_enabled</key>
<description>Hotcue 1 (Pad 1)</description>
<status>0x90</status>
<midino>0x4C</midino>
<on>0x7E</on>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel2]</group>
<key>hotcue_2_enabled</key>
<description>Hotcue 2 (Pad 2)</description>
<status>0xB0</status>
<midino>0x4D</midino>
<on>0x7E</on>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel2]</group>
<key>hotcue_2_enabled</key>
<description>Hotcue 2 (Pad 2)</description>
<status>0x90</status>
<midino>0x4D</midino>
<on>0x7E</on>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel2]</group>
<key>hotcue_3_enabled</key>
<description>Hotcue 3 (Pad 3)</description>
<status>0xB0</status>
<midino>0x4E</midino>
<on>0x7E</on>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel2]</group>
<key>hotcue_3_enabled</key>
<description>Hotcue 3 (Pad 3)</description>
<status>0x90</status>
<midino>0x4E</midino>
<on>0x7E</on>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel2]</group>
<key>hotcue_4_enabled</key>
<description>Hotcue 4 (Pad 4)</description>
<status>0xB0</status>
<midino>0x4F</midino>
<on>0x7E</on>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel2]</group>
<key>hotcue_4_enabled</key>
<description>Hotcue 4 (Pad 4)</description>
<status>0x90</status>
<midino>0x4F</midino>
<on>0x7E</on>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel2]</group>
<key>pfl</key>
<description>PFL LED DECK B</description>
<status>0x90</status>
<midino>0x34</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel2]</group>
<key>play_indicator</key>
<description>PLAY LED Deck B</description>
<status>0x90</status>
<midino>0x2C</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Channel2]</group>
<key>sync_enabled</key>
<description>SYNC LED Deck B</description>
<status>0x90</status>
<midino>0xE0</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[EffectRack1_EffectUnit1]</group>
<key>group_[Channel1]_enable</key>
<description>(Pad 4)</description>
<status>0x90</status>
<midino>0x04</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[EffectRack1_EffectUnit1_Effect1]</group>
<key>enabled</key>
<description>Effect On/Off button </description>
<status>0x90</status>
<midino>0x01</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[EffectRack1_EffectUnit1_Effect2]</group>
<key>enabled</key>
<description>Effect On/Off button </description>
<status>0x90</status>
<midino>0x02</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[EffectRack1_EffectUnit1_Effect3]</group>
<key>enabled</key>
<description>Effect On/Off button </description>
<status>0x90</status>
<midino>0x03</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[EffectRack1_EffectUnit2]</group>
<key>group_[Channel2]_enable</key>
<description>(Pad 4)</description>
<status>0x90</status>
<midino>0x1F</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[EffectRack1_EffectUnit2_Effect1]</group>
<key>enabled</key>
<description>Effect On/Off buttonn </description>
<status>0x90</status>
<midino>0x1C</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[EffectRack1_EffectUnit2_Effect2]</group>
<key>enabled</key>
<description>Effect On/Off buttonn </description>
<status>0x90</status>
<midino>0x1D</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[EffectRack1_EffectUnit2_Effect3]</group>
<key>enabled</key>
<description>Effect On/Off buttonn </description>
<status>0x90</status>
<midino>0x1E</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Master]</group>
<key>maximize_library</key>
<description>VIEW buton LED </description>
<status>0x90</status>
<midino>0x41</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Sampler1]</group>
<key>play_indicator</key>
<description>(Pad 1 DECK A)</description>
<status>0x90</status>
<midino>0x48</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Sampler2]</group>
<key>play_indicator</key>
<description>(Pad 2 DECK A)</description>
<status>0x90</status>
<midino>0x49</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Sampler3]</group>
<key>play_indicator</key>
<description>(Pad 3 DECK A)</description>
<status>0x90</status>
<midino>0x4A</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Sampler4]</group>
<key>play_indicator</key>
<description>(Pad 4 DECK A)</description>
<status>0x90</status>
<midino>0x4B</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Sampler5]</group>
<key>play_indicator</key>
<description>(Pad 5 DECK A)</description>
<status>0x90</status>
<midino>0x50</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Sampler6]</group>
<key>play_indicator</key>
<description>(Pad 6 DECK A)</description>
<status>0x90</status>
<midino>0x51</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Sampler7]</group>
<key>play_indicator</key>
<description>(Pad 7 DECK A)</description>
<status>0x90</status>
<midino>0x52</midino>
<minimum>0.5</minimum>
</output>
<output>
<group>[Sampler8]</group>
<key>play_indicator</key>
<description>(Pad 8 DECK A)</description>
<status>0x90</status>
<midino>0x53</midino>
<minimum>0.5</minimum>
</output>
</outputs>
</controller>
</MixxxControllerPreset>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment