summaryrefslogtreecommitdiffstats
path: root/res/controllers
diff options
context:
space:
mode:
authorJan Holthuis <jan.holthuis@ruhr-uni-bochum.de>2020-03-10 11:43:15 +0100
committerJan Holthuis <jan.holthuis@ruhr-uni-bochum.de>2020-03-10 11:43:15 +0100
commit34073b74884cc861eced6af129695704bd300c25 (patch)
tree38335b694e522f24845c3b5106bbb1ef7a727161 /res/controllers
parent51a3e78e8759634c7faf99b5728981a56f2c0c65 (diff)
parent7770c4c205bcece13f7d7aea20a9eff6ddb9c0bc (diff)
Merge branch '2.2' of github.com:mixxxdj/mixxx
Diffstat (limited to 'res/controllers')
-rw-r--r--res/controllers/Hercules-DJControl-Inpulse-300-script.js197
-rw-r--r--res/controllers/Hercules_DJControl_Inpulse_300.midi.xml2669
2 files changed, 2866 insertions, 0 deletions
diff --git a/res/controllers/Hercules-DJControl-Inpulse-300-script.js b/res/controllers/Hercules-DJControl-Inpulse-300-script.js
new file mode 100644
index 0000000000..8e5dbb3584
--- /dev/null
+++ b/res/controllers/Hercules-DJControl-Inpulse-300-script.js
@@ -0,0 +1,197 @@
+// DJControl_Inpulse_300_script.js
+//
+// ***************************************************************************
+// * Mixxx mapping script file for the Hercules DJControl Inpulse 300.
+// * Author: DJ Phatso, contributions by Kerrick Staley
+// * Version 1.2 (March 2020)
+// * Forum: https://www.mixxx.org/forums/viewtopic.php?f=7&t=12599
+// * Wiki: https://mixxx.org/wiki/doku.php/hercules_djcontrol_inpulse_300
+//
+// Changes to v1.2
+// - Code cleanup.
+//
+// Changes to v1.1
+// - Fix seek-to-start and cue-master behavior.
+// - Tweak scratch, seek, and bend behavior.
+// - 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 forum release
+//
+// TO DO: Functions that could be implemented to the script:
+//
+// * ROLL: Keep SLIP active (if already enabled) when exiting from rolls
+//
+// * SLICER/SLICER LOOP
+//
+// * TONEPLAY
+//
+// * FX:
+// - See how to preselect effects for a rack
+// ****************************************************************************
+var DJCi300 = {};
+///////////////////////////////////////////////////////////////
+// USER OPTIONS //
+///////////////////////////////////////////////////////////////
+
+// How fast scratching is.
+DJCi300.scratchScale = 1.0;
+
+// How much faster seeking (shift+scratch) is than scratching.
+DJCi300.scratchShiftMultiplier = 4;
+
+// How fast bending is.
+DJCi300.bendScale = 1.0;
+
+// Other scratch related options
+DJCi300.kScratchActionNone = 0;
+DJCi300.kScratchActionScratch = 1;
+DJCi300.kScratchActionSeek = 2;
+DJCi300.kScratchActionBend = 3;
+
+DJCi300.vuMeterUpdateMaster = function(value, _group, _control) {
+ value = (value * 122) + 5;
+ midi.sendShortMsg(0xB0, 0x40, value);
+ midi.sendShortMsg(0xB0, 0x41, value);
+};
+
+DJCi300.vuMeterUpdateDeck = function(value, group, _control, _status) {
+ value = (value * 122) + 5;
+ var status = (group === "[Channel1]") ? 0xB1 : 0xB2;
+ midi.sendShortMsg(status, 0x40, value);
+};
+
+DJCi300.init = function() {
+ // Scratch button state
+ DJCi300.scratchButtonState = true;
+ // Scratch Action
+ DJCi300.scratchAction = {
+ 1: DJCi300.kScratchActionNone,
+ 2: DJCi300.kScratchActionNone
+ };
+
+ // Turn On Vinyl buttons LED(one for each deck).
+ midi.sendShortMsg(0x91, 0x03, 0x7F);
+ midi.sendShortMsg(0x92, 0x03, 0x7F);
+
+ //Turn On Browser button LED
+ midi.sendShortMsg(0x90, 0x04, 0x05);
+
+ //Softtakeover for Pitch fader
+ engine.softTakeover("[Channel1]", "rate", true);
+ engine.softTakeover("[Channel2]", "rate", true);
+ engine.softTakeoverIgnoreNextValue("[Channel1]", "rate");
+ engine.softTakeoverIgnoreNextValue("[Channel2]", "rate");
+
+ // Connect the VUMeters
+ engine.connectControl("[Channel1]", "VuMeter", "DJCi300.vuMeterUpdateDeck");
+ engine.getValue("[Channel1]", "VuMeter", "DJCi300.vuMeterUpdateDeck");
+ engine.connectControl("[Channel2]", "VuMeter", "DJCi300.vuMeterUpdateDeck");
+ engine.getValue("[Channel2]", "VuMeter", "DJCi300.vuMeterUpdateDeck");
+ engine.connectControl("[Master]", "VuMeterL", "DJCi300.vuMeterUpdateMaster");
+ engine.connectControl("[Master]", "VuMeterR", "DJCi300.vuMeterUpdateMaster");
+ engine.getValue("[Master]", "VuMeterL", "DJCi300.vuMeterUpdateMaster");
+ engine.getValue("[Master]", "VuMeterR", "DJCi300.vuMeterUpdateMaster");
+
+ // 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);
+};
+
+// The Vinyl button, used to enable or disable scratching on the jog wheels (One per deck).
+DJCi300.vinylButton = function(_channel, _control, value, status, _group) {
+ if (value) {
+ if (DJCi300.scratchButtonState) {
+ DJCi300.scratchButtonState = false;
+ midi.sendShortMsg(status, 0x03, 0x00);
+ } else {
+ DJCi300.scratchButtonState = true;
+ midi.sendShortMsg(status, 0x03, 0x7F);
+ }
+ }
+};
+
+DJCi300._scratchEnable = function(deck) {
+ var alpha = 1.0/8;
+ var beta = alpha/32;
+ engine.scratchEnable(deck, 248, 33 + 1/3, alpha, beta);
+};
+
+DJCi300._convertWheelRotation = function(value) {
+ // When you rotate the jogwheel, the controller always sends either 0x1
+ // (clockwise) or 0x7F (counter clockwise). 0x1 should map to 1, 0x7F
+ // should map to -1 (IOW it's 7-bit signed).
+ return value < 0x40 ? 1 : -1;
+};
+
+// The touch action on the jog wheel's top surface
+DJCi300.wheelTouch = function(channel, control, value, _status, _group) {
+ var deck = channel;
+ if (value > 0) {
+ // Touching the wheel.
+ if (engine.getValue("[Channel" + deck + "]", "play") !== 1 || DJCi300.scratchButtonState) {
+ DJCi300._scratchEnable(deck);
+ DJCi300.scratchAction[deck] = DJCi300.kScratchActionScratch;
+ } else {
+ DJCi300.scratchAction[deck] = DJCi300.kScratchActionBend;
+ }
+ } else {
+ // Released the wheel.
+ engine.scratchDisable(deck);
+ DJCi300.scratchAction[deck] = DJCi300.kScratchActionNone;
+ }
+};
+
+// The touch action on the jog wheel's top surface while holding shift
+DJCi300.wheelTouchShift = function(channel, control, value, _status, _group) {
+ var deck = channel - 3;
+ // We always enable scratching regardless of button state.
+ if (value > 0) {
+ DJCi300._scratchEnable(deck);
+ DJCi300.scratchAction[deck] = DJCi300.kScratchActionSeek;
+ } else {
+ // Released the wheel.
+ engine.scratchDisable(deck);
+ DJCi300.scratchAction[deck] = DJCi300.kScratchActionNone;
+ }
+};
+
+// Scratching on the jog wheel (rotating it while pressing the top surface)
+DJCi300.scratchWheel = function(channel, control, value, status, _group) {
+ var deck;
+ switch (status) {
+ case 0xB1:
+ case 0xB4:
+ deck = 1;
+ break;
+ case 0xB2:
+ case 0xB5:
+ deck = 2;
+ break;
+ default:
+ return;
+ }
+ var interval = DJCi300._convertWheelRotation(value);
+ var scratchAction = DJCi300.scratchAction[deck];
+ if (scratchAction === DJCi300.kScratchActionScratch) {
+ engine.scratchTick(deck, interval * DJCi300.scratchScale);
+ } else if (scratchAction === DJCi300.kScratchActionSeek) {
+ engine.scratchTick(deck,
+ interval * DJCi300.scratchScale *
+ DJCi300.scratchShiftMultiplier);
+ } else {
+ engine.setValue(
+ "[Channel" + deck + "]", "jog", interval * DJCi300.bendScale);
+ }
+};
+
+// Bending on the jog wheel (rotating using the edge)
+DJCi300.bendWheel = function(channel, control, value, _status, _group) {
+ var interval = DJCi300._convertWheelRotation(value);
+ engine.setValue(
+ "[Channel" + channel + "]", "jog", interval * DJCi300.bendScale);
+};
+
+DJCi300.shutdown = function() {
+ midi.sendShortMsg(0xB0, 0x7F, 0x00);
+};
diff --git a/res/controllers/Hercules_DJControl_Inpulse_300.midi.xml b/res/controllers/Hercules_DJControl_Inpulse_300.midi.xml
new file mode 100644
index 0000000000..d43df23ad9
--- /dev/null
+++ b/res/controllers/Hercules_DJControl_Inpulse_300.midi.xml
@@ -0,0 +1,2669 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<MixxxMIDIPreset mixxxVersion="2.2" schemaVersion="1">
+ <info>
+ <name>Hercules DJControl Inpulse 300</name>
+ <author>DJ Phatso for Hercules Technical Support</author>
+ <description>MIDI Preset for Hercules DJControl Inpulse 300</description>
+ <wiki>https://www.mixxx.org/wiki/doku.php/hercules_djcontrol_inpulse_300</wiki>
+ <forums>https://www.mixxx.org/forums/viewtopic.php?f=7&amp;t=12599</forums>
+ </info>
+ <controller id="DJControl Inpulse 300">
+ <scriptfiles>
+ <file filename="lodash.mixxx.js" />
+ <file filename="midi-components-0.0.js" />
+ <file functionprefix="DJCi300" filename="Hercules-DJControl-Inpulse-300-script.js" />
+ </scriptfiles>
+ <controls>
+ <!--Note Number (NN) - Buttons/switches/Encoders -->
+ <!-- NN's MIDI Channel 1 (0x90)-->
+
+ <!--Browser section (Encoder button)-->
+ <control>
+ <group>[Library]</group>
+ <key>MoveFocus</key>
+ <description>Browser button</description>
+ <status>0x90</status>
+ <midino>0x00</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+
+ <!--Assistant-->
+ <control>
+ <group>[AutoDJ]</group>
+ <key>enabled</key>
+ <description>AutoDJ On/Off</description>
+ <status>0x90</status>
+ <midino>0x03</midino>
+ <normal/>
+ </control>
+
+ <!-- NN's MIDI Channel 2 (0x91 Deck A - Standard MODE)-->
+
+ <!--Play-->
+ <control>
+ <group>[Channel1]</group>
+ <key>play</key>
+ <description>Play button</description>
+ <status>0x91</status>
+ <midino>0x07</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--CUE-->
+ <control>
+ <group>[Channel1]</group>
+ <key>cue_default</key>
+ <description>Cue button</description>
+ <status>0x91</status>
+ <midino>0x06</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--Sync-->
+ <control>
+ <group>[Channel1]</group>
+ <key>sync_enabled</key>
+ <description>Sync button</description>
+ <status>0x91</status>
+ <midino>0x05</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!-- PFL-->
+ <control>
+ <group>[Channel1]</group>
+ <key>pfl</key>
+ <description>PFL button</description>
+ <status>0x91</status>
+ <midino>0x0C</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--LOAD A-->
+ <control>
+ <group>[Channel1]</group>
+ <key>LoadSelectedTrack</key>
+ <description>LOAD A button</description>
+ <status>0x91</status>
+ <midino>0x0D</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--SLIP A-->
+ <control>
+ <group>[Channel1]</group>
+ <key>slip_enabled</key>
+ <description>SLIP button</description>
+ <status>0x91</status>
+ <midino>0x01</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--Q A-->
+ <control>
+ <group>[Channel1]</group>
+ <key>keylock</key>
+ <description>Q button</description>
+ <status>0x91</status>
+ <midino>0x02</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+
+ <!--Vinyl button-->
+ <control>
+ <group>[Channel1]</group>
+ <key>DJCi300.vinylButton</key>
+ <description>Vinyl Deck A</description>
+ <status>0x91</status>
+ <midino>0x03</midino>
+ <options>
+ <script-binding />
+ </options>
+ </control>
+
+ <!--Jog Touch A-->
+ <control>
+ <group>[Channel1]</group>
+ <key>DJCi300.wheelTouch</key>
+ <description>Jog Wheel Touch Deck A</description>
+ <status>0x91</status>
+ <midino>0x08</midino>
+ <options>
+ <script-binding />
+ </options>
+ </control>
+
+ <!--Loop In/Out-->
+ <control>
+ <group>[Channel1]</group>
+ <key>beatloop_4_activate</key>
+ <description>Loop In button</description>
+ <status>0x91</status>
+ <midino>0x09</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>reloop_toggle</key>
+ <description>Loop Out button</description>
+ <status>0x91</status>
+ <midino>0x0A</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+
+ <!--FX section button-->
+ <control>
+ <group>[EffectRack1_EffectUnit1_Effect3]</group>
+ <key>enabled</key>
+ <description>FX Rack 1 - Slot 3 On/Off</description>
+ <status>0x91</status>
+ <midino>0x00</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+
+ <!-- NN's MIDI Channel 3 (0x92 Deck B - Standard MODE)-->
+
+ <!--Play-->
+ <control>
+ <group>[Channel2]</group>
+ <key>play</key>
+ <description>Play button</description>
+ <status>0x92</status>
+ <midino>0x07</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--CUE-->
+ <control>
+ <group>[Channel2]</group>
+ <key>cue_default</key>
+ <description>Cue button</description>
+ <status>0x92</status>
+ <midino>0x06</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--Sync-->
+ <control>
+ <group>[Channel2]</group>
+ <key>sync_enabled</key>
+ <description>Sync button</description>
+ <status>0x92</status>
+ <midino>0x05</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!-- PFL-->
+ <control>
+ <group>[Channel2]</group>
+ <key>pfl</key>
+ <description>PFL button</description>
+ <status>0x92</status>
+ <midino>0x0C</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--LOAD B-->
+ <control>
+ <group>[Channel2]</group>
+ <key>LoadSelectedTrack</key>
+ <description>LOAD B button</description>
+ <status>0x92</status>
+ <midino>0x0D</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--SLIP B-->
+ <control>
+ <group>[Channel2]</group>
+ <key>slip_enabled</key>
+ <description>SLIP button</description>
+ <status>0x92</status>
+ <midino>0x01</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--Q B-->
+ <control>
+ <group>[Channel2]</group>
+ <key>keylock</key>
+ <description>Q button</description>
+ <status>0x92</status>
+ <midino>0x02</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--Vinyl button-->
+ <control>
+ <group>[Channel2]</group>
+ <key>DJCi300.vinylButton</key>
+ <description>Vinyl Deck B</description>
+ <status>0x92</status>
+ <midino>0x03</midino>
+ <options>
+ <script-binding />
+ </options>
+ </control>
+ <!--Jog Touch B -->
+ <control>
+ <group>[Channel2]</group>
+ <key>DJCi300.wheelTouch</key>
+ <description>Jog Wheel Touch Deck B</description>
+ <status>0x92</status>
+ <midino>0x08</midino>
+ <options>
+ <script-binding />
+ </options>
+ </control>
+ <!--Loop In/Out-->
+ <control>
+ <group>[Channel2]</group>
+ <key>beatloop_4_activate</key>
+ <description>Loop In button</description>
+ <status>0x92</status>
+ <midino>0x09</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel2]</group>
+ <key>reloop_toggle</key>
+ <description>Loop Out button</description>
+ <status>0x92</status>
+ <midino>0x0A</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--FX Section Button-->
+
+ <control>
+ <group>[EffectRack1_EffectUnit2_Effect3]</group>
+ <key>enabled</key>
+ <description>FX Rack 2 - Slot 3 On/Off</description>
+ <status>0x92</status>
+ <midino>0x00</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+
+ <!-- NN's MIDI Channel 4 (0x93 - SHIFT MODE)-->
+
+ <!--Browser section (Encoder button)-->
+ <control>
+ <group>[Master]</group>
+ <key>maximize_library</key>
+ <description>Browser button - Maximize Library view</description>
+ <status>0x93</status>
+ <midino>0x00</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+
+ <!-- NN's MIDI Channel 5 (0x94 Deck A - SHIFT MODE)-->
+ <!--Jog Touch A-->
+ <control>
+ <group>[Channel1]</group>
+ <key>DJCi300.wheelTouchShift</key>
+ <description>Jog Wheel Shift Touch Deck A</description>
+ <status>0x94</status>
+ <midino>0x08</midino>
+ <options>
+ <script-binding />
+ </options>
+ </control>
+
+ <!--Play-->
+ <control>
+ <group>[Channel1]</group>
+ <key>play_stutter</key>
+ <description>SHIFT + Play: Play Stutter</description>
+ <status>0x94</status>
+ <midino>0x07</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--CUE-->
+ <control>
+ <group>[Channel1]</group>
+ <key>start_play</key>
+ <description>SHIFT + Cue: REWIND to beginning</description>
+ <status>0x94</status>
+ <midino>0x06</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--Sync-->
+ <control>
+ <group>[Channel1]</group>
+ <key>sync_master</key>
+ <description>SHIFT + Sync: Sync Master</description>
+ <status>0x94</status>
+ <midino>0x05</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--Loop In/Out-->
+ <control>
+ <group>[Channel1]</group>
+ <key>loop_halve</key>
+ <description>SHIFT + Loop In: Loop Half</description>
+ <status>0x94</status>
+ <midino>0x09</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>loop_double</key>
+ <description>SHIFT + Loop Out: Loop Double</description>
+ <status>0x94</status>
+ <midino>0x0A</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--Effect-->
+ <control>
+ <group>[EffectRack1_EffectUnit1_Effect3]</group>
+ <key>next_effect</key>
+ <description>SHIFT + Effect ON: Next effect</description>
+ <status>0x94</status>
+ <midino>0x00</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+
+ <!-- NN's MIDI Channel 6 (0x95 Deck B - SHIFT MODE)-->
+ <!--Jog Touch B-->
+ <control>
+ <group>[Channel2]</group>
+ <key>DJCi300.wheelTouchShift</key>
+ <description>Jog Wheel Shift Touch Deck B</description>
+ <status>0x95</status>
+ <midino>0x08</midino>
+ <options>
+ <script-binding />
+ </options>
+ </control>
+
+ <!--Play-->
+ <control>
+ <group>[Channel2]</group>
+ <key>play_stutter</key>
+ <description>SHIFT + Play: Play Stutter</description>
+ <status>0x95</status>
+ <midino>0x07</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--CUE-->
+ <control>
+ <group>[Channel2]</group>
+ <key>start_play</key>
+ <description>SHIFT + Cue: REWIND to beginning</description>
+ <status>0x95</status>
+ <midino>0x06</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--Sync-->
+ <control>
+ <group>[Channel2]</group>
+ <key>sync_master</key>
+ <description>SHIFT + Sync: Sync Master</description>
+ <status>0x95</status>
+ <midino>0x05</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--Loop In/Out-->
+ <control>
+ <group>[Channel2]</group>
+ <key>loop_halve</key>
+ <description>SHIFT + Loop In: Loop Half</description>
+ <status>0x95</status>
+ <midino>0x09</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel2]</group>
+ <key>loop_double</key>
+ <description>SHIFT + Loop Ou: Loop Double</description>
+ <status>0x95</status>
+ <midino>0x0A</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--Effect-->
+ <control>
+ <group>[EffectRack1_EffectUnit2_Effect3]</group>
+ <key>next_effect</key>
+ <description>SHIFT + Effect ON: Next effect</description>
+ <status>0x95</status>
+ <midino>0x00</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+
+ <!-- NN's MIDI Channel 7 (0x96 Deck A - Pads)-->
+
+ <!--Hot Cues (SET)-->
+ <control>
+ <group>[Channel1]</group>
+ <key>hotcue_1_activate</key>
+ <description>PAD 1</description>
+ <status>0x96</status>
+ <midino>0x00</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>hotcue_2_activate</key>
+ <description>PAD 2</description>
+ <status>0x96</status>
+ <midino>0x01</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>hotcue_3_activate</key>
+ <description>PAD 3</description>
+ <status>0x96</status>
+ <midino>0x02</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>hotcue_4_activate</key>
+ <description>PAD 4</description>
+ <status>0x96</status>
+ <midino>0x03</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>hotcue_5_activate</key>
+ <description>PAD 5</description>
+ <status>0x96</status>
+ <midino>0x04</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>hotcue_6_activate</key>
+ <description>PAD 6</description>
+ <status>0x96</status>
+ <midino>0x05</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>hotcue_7_activate</key>
+ <description>PAD 7</description>
+ <status>0x96</status>
+ <midino>0x06</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>hotcue_8_activate</key>
+ <description>PAD 8</description>
+ <status>0x96</status>
+ <midino>0x07</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--Hot-Cue buttons (SHIFT mode)-->
+ <control>
+ <group>[Channel1]</group>
+ <key>hotcue_1_clear</key>
+ <description>PAD 1</description>
+ <status>0x96</status>
+ <midino>0x08</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>hotcue_2_clear</key>
+ <description>PAD 2</description>
+ <status>0x96</status>
+ <midino>0x09</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>hotcue_3_clear</key>
+ <description>PAD 3</description>
+ <status>0x96</status>
+ <midino>0x0A</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>hotcue_4_clear</key>
+ <description>PAD 4</description>
+ <status>0x96</status>
+ <midino>0x0B</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>hotcue_5_clear</key>
+ <description>PAD 5</description>
+ <status>0x96</status>
+ <midino>0x0C</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>hotcue_6_clear</key>
+ <description>PAD 6</description>
+ <status>0x96</status>
+ <midino>0x0D</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>hotcue_7_clear</key>
+ <description>PAD 7</description>
+ <status>0x96</status>
+ <midino>0x0E</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>hotcue_8_clear</key>
+ <description>PAD 8</description>
+ <status>0x96</status>
+ <midino>0x0F</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--Roll-->
+ <control>
+ <group>[Channel1]</group>
+ <key>beatlooproll_0.125_activate</key>
+ <description>Loop 1/8 Beat (Pad 1)</description>
+ <status>0x96</status>
+ <midino>0x10</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>beatlooproll_0.25_activate</key>
+ <description>Loop 1/4 Beat (Pad 2)</description>
+ <status>0x96</status>
+ <midino>0x11</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>beatlooproll_0.5_activate</key>
+ <description>Loop 1/2 Beat (Pad 3)</description>
+ <status>0x96</status>
+ <midino>0x12</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>beatlooproll_1_activate</key>
+ <description>Loop 1 Beat (Pad 4)</description>
+ <status>0x96</status>
+ <midino>0x13</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>beatlooproll_2_activate</key>
+ <description>Loop 2 Beat (Pad 5)</description>
+ <status>0x96</status>
+ <midino>0x14</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>beatlooproll_4_activate</key>
+ <description>Loop 2 Beat (Pad 6)</description>
+ <status>0x96</status>
+ <midino>0x15</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>beatlooproll_8_activate</key>
+ <description>Loop 8 Beat (Pad 7)</description>
+ <status>0x96</status>
+ <midino>0x16</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Channel1]</group>
+ <key>beatlooproll_16_activate</key>
+ <description>Loop 2 Beat (Pad 8)</description>
+ <status>0x96</status>
+ <midino>0x17</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--Sampler-->
+ <control>
+ <group>[Sampler1]</group>
+ <key>cue_gotoandplay</key>
+ <description>PAD 1</description>
+ <status>0x96</status>
+ <midino>0x30</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Sampler2]</group>
+ <key>cue_gotoandplay</key>
+ <description>PAD 2</description>
+ <status>0x96</status>
+ <midino>0x31</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Sampler3]</group>
+ <key>cue_gotoandplay</key>
+ <description>PAD 3</description>
+ <status>0x96</status>
+ <midino>0x32</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Sampler4]</group>
+ <key>cue_gotoandplay</key>
+ <description>PAD 4</description>
+ <status>0x96</status>
+ <midino>0x33</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Sampler5]</group>
+ <key>cue_gotoandplay</key>
+ <description>PAD 5</description>
+ <status>0x96</status>
+ <midino>0x34</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Sampler6]</group>
+ <key>cue_gotoandplay</key>
+ <description>PAD 6</description>
+ <status>0x96</status>
+ <midino>0x35</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Sampler7]</group>
+ <key>cue_gotoandplay</key>
+ <description>PAD 7</description>
+ <status>0x96</status>
+ <midino>0x36</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <control>
+ <group>[Sampler8]</group>
+ <key>cue_gotoandplay</key>
+ <description>PAD 8</description>
+ <status>0x96</status>
+ <midino>0x37</midino>
+ <options>
+ <normal />
+ </options>
+ </control>
+ <!--Slicer Not assigned: 0x20 to 0x27-->
+
+ <!--Toneplay Not assigned: 0x40 to 0x47-->
+
+ <!--Slicer LOOP Not assigned: 0x60 to 0x67-->
+
+ <!--Beatjump-->
+ <control>
+ <group>[Channel1]</group>
+ <key>beatjump_1_backward</key>
+ <description>PAD 1</description>
+ <status>0