diff --git a/res/controllers/Hercules-DJControl-Inpulse-200-script.js b/res/controllers/Hercules-DJControl-Inpulse-200-script.js new file mode 100644 index 00000000000..2b8a349d78d --- /dev/null +++ b/res/controllers/Hercules-DJControl-Inpulse-200-script.js @@ -0,0 +1,182 @@ +// DJControl_Inpulse_200_script.js +// +// *************************************************************************** +// * Mixxx mapping script file for the Hercules DJControl Inpulse 200. +// * Author: DJ Phatso, contributions by Kerrick Staley +// * Version 1.2 (March 2020) +// * Forum: https://www.mixxx.org/forums/viewtopic.php?f=7&t=12592 +// * Wiki: https://mixxx.org/wiki/doku.php/hercules_djcontrol_inpulse_200 +// +// 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: +// +// FX: +// - See how to preselect effects for a rack +// +//************************************************************************* + +var DJCi200 = {}; +/////////////////////////////////////////////////////////////// +// USER OPTIONS // +/////////////////////////////////////////////////////////////// + +// How fast scratching is. +DJCi200.scratchScale = 1.0; + +// How much faster seeking (shift+scratch) is than scratching. +DJCi200.scratchShiftMultiplier = 4; + +// How fast bending is. +DJCi200.bendScale = 1.0; + +// Other scratch related options +DJCi200.kScratchActionNone = 0; +DJCi200.kScratchActionScratch = 1; +DJCi200.kScratchActionSeek = 2; +DJCi200.kScratchActionBend = 3; + +DJCi200.init = function() { + // Scratch button state + DJCi200.scratchButtonState = true; + // Scratch Action + DJCi200.scratchAction = { + 1: DJCi200.kScratchActionNone, + 2: DJCi200.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"); + + //Set effects Levels - Dry/Wet + 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", 1); + engine.setParameter("[EffectRack1_EffectUnit2]", "mix", 1); + + // 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). +DJCi200.vinylButton = function(_channel, _control, value, status, _group) { + if (value) { + if (DJCi200.scratchButtonState) { + DJCi200.scratchButtonState = false; + midi.sendShortMsg(status, 0x03, 0x00); + } else { + DJCi200.scratchButtonState = true; + midi.sendShortMsg(status, 0x03, 0x7F); + } + } +}; + +DJCi200._scratchEnable = function(deck) { + var alpha = 1.0/8; + var beta = alpha/32; + engine.scratchEnable(deck, 248, 33 + 1/3, alpha, beta); +}; + +DJCi200._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 +DJCi200.wheelTouch = function(channel, control, value, _status, _group) { + var deck = channel; + if (value > 0) { + // Touching the wheel. + if (engine.getValue("[Channel" + deck + "]", "play") !== 1 || DJCi200.scratchButtonState) { + DJCi200._scratchEnable(deck); + DJCi200.scratchAction[deck] = DJCi200.kScratchActionScratch; + } else { + DJCi200.scratchAction[deck] = DJCi200.kScratchActionBend; + } + } else { + // Released the wheel. + engine.scratchDisable(deck); + DJCi200.scratchAction[deck] = DJCi200.kScratchActionNone; + } +}; + +// The touch action on the jog wheel's top surface while holding shift +DJCi200.wheelTouchShift = function(channel, control, value, _status, _group) { + var deck = channel - 3; + // We always enable scratching regardless of button state. + if (value > 0) { + DJCi200._scratchEnable(deck); + DJCi200.scratchAction[deck] = DJCi200.kScratchActionSeek; + } else { + // Released the wheel. + engine.scratchDisable(deck); + DJCi200.scratchAction[deck] = DJCi200.kScratchActionNone; + } +}; + +// Scratching on the jog wheel (rotating it while pressing the top surface) +DJCi200.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 = DJCi200._convertWheelRotation(value); + var scratchAction = DJCi200.scratchAction[deck]; + if (scratchAction === DJCi200.kScratchActionScratch) { + engine.scratchTick(deck, interval * DJCi200.scratchScale); + } else if (scratchAction === DJCi200.kScratchActionSeek) { + engine.scratchTick(deck, + interval * DJCi200.scratchScale * + DJCi200.scratchShiftMultiplier); + } else { + engine.setValue( + "[Channel" + deck + "]", "jog", interval * DJCi200.bendScale); + } +}; + +// Bending on the jog wheel (rotating using the edge) +DJCi200.bendWheel = function(channel, control, value, _status, _group) { + var interval = DJCi200._convertWheelRotation(value); + engine.setValue( + "[Channel" + channel + "]", "jog", interval * DJCi200.bendScale); +}; + +DJCi200.shutdown = function() { + midi.sendShortMsg(0xB0, 0x7F, 0x7E); + midi.sendShortMsg(0x90, 0x04, 0x00); +}; diff --git a/res/controllers/Hercules_DJControl_Inpulse_200.midi.xml b/res/controllers/Hercules_DJControl_Inpulse_200.midi.xml new file mode 100644 index 00000000000..1b87f171e74 --- /dev/null +++ b/res/controllers/Hercules_DJControl_Inpulse_200.midi.xml @@ -0,0 +1,1802 @@ + + + + Hercules DJControl Inpulse 200 + DJ Phatso for Hercules Technical Support + MIDI Preset for Hercules DJControl Inpulse 200 + https://www.mixxx.org/wiki/doku.php/hercules_djcontrol_inpulse_200 + https://www.mixxx.org/forums/viewtopic.php?f=7&t=12592 + + + + + + + + + + + + + [Library] + MoveFocus + Browser button + 0x90 + 0x00 + + + + + + + [AutoDJ] + enabled + AutoDJ On/Off + 0x90 + 0x03 + + + + + + [Channel1] + play + Play button + 0x91 + 0x07 + + + + + + + [Channel1] + cue_default + Cue button + 0x91 + 0x06 + + + + + + + [Channel1] + sync_enabled + Sync button + 0x91 + 0x05 + + + + + + + [Channel1] + pfl + PFL button + 0x91 + 0x0C + + + + + + + [Channel1] + LoadSelectedTrack + LOAD A button + 0x91 + 0x0D + + + + + + + [Channel1] + DJCi200.vinylButton + Vinyl Deck A + 0x91 + 0x03 + + + + + + + [Channel1] + DJCi200.wheelTouch + Jog Wheel Touch Deck A + 0x91 + 0x08 + + + + + + + [Channel1] + beatloop_4_activate + Loop In button + 0x91 + 0x09 + + + + + + [Channel1] + reloop_toggle + Loop Out button + 0x91 + 0x0A + + + + + + + + [Channel2] + play + Play button + 0x92 + 0x07 + + + + + + + [Channel2] + cue_default + Cue button + 0x92 + 0x06 + + + + + + + [Channel2] + sync_enabled + Sync button + 0x92 + 0x05 + + + + + + + [Channel2] + pfl + PFL button + 0x92 + 0x0C + + + + + + + [Channel2] + LoadSelectedTrack + LOAD B button + 0x92 + 0x0D + + + + + + + [Channel2] + DJCi200.vinylButton + Vinyl Deck B + 0x92 + 0x03 + + + + + + + [Channel2] + DJCi200.wheelTouch + Jog Wheel Touch Deck B + 0x92 + 0x08 + + + + + + + [Channel2] + beatloop_4_activate + Loop In button + 0x92 + 0x09 + + + + + + [Channel2] + reloop_toggle + Loop Out button + 0x92 + 0x0A + + + + + + + + [Master] + maximize_library + Browser button - Maximize Library view + 0x93 + 0x00 + + + + + + + + [Channel1] + DJCi200.wheelTouchShift + Jog Wheel Shift Touch Deck A + 0x94 + 0x08 + + + + + + + [Channel1] + play_stutter + SHIFT + Play: Play Stutter + 0x94 + 0x07 + + + + + + + [Channel1] + start_play + SHIFT + Cue: REWIND to beginning + 0x94 + 0x06 + + + + + + + [Channel1] + sync_master + SHIFT + Sync: Sync Master + 0x94 + 0x05 + + + + + + + [Channel1] + loop_halve + SHIFT + Loop In: Loop Half + 0x94 + 0x09 + + + + + + [Channel1] + loop_double + SHIFT + Loop Out: Loop Double + 0x94 + 0x0A + + + + + + + + [Channel2] + DJCi200.wheelTouchShift + Jog Wheel Shift Touch Deck B + 0x95 + 0x08 + + + + + + + [Channel2] + play_stutter + SHIFT + Play: Play Stutter + 0x95 + 0x07 + + + + + + + [Channel2] + start_play + SHIFT + Cue: REWIND to beginning + 0x95 + 0x06 + + + + + + + [Channel2] + sync_master + SHIFT + Sync: Sync Master + 0x95 + 0x05 + + + + + + + [Channel2] + loop_halve + SHIFT + Loop In: Loop Half + 0x95 + 0x09 + + + + + + [Channel2] + loop_double + SHIFT + Loop Ou: Loop Double + 0x95 + 0x0A + + + + + + + + [Channel1] + hotcue_1_activate + PAD 1 + 0x96 + 0x00 + + + + + + [Channel1] + hotcue_2_activate + PAD 2 + 0x96 + 0x01 + + + + + + [Channel1] + hotcue_3_activate + PAD 3 + 0x96 + 0x02 + + + + + + [Channel1] + hotcue_4_activate + PAD 4 + 0x96 + 0x03 + + + + + + + [Channel1] + hotcue_1_clear + PAD 1 + 0x96 + 0x08 + + + + + + [Channel1] + hotcue_2_clear + PAD 2 + 0x96 + 0x09 + + + + + + [Channel1] + hotcue_3_clear + PAD 3 + 0x96 + 0x0A + + + + + + [Channel1] + hotcue_4_clear + PAD 4 + 0x96 + 0x0B + + + + + + + [Channel1] + beatlooproll_1_activate + Loop 1 Beat (Pad 1) + 0x96 + 0x10 + + + + + + [Channel1] + beatlooproll_2_activate + Loop 2 Beat (Pad 2) + 0x96 + 0x11 + + + + + + [Channel1] + beatlooproll_4_activate + Loop 4 Beat (Pad 3) + 0x96 + 0x12 + + + + + + [Channel1] + beatlooproll_8_activate + Loop 8 Beat (Pad 4) + 0x96 + 0x13 + + + + + + + [EffectRack1_EffectUnit1_Effect1] + enabled + FX Unit 1 - Slot 1 On/Off + 0x96 + 0x20 + + + + + + [EffectRack1_EffectUnit1_Effect2] + enabled + FX Unit 1 - Slot 2 On/Off + 0x96 + 0x21 + + + + + + [EffectRack1_EffectUnit1_Effect3] + enabled + FX Unit 1 - Slot 3 On/Off + 0x96 + 0x22 + + + + + + [EffectRack1_EffectUnit1] + group_[Channel1]_enable + FX Unit 1 On/Off - Deck A + 0x96 + 0x23 + + + + + + + [EffectRack1_EffectUnit1_Effect1] + enabled + FX Unit 1 - Slot 1 On/Off + 0x96 + 0x28 + + + + + + [EffectRack1_EffectUnit1_Effect2] + enabled + FX Unit 1 - Slot 2 On/Off + 0x96 + 0x29 + + + + + + [EffectRack1_EffectUnit1_Effect3] + enabled + FX Unit 1 - Slot 3 On/Off + 0x96 + 0x2A + + + + + + [EffectRack1_EffectUnit1] + group_[Channel1]_enable + FX Unit 1 On/Off - Deck A + 0x96 + 0x2B + + + + + + + [Sampler1] + cue_gotoandplay + PAD 1 - Deck A + 0x96 + 0x30 + + + + + + [Sampler2] + cue_gotoandplay + PAD 2 - Deck A + 0x96 + 0x31 + + + + + + [Sampler3] + cue_gotoandplay + PAD 3 - Deck A + 0x96 + 0x32 + + + + + + [Sampler4] + cue_gotoandplay + PAD 4 - Deck A + 0x96 + 0x33 + + + + + + + + [Channel2] + hotcue_1_activate + PAD 1 + 0x97 + 0x00 + + + + + + [Channel2] + hotcue_2_activate + PAD 2 + 0x97 + 0x01 + + + + + + [Channel2] + hotcue_3_activate + PAD 3 + 0x97 + 0x02 + + + + + + [Channel2] + hotcue_4_activate + PAD 4 + 0x97 + 0x03 + + + + + + + [Channel2] + hotcue_1_clear + PAD 1 + 0x97 + 0x08 + + + + + + [Channel2] + hotcue_2_clear + PAD 2 + 0x97 + 0x09 + + + + + + [Channel2] + hotcue_3_clear + PAD 3 + 0x97 + 0x0A + + + + + + [Channel2] + hotcue_4_clear + PAD 4 + 0x97 + 0x0B + + + + + + + [Channel2] + beatlooproll_1_activate + Loop 1 Beat (Pad 1) + 0x97 + 0x10 + + + + + + [Channel2] + beatlooproll_2_activate + Loop 2 Beat (Pad 2) + 0x97 + 0x11 + + + + + + [Channel2] + beatlooproll_4_activate + Loop 4 Beat (Pad 3) + 0x97 + 0x12 + + + + + + [Channel2] + beatlooproll_8_activate + Loop 8 Beat (Pad 4) + 0x97 + 0x13 + + + + + + + [EffectRack1_EffectUnit2_Effect1] + enabled + FX Unit 2 - Slot 1 On/Off + 0x97 + 0x20 + + + + + + [EffectRack1_EffectUnit2_Effect2] + enabled + FX Unit 2 - Slot 2 On/Off + 0x97 + 0x21 + + + + + + [EffectRack1_EffectUnit2_Effect3] + enabled + FX Unit 2 - Slot 3 On/Off + 0x97 + 0x22 + + + + + + [EffectRack1_EffectUnit2] + group_[Channel2]_enable + FX Unit 2 On/Off - Deck B + 0x97 + 0x23 + + + + + + + [EffectRack1_EffectUnit2_Effect1] + enabled + FX Unit 2 - Slot 1 On/Off + 0x97 + 0x28 + + + + + + [EffectRack1_EffectUnit2_Effect2] + enabled + FX Unit 2 - Slot 2 On/Off + 0x97 + 0x29 + + + + + + [EffectRack1_EffectUnit2_Effect3] + enabled + FX Unit 2 - Slot 3 On/Off + 0x97 + 0x2A + + + + + + [EffectRack1_EffectUnit2] + group_[Channel2]_enable + FX Unit 2 On/Off - Deck B + 0x97 + 0x2B + + + + + + + [Sampler5] + cue_gotoandplay + PAD 1 - Deck B + 0x97 + 0x30 + + + + + + [Sampler6] + cue_gotoandplay + PAD 2 - Deck B + 0x97 + 0x31 + + + + + + [Sampler7] + cue_gotoandplay + PAD 3 - Deck B + 0x97 + 0x32 + + + + + + [Sampler8] + cue_gotoandplay + PAD 4 - Deck B + 0x97 + 0x33 + + + + + + + + + + [Master] + crossfader + Crossfader + 0xB0 + 0x00 + + + + + + + [Library] + MoveVertical + Move Vertical (Browser Knob) + 0xB0 + 0x01 + + + + + + + + [Channel1] + volume + Volume Deck A + 0xB1 + 0x00 + + + + + + + [EqualizerRack1_[Channel1]_Effect1] + parameter1 + EQ LOW Deck A + 0xB1 + 0x02 + + + + + + [EqualizerRack1_[Channel1]_Effect1] + parameter3 + EQ HIGH Deck A + 0xB1 + 0x04 + + + + + + + [Channel1] + pregain + Gain Deck A + 0xB1 + 0x05 + + + + + + + [QuickEffectRack1_[Channel1]] + super1 + Filter Deck A + 0xB1 + 0x01 + + + + + + + [Channel1] + rate + 0xB1 + 0x08 + + + + + + [Channel1] + rate + 0xB1 + 0x28 + + + + + + + [Channel1] + DJCi200.scratchWheel + Scratch Deck A (Jog-Wheel) + 0xB1 + 0x0A + + + + + + [Channel1] + DJCi200.bendWheel + Pitch Bend Deck A (Jog-Wheel) + 0xB1 + 0x09 + + + + + + [Channel1] + DJCi200.scratchPad + Pitch Bend Deck A (FX PAD 7 / 8 ) + 0xB1 + 0x0C + + + + + + + + [Channel2] + volume + Volume Deck A + 0xB2 + 0x00 + + + + + + + [EqualizerRack1_[Channel2]_Effect1] + parameter1 + EQ LOW Deck A + 0xB2 + 0x02 + + + + + + [EqualizerRack1_[Channel2]_Effect1] + parameter3 + EQ HIGH Deck A + 0xB2 + 0x04 + + + + + + + [Channel2] + pregain + Gain Deck A + 0xB2 + 0x05 + + + + + + + [QuickEffectRack1_[Channel2]] + super1 + Filter Deck A + 0xB2 + 0x01 + + + + + + + [Channel2] + rate + 0xB2 + 0x08 + + + + + + [Channel2] + rate + 0xB2 + 0x28 + + + + + + + [Channel2] + DJCi200.scratchWheel + Pitch Bend Deck B (Jog-Wheel) + 0xB2 + 0x0A + + + + + + [Channel2] + DJCi200.bendWheel + Pitch Bend Deck B (Jog-Wheel) + 0xB2 + 0x09 + + + + + + [Channel2] + DJCi200.scratchPad + Pitch Bend Deck B (FX PAD 7 / 8 ) + 0xB2 + 0x0C + + + + + + + + [Channel1] + DJCi200.scratchWheel + SHIFT + Scratch Deck A (Jog-Wheel) + 0xB4 + 0x0A + + + + + + + + [Channel2] + DJCi200.scratchWheel + SHIFT + Scratch Deck B (Jog-Wheel) + 0xB5 + 0x0A + + + + + + + + + + [Channel1] + play_indicator + PLAY LED Deck A + 0.5 + 1 + 0x91 + 0x07 + 0x7f + 0x0 + + + [Channel1] + cue_indicator + CUE LED Deck A + 0.5 + 1 + 0x91 + 0x06 + 0x7f + 0x0 + + + [Channel1] + start_play + CUE LED Deck A(SHIFT MODE) + 0.5 + 1 + 0x94 + 0x06 + 0x7f + 0x0 + + + [Channel1] + sync_enabled + SYNC LED Deck A + 0.5 + 1 + 0x91 + 0x05 + 0x7f + 0x0 + + + [Channel1] + sync_master + SYNC LED Deck A(SHIFT mode) + 0.5 + 1 + 0x93 + 0x05 + 0x7f + 0x0 + + + [Channel2] + play_indicator + PLAY LED Deck B + 0.5 + 1 + 0x92 + 0x07 + 0x7f + 0x0 + + + [Channel2] + cue_indicator + CUE LED Deck B + 0.5 + 1 + 0x92 + 0x06 + 0x7f + 0x0 + + + [Channel2] + sync_enabled + SYNC LED Deck B + 0.5 + 1 + 0x92 + 0x05 + 0x7f + 0x0 + + + [Channel2] + sync_master + SYNC LED Deck B(SHIFT mode) + 0.5 + 1 + 0x94 + 0x05 + 0x7f + 0x0 + + + + [Channel1] + beatloop_4_enabled + Loop In LED DA + 0.5 + 1 + 0x91 + 0x09 + 0x7f + 0x00 + + + [Channel2] + beatloop_4_enabled + Loop In LED DB + 0.5 + 1 + 0x92 + 0x09 + 0x7f + 0x00 + + + + [Channel1] + pfl + PFL LED DECK A + 0.5 + 1 + 0x91 + 0x0C + 0x7f + 0x0 + + + [Channel2] + pfl + PFL LED DECK B + 0.5 + 1 + 0x92 + 0x0C + 0x7f + 0x0 + + + + [Library] + MoveFocus + Browser LED (BLUE) + 0.5 + 1 + 0x90 + 0x04 + 0x05 + 0x07 + + + [Master] + maximize_library + Browser LED (GREEN) + 0.5 + 1 + 0x90 + 0x04 + 0x07 + 0x05 + + + + [AutoDJ] + enabled + Auto DJ On + 0.5 + 1 + 0x90 + 0x03 + 0x7f + 0x0 + + + + [Channel1] + end_of_track + Auto DJ On + 0.5 + 1 + 0x91 + 0x1C + 0x7f + 0x0 + + + [Channel1] + end_of_track + Auto DJ On + 0.5 + 1 + 0x91 + 0x1D + 0x7f + 0x0 + + + [Channel2] + end_of_track + Auto DJ On + 0.5 + 1 + 0x92 + 0x1C + 0x7f + 0x0 + + + [Channel2] + end_of_track + Auto DJ On + 0.5 + 1 + 0x92 + 0x1D + 0x7f + 0x0 + + + + [Channel1] + hotcue_1_enabled + Hotcue 1 (Pad 1) + 0x96 + 0x00 + 0x7E + 0.5 + + + [Channel1] + hotcue_2_enabled + Hotcue 2 (Pad 2) + 0x96 + 0x01 + 0x7E + 0.5 + + + [Channel1] + hotcue_3_enabled + Hotcue 3 (Pad 3) + 0x96 + 0x02 + 0x7E + 0.5 + + + [Channel1] + hotcue_4_enabled + Hotcue 4 (Pad 4) + 0x96 + 0x03 + 0x7E + 0.5 + + + [Channel2] + hotcue_1_enabled + Hotcue 1 (Pad 1) + 0x97 + 0x00 + 0x7E + 0.5 + + + [Channel2] + hotcue_2_enabled + Hotcue 2 (Pad 2) + 0x97 + 0x01 + 0x7E + 0.5 + + + [Channel2] + hotcue_3_enabled + Hotcue 3 (Pad 3) + 0x97 + 0x02 + 0x7E + 0.5 + + + [Channel2] + hotcue_4_enabled + Hotcue 4 (Pad 4) + 0x97 + 0x03 + 0x7E + 0.5 + + + + [Channel1] + hotcue_1_enabled + Hotcue 1 (Pad 1) + 0x96 + 0x08 + 0x7E + 0.5 + + + [Channel1] + hotcue_2_enabled + Hotcue 2 (Pad 2) + 0x96 + 0x09 + 0x7E + 0.5 + + + [Channel1] + hotcue_3_enabled + Hotcue 3 (Pad 3) + 0x96 + 0x0A + 0x7E + 0.5 + + + [Channel1] + hotcue_4_enabled + Hotcue 4 (Pad 4) + 0x96 + 0x0B + 0x7E + 0.5 + + + [Channel2] + hotcue_1_enabled + Hotcue 1 (Pad 1) + 0x97 + 0x08 + 0x7E + 0.5 + + + [Channel2] + hotcue_2_enabled + Hotcue 2 (Pad 2) + 0x97 + 0x09 + 0x7E + 0.5 + + + [Channel2] + hotcue_3_enabled + Hotcue 3 (Pad 3) + 0x97 + 0x0A + 0x7E + 0.5 + + + [Channel2] + hotcue_4_enabled + Hotcue 4 (Pad 4) + 0x97 + 0x0B + 0x7E + 0.5 + + + + [Channel1] + beatlooproll_1_activate + Loop 1 Beat (Pad 1) + 0x96 + 0x10 + 0x7F + 0.5 + + + [Channel1] + beatlooproll_2_activate + Loop 2 Beat (Pad 2) + 0x96 + 0x11 + 0x7F + 0.5 + + + [Channel1] + beatlooproll_4_activate + Loop 4 Beat (Pad 3) + 0x96 + 0x12 + 0x7F + 0.5 + + + [Channel1] + beatlooproll_8_activate + Loop 8 Beat (Pad 4) + 0x96 + 0x13 + 0x7F + 0.5 + + + [Channel2] + beatlooproll_1_activate + Loop 1 Beat (Pad 1) + 0x97 + 0x10 + 0x7F + 0.5 + + + [Channel2] + beatlooproll_2_activate + Loop 2 Beat (Pad 2) + 0x97 + 0x11 + 0x7F + 0.5 + + + [Channel2] + beatlooproll_4_activate + Loop 4 Beat (Pad 3) + 0x97 + 0x12 + 0x7F + 0.5 + + + [Channel2] + beatlooproll_8_activate + Loop 8 Beat (Pad 4) + 0x97 + 0x13 + 0x7F + 0.5 + + + + [EffectRack1_EffectUnit1_Effect1] + enabled + (Pad 1) + 0x96 + 0x20 + 0x7F + 0.5 + + + [EffectRack1_EffectUnit1_Effect2] + enabled + (Pad 2) + 0x96 + 0x21 + 0x7F + 0.5 + + + [EffectRack1_EffectUnit1_Effect3] + enabled + (Pad 3) + 0x96 + 0x22 + 0x7F + 0.5 + + + [EffectRack1_EffectUnit1] + group_[Channel1]_enable + (Pad 4) + 0x96 + 0x23 + 0x7F + 0.5 + + + [EffectRack1_EffectUnit1_Effect1] + enabled + (Pad 1) + 0x96 + 0x28 + 0x7F + 0.5 + + + [EffectRack1_EffectUnit1_Effect2] + enabled + (Pad 2) + 0x96 + 0x29 + 0x7F + 0.5 + + + [EffectRack1_EffectUnit1_Effect3] + enabled + (Pad 3) + 0x96 + 0x2A + 0x7F + 0.5 + + + [EffectRack1_EffectUnit1] + group_[Channel1]_enable + (Pad 4) + 0x96 + 0x2B + 0x7F + 0.5 + + + [EffectRack1_EffectUnit2_Effect1] + enabled + (Pad 1) + 0x97 + 0x20 + 0x7F + 0.5 + + + [EffectRack1_EffectUnit2_Effect2] + enabled + (Pad 2) + 0x97 + 0x21 + 0x7F + 0.5 + + + [EffectRack1_EffectUnit2_Effect3] + enabled + (Pad 3) + 0x97 + 0x22 + 0x7F + 0.5 + + + [EffectRack1_EffectUnit2] + group_[Channel2]_enable + (Pad 4) + 0x97 + 0x23 + 0x7F + 0.5 + + + [EffectRack1_EffectUnit2_Effect1] + enabled + (Pad 1) + 0x97 + 0x28 + 0x7F + 0.5 + + + [EffectRack1_EffectUnit2_Effect2] + enabled + (Pad 2) + 0x97 + 0x29 + 0x7F + 0.5 + + + [EffectRack1_EffectUnit2_Effect3] + enabled + (Pad 3) + 0x97 + 0x2A + 0x7F + 0.5 + + + [EffectRack1_EffectUnit2] + group_[Channel2]_enable + (Pad 4) + 0x97 + 0x2B + 0x7F + 0.5 + + + + [Sampler1] + play_indicator + (Pad 1 DECK A) + 0x96 + 0x30 + 0x7F + 0.5 + + + [Sampler2] + play_indicator + (Pad 2 DECK A) + 0x96 + 0x31 + 0x7F + 0.5 + + + [Sampler3] + play_indicator + (Pad 3 DECK A) + 0x96 + 0x32 + 0x7F + 0.5 + + + [Sampler4] + play_indicator + (Pad 4 DECK A) + 0x96 + 0x33 + 0x7F + 0.5 + + + [Sampler5] + play_indicator + (Pad 5 DECK B) + 0x97 + 0x30 + 0x7F + 0.5 + + + [Sampler6] + play_indicator + (Pad 6 DECK B) + 0x97 + 0x31 + 0x7F + 0.5 + + + [Sampler7] + play_indicator + (Pad 7 DECK B) + 0x97 + 0x32 + 0x7F + 0.5 + + + [Sampler8] + play_indicator + (Pad 4 DECK B) + 0x97 + 0x33 + 0x7F + 0.5 + + + +