Skip to content

Instantly share code, notes, and snippets.

@rjungemann
Last active February 6, 2021 02:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rjungemann/0c93de4e9c2ca95406c2ce05c7249a32 to your computer and use it in GitHub Desktop.
Save rjungemann/0c93de4e9c2ca95406c2ce05c7249a32 to your computer and use it in GitHub Desktop.
var FaderFoxDJ4 = {};
function inspect () {
print(Array.prototype.join.call(arguments, ' '));
}
function getInfo () {
print('---')
inspect('Deck', FaderFoxDJ4.leftDeckIsC ? 'C' : 'A');
inspect('Deck', FaderFoxDJ4.rightDeckIsD ? 'D' : 'B');
inspect('Shift', FaderFoxDJ4.shiftPressed ? 'active' : 'inactive');
}
function channelNBeatJump (deck, status, value) {
var channelName = '[Channel' + deck.toString() + ']';
engine.setValue(channelName, 'beatjump', (value === 127) ? -1 : 1);
};
function channelNCueJumpFn (deck) {
var channelName = '[Channel' + deck + ']';
var duration = engine.getValue(channelName, 'duration');
var samplerate = engine.getValue('[Master]', 'samplerate');
var samples = duration * samplerate;
var position = engine.getValue(channelName, 'playposition') * samples;
var cue = -1;
for (var i = 1; i <= 8; i++) {
var a = engine.getValue(channelName, 'hotcue_' + i.toString() + '_position');
if (a === -1) {
cue = i - 1;
break;
}
if (position < a) {
cue = i;
break;
}
}
var index = (value === 127) ? cue - 1 : cue + 1;
engine.setValue(channelName, 'hotcue_' + index + '_gotoandplay', 1)
}
function calculateGain (value) {
var v = value / 127.0;
var max = 3.0;
return (v < 0.5) ? v * 2.0 : (v - 0.5) * (max * 2.0) + 1.0;
}
function channelNFilter (deck, status, value) {
var channelName = '[Channel' + deck.toString() + ']'
if (FaderFoxDJ4.shiftPressed) {
engine.setValue(channelName, 'pregain', calculateGain(value));
} else {
var filterName = '[QuickEffectRack1_[Channel' + deck.toString() + ']]'
engine.setValue(filterName, 'super1', value / 127.0);
}
}
function channelNEqHighEnabled (deck, status, value) {
var channelName = '[Channel' + deck.toString() + ']'
engine.setValue(channelName, 'filterHighKill', v === 0 ? 1 : 0);
midi.sendShortMsg(status, 0x32, v === 0 ? 0x7f : 0);
}
function channelNEqMidEnabled (deck, status, value) {
var channelName = '[Channel' + deck.toString() + ']'
engine.setValue(channelName, 'filterMidKill', v === 0 ? 1 : 0);
midi.sendShortMsg(status, 0x27, v === 0 ? 0x7f : 0);
}
function channelNEqLowEnabled (deck, status, value) {
var channelName = '[Channel' + deck.toString() + ']'
engine.setValue(channelName, 'filterLowKill', v === 0 ? 1 : 0);
midi.sendShortMsg(status, 0x35, v === 0 ? 0x7f : 0);
}
function channelNEqHigh (deck, status, value) {
var channelName = '[Channel' + deck.toString() + ']'
engine.setValue(channelName, 'filterHigh', calculateGain(value));
}
function channelNEqMid (deck, status, value) {
var channelName = '[Channel' + deck.toString() + ']'
engine.setValue(channelName, 'filterMid', calculateGain(value));
}
function channelNEqLow (deck, status, value) {
var channelName = '[Channel' + deck.toString() + ']'
engine.setValue(channelName, 'filterLow', calculateGain(value));
}
function channelNFilterEnabled (deck, status, value) {
if (value === 0) return;
var channelName = '[Channel' + deck.toString() + ']'
var v = engine.getValue(channelName, 'mute');
engine.setValue(channelName, 'mute', v === 0 ? 1 : 0);
midi.sendShortMsg(status, 0x32, v === 0 ? 0x7f : 0);
}
function channelNCue (deck, status, value) {
if (value === 0) return;
var channelName = '[Channel' + deck.toString() + ']'
var v = engine.getValue(channelName, 'cue_default');
engine.setValue(channelName, 'cue_default', v === 0 ? 1 : 0);
midi.sendShortMsg(status, 0x26, v === 0 ? 0x7f : 0);
}
function channelNMute (deck, status, value) {
if (value === 0) return;
var channelName = '[Channel' + deck.toString() + ']'
var v = engine.getValue(channelName, 'mute');
engine.setValue(channelName, 'mute', v === 0 ? 1 : 0);
midi.sendShortMsg(status, 0x34, v === 0 ? 0x7f : 0);
}
function channelNVolume (deck, status, value) {
var realDeck;
if (deck === 1) {
realDeck = FaderFoxDJ4.leftDeckIsC ? 3 : 1;
} else {
realDeck = FaderFoxDJ4.rightDeckIsD ? 4 : 2;
}
var channelName = '[Channel' + realDeck.toString() + ']';
if (FaderFoxDJ4.shiftPressed) {
engine.setValue(channelName, 'rate', (value - 64.0) / 64.0);
} else {
engine.setValue(channelName, 'volume', value / 127.0);
}
}
function channelNSync (deck, status, value) {
if (value === 0) return;
var channelName = '[Channel' + deck.toString() + ']'
var v = engine.getValue(channelName, 'sync_enabled');
engine.setValue(channelName, 'sync_enabled', v === 0 ? 1 : 0);
midi.sendShortMsg(status, 0x30, v === 0 ? 0x7f : 0);
}
function channelNPlay (deck, status, value) {
if (value === 0) return;
var channelName = '[Channel' + deck.toString() + ']'
var v = engine.getValue(channelName, 'play');
engine.setValue(channelName, 'play', v === 0 ? 1 : 0);
midi.sendShortMsg(status, 0x38, v === 0 ? 0x7f : 0);
}
function channelNKeyAdjust (deck, status, value) {
var channelName = '[Channel' + deck.toString() + ']';
var oldValue = engine.getValue(channelName, 'pitch_adjust');
var difference = (value === 127) ? -1.0 : 1.0;
var newValue = oldValue + difference;
inspect('--- channelNKeyAdjust', channelName, 'oldValue', oldValue, 'difference', difference, 'newValue', newValue);
engine.setValue(channelName, 'pitch_adjust', newValue);
}
function channelNLoopToggle (deck, value) {
if (value === 0) return;
inspect('loop_enabled', engine.getValue(channelName, 'loop_enabled'));
try {
var channelName = '[Channel' + deck.toString() + ']';
var v = engine.getValue(channelName, 'beatloop_activate');
if (v === 0) {
engine.setValue(channelName, 'loop_enabled', 1);
engine.setValue(channelName, 'reloop_toggle', 1);
} else {
engine.setValue(channelName, 'loop_enabled', 0);
engine.setValue(channelName, 'reloop_toggle', 0);
}
inspect('channelNLoopToggle', channelName, value, v)
} catch (e) {
print('--- Could not toggle loop. A deck might not be loaded.')
}
}
function channelNLoopMove (deck, status, value) {
try {
engine.setValue('[Channel' + deck.toString() + ']', 'loop_move', value !== 127 ? 1 : -1);
} catch (e) {
print('--- Could not move loop. A loop might not be defined.')
}
}
function channelNLoopSize (deck, status, value) {
try {
var channelName = '[Channel' + deck.toString() + ']';
var delta = value !== 127 ? 1 : -1;
var v = engine.getValue(channelName, 'beatloop_size') + delta
engine.setValue(channelName, 'beatloop_size', v);
} catch (e) {
print('--- Could not set loop size. A loop might not be defined.')
}
}
function channelNFxNAssign (deck, fx, value) {
if (value === 0) return;
var channelName = '[EffectRack1_EffectUnit' + fx.toString() + ']';
var fieldName = 'group_[Channel' + deck.toString() + ']_enable'
var current = engine.getValue(channelName, fieldName);
engine.setValue(channelName, fieldName, current === 0 ? 1 : 0);
}
function fxNParamNToggle (fx, param, value) {
if (value === 0) return;
var channelName = '[EffectRack1_EffectUnit' + fx.toString() + '_Effect' + param.toString() + ']';
var current = engine.getValue(channelName, 'enabled');
engine.setValue(channelName, 'enabled', current === 0 ? 1 : 0);
}
function fxNParamNChange (fx, param, value) {
var channelName = '[EffectRack1_EffectUnit' + fx.toString() + '_Effect' + param.toString() + ']';
var oldValue = engine.getValue(channelName, 'meta');
var division = 0.05;
var difference = ((value === 127) ? -1.0 : 1.0) * division;
var newValue = oldValue + difference;
engine.setValue(channelName, 'meta', newValue);
inspect('fxNParamNChange', channelName, oldValue, difference, newValue)
}
function fxNMix (fx, value) {
var channelName = '[EffectRack1_EffectUnit' + fx.toString() + ']';
var oldValue = engine.getValue(channelName, 'mix');
var division = 0.05;
var difference = ((value === 127) ? -1.0 : 1.0) * division;
var newValue = oldValue + difference;
engine.setValue(channelName, 'mix', newValue);
inspect('fxNMix', channelName, oldValue, difference, newValue)
}
FaderFoxDJ4.reinit = function () {
FaderFoxDJ4.shiftPressed = false;
FaderFoxDJ4.leftDeckIsC = false;
FaderFoxDJ4.rightDeckIsD = false;
FaderFoxDJ4.cuePoints = [0, 0, 0, 0];
engine.softTakeover('[Master]', 'crossfader', true);
// Reset each of the four channels
for (var i = 0; i < 4; i++) {
var status = 0xB0 + i;
var channelName = '[Channel' + (i + 1).toString() + ']';
var filterName = '[QuickEffectRack1_[Channel' + (i + 1).toString() + ']]';
// Reset lights
midi.sendShortMsg(status, 0x30, engine.getValue('[Channel1]', 'sync_enabled'));
midi.sendShortMsg(status, 0x38, engine.getValue('[Channel1]', 'play'));
midi.sendShortMsg(status, 0x32, engine.getValue('[Channel1]', 'mute'));
midi.sendShortMsg(status, 0x26, engine.getValue(filterName, 'super1'));
midi.sendShortMsg(status, 0x32, engine.getValue('[Channel1]', 'mute'));
// Reduce jumpiness in knobs/faders
engine.softTakeover(channelName, 'volume', true);
engine.softTakeover(channelName, 'rate', true);
engine.softTakeover(filterName, 'super1', true);
engine.softTakeover(channelName, 'pregain', true);
engine.softTakeover(channelName, 'filterHigh', true);
engine.softTakeover(channelName, 'filterMid', true);
engine.softTakeover(channelName, 'filterLow', true);
print('--- FaderFox DJ4 ' + channelName + ' reinitialized');
}
print('--- FaderFox DJ4 reinitialized');
}
FaderFoxDJ4.init = function(_id) {
FaderFoxDJ4.reinit();
};
FaderFoxDJ4.shutdown = function () {
};
// ---
// Top
// ---
FaderFoxDJ4.moveLibrary = function (channel, control, value, status, group) {
engine.setValue(group, 'MoveVertical', value !== 127 ? 1 : -1);
};
// Beat jump
FaderFoxDJ4.channel1BeatJump = function (channel, control, value, status, group) {
channelNBeatJump(1, status, value);
};
FaderFoxDJ4.channel2BeatJump = function (channel, control, value, status, group) {
channelNBeatJump(2, status, value);
};
FaderFoxDJ4.channel3BeatJump = function (channel, control, value, status, group) {
channelNBeatJump(3, status, value);
};
FaderFoxDJ4.channel4BeatJump = function (channel, control, value, status, group) {
channelNBeatJump(4, status, value);
};
// Cue jump
FaderFoxDJ4.channel1CueJump = function (channel, control, value, status, group) {
channelNCueJump(1);
};
FaderFoxDJ4.channel2CueJump = function (channel, control, value, status, group) {
channelNCueJump(2);
};
FaderFoxDJ4.channel3CueJump = function (channel, control, value, status, group) {
channelNCueJump(3);
};
FaderFoxDJ4.channel4CueJump = function (channel, control, value, status, group) {
channelNCueJump(4);
};
// Key adjust
FaderFoxDJ4.channel1KeyAdjust = function (channel, control, value, status, group) {
channelNKeyAdjust(1, status, value);
};
FaderFoxDJ4.channel2KeyAdjust = function (channel, control, value, status, group) {
channelNKeyAdjust(2, status, value);
};
FaderFoxDJ4.channel3KeyAdjust = function (channel, control, value, status, group) {
channelNKeyAdjust(3, status, value);
};
FaderFoxDJ4.channel4KeyAdjust = function (channel, control, value, status, group) {
channelNKeyAdjust(4, status, value);
};
// Loop toggle
FaderFoxDJ4.channel1LoopToggle = function (channel, control, value, status, group) {
channelNLoopToggle(1, value);
};
// Loop move
FaderFoxDJ4.channel1LoopMove = function (channel, control, value, status, group) {
channelNLoopMove(1, status, value);
};
FaderFoxDJ4.channel1LoopSize = function (channel, control, value, status, group) {
channelNLoopSize(1, status, value);
};
FaderFoxDJ4.channel2LoopMove = function (channel, control, value, status, group) {
channelNLoopMove(2, status, value);
};
FaderFoxDJ4.channel2LoopSize = function (channel, control, value, status, group) {
channelNLoopSize(2, status, value);
};
FaderFoxDJ4.channel3LoopMove = function (channel, control, value, status, group) {
channelNLoopMove(3, status, value);
};
FaderFoxDJ4.channel3LoopSize = function (channel, control, value, status, group) {
channelNLoopSize(3, status, value);
};
FaderFoxDJ4.channel4LoopMove = function (channel, control, value, status, group) {
channelNLoopMove(4, status, value);
};
FaderFoxDJ4.channel4LoopSize = function (channel, control, value, status, group) {
channelNLoopSize(4, status, value);
};
// FX
FaderFoxDJ4.fx1Param1Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(1, 1, value)
};
FaderFoxDJ4.fx1Param2Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(1, 2, value)
};
FaderFoxDJ4.fx1Param3Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(1, 3, value)
};
FaderFoxDJ4.fx1Param4Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(1, 4, value)
};
FaderFoxDJ4.fx2Param1Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(2, 1, value)
};
FaderFoxDJ4.fx2Param2Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(2, 2, value)
};
FaderFoxDJ4.fx2Param3Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(2, 3, value)
};
FaderFoxDJ4.fx2Param4Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(2, 4, value)
};
FaderFoxDJ4.fx3Param1Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(3, 1, value)
};
FaderFoxDJ4.fx3Param2Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(3, 2, value)
};
FaderFoxDJ4.fx3Param3Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(3, 3, value)
};
FaderFoxDJ4.fx3Param4Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(3, 4, value)
};
FaderFoxDJ4.fx4Param1Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(4, 1, value)
};
FaderFoxDJ4.fx4Param2Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(4, 2, value)
};
FaderFoxDJ4.fx4Param3Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(4, 3, value)
};
FaderFoxDJ4.fx4Param4Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(4, 4, value)
};
// FX mix
FaderFoxDJ4.fx1Mix = function (channel, control, value, status, group) {
fxNMix(1, value)
};
FaderFoxDJ4.fx2Mix = function (channel, control, value, status, group) {
fxNMix(2, value)
};
FaderFoxDJ4.fx3Mix = function (channel, control, value, status, group) {
fxNMix(3, value)
};
FaderFoxDJ4.fx4Mix = function (channel, control, value, status, group) {
fxNMix(4, value)
};
// ------
// Middle
// ------
// Filter enabled
FaderFoxDJ4.channel1FilterEnabled = function (channel, control, value, status, group) {
channelNFilterEnabled(1, status, value);
};
FaderFoxDJ4.channel2FilterEnabled = function (channel, control, value, status, group) {
channelNFilterEnabled(2, status, value);
};
FaderFoxDJ4.channel3FilterEnabled = function (channel, control, value, status, group) {
channelNFilterEnabled(3, status, value);
};
FaderFoxDJ4.channel4FilterEnabled = function (channel, control, value, status, group) {
channelNFilterEnabled(4, status, value);
};
// EQ High enabled
FaderFoxDJ4.channel1EqHighEnabled = function (channel, control, value, status, group) {
channelNEqHighEnabled(1, status, value);
};
FaderFoxDJ4.channel2EqHighEnabled = function (channel, control, value, status, group) {
channelNEqHighEnabled(2, status, value);
};
FaderFoxDJ4.channel3EqHighEnabled = function (channel, control, value, status, group) {
channelNEqHighEnabled(3, status, value);
};
FaderFoxDJ4.channel4EqHighEnabled = function (channel, control, value, status, group) {
channelNEqHighEnabled(4, status, value);
};
// EQ Mid enabled
FaderFoxDJ4.channel1EqMidEnabled = function (channel, control, value, status, group) {
channelNEqMidEnabled(1, status, value);
};
FaderFoxDJ4.channel2EqMidEnabled = function (channel, control, value, status, group) {
channelNEqMidEnabled(2, status, value);
};
FaderFoxDJ4.channel3EqMidEnabled = function (channel, control, value, status, group) {
channelNEqMidEnabled(3, status, value);
};
FaderFoxDJ4.channel4EqMidEnabled = function (channel, control, value, status, group) {
channelNEqMidEnabled(4, status, value);
};
// EQ Low enabled
FaderFoxDJ4.channel1EqLowEnabled = function (channel, control, value, status, group) {
channelNEqLowEnabled(1, status, value);
};
FaderFoxDJ4.channel2EqLowEnabled = function (channel, control, value, status, group) {
channelNEqLowEnabled(2, status, value);
};
FaderFoxDJ4.channel3EqLowEnabled = function (channel, control, value, status, group) {
channelNEqLowEnabled(3, status, value);
};
FaderFoxDJ4.channel4EqLowEnabled = function (channel, control, value, status, group) {
channelNEqLowEnabled(4, status, value);
};
// Filter
FaderFoxDJ4.channel1Filter = function (channel, control, value, status, group) {
channelNFilter(1, status, value);
};
FaderFoxDJ4.channel2Filter = function (channel, control, value, status, group) {
channelNFilter(2, status, value);
};
FaderFoxDJ4.channel3Filter = function (channel, control, value, status, group) {
channelNFilter(3, status, value);
};
FaderFoxDJ4.channel4Filter = function (channel, control, value, status, group) {
channelNFilter(4, status, value);
};
// EQ High
FaderFoxDJ4.channel1EqHigh = function (channel, control, value, status, group) {
channelNEqHigh(1, status, value);
};
FaderFoxDJ4.channel2EqHigh = function (channel, control, value, status, group) {
channelNEqHigh(2, status, value);
};
FaderFoxDJ4.channel3EqHigh = function (channel, control, value, status, group) {
channelNEqHigh(3, status, value);
};
FaderFoxDJ4.channel4EqHigh = function (channel, control, value, status, group) {
channelNEqHigh(4, status, value);
};
// EQ Mid
FaderFoxDJ4.channel1EqMid = function (channel, control, value, status, group) {
channelNEqMid(1, status, value);
};
FaderFoxDJ4.channel2EqMid = function (channel, control, value, status, group) {
channelNEqMid(2, status, value);
};
FaderFoxDJ4.channel3EqMid = function (channel, control, value, status, group) {
channelNEqMid(3, status, value);
};
FaderFoxDJ4.channel4EqMid = function (channel, control, value, status, group) {
channelNEqMid(4, status, value);
};
// EQ Low
FaderFoxDJ4.channel1EqLow = function (channel, control, value, status, group) {
channelNEqLow(1, status, value);
};
FaderFoxDJ4.channel2EqLow = function (channel, control, value, status, group) {
channelNEqLow(2, status, value);
};
FaderFoxDJ4.channel3EqMid = function (channel, control, value, status, group) {
channelNEqLow(3, status, value);
};
FaderFoxDJ4.channel4EqMid = function (channel, control, value, status, group) {
channelNEqLow(4, status, value);
};
// Cue
FaderFoxDJ4.channel1Cue = function (channel, control, value, status, group) {
channelNCue(1, status, value);
};
FaderFoxDJ4.channel2Cue = function (channel, control, value, status, group) {
channelNCue(2, status, value);
};
FaderFoxDJ4.channel3Cue = function (channel, control, value, status, group) {
channelNCue(3, status, value);
};
FaderFoxDJ4.channel4Cue = function (channel, control, value, status, group) {
channelNCue(4, status, value);
};
// Mute
FaderFoxDJ4.channel1Mute = function (channel, control, value, status, group) {
channelNMute(1, status, value);
};
FaderFoxDJ4.channel2Mute = function (channel, control, value, status, group) {
channelNMute(2, status, value);
};
FaderFoxDJ4.channel3Mute = function (channel, control, value, status, group) {
channelNMute(3, status, value);
};
FaderFoxDJ4.channel4Mute = function (channel, control, value, status, group) {
channelNMute(4, status, value);
};
// Volume
FaderFoxDJ4.channel1Volume = function (channel, control, value, status, group) {
channelNVolume(1, status, value);
};
FaderFoxDJ4.channel2Volume = function (channel, control, value, status, group) {
channelNVolume(2, status, value);
};
// There is no channel 3 and 4 faders, we have to track track assignment ourselves!
// ------
// Bottom
// ------
// Sync
FaderFoxDJ4.channel1Sync = function (channel, control, value, status, group) {
channelNSync(1, status, value);
};
FaderFoxDJ4.channel2Sync = function (channel, control, value, status, group) {
channelNSync(2, status, value);
};
FaderFoxDJ4.channel3Sync = function (channel, control, value, status, group) {
channelNSync(3, status, value);
};
FaderFoxDJ4.channel4Sync = function (channel, control, value, status, group) {
channelNSync(4, status, value);
};
// Play
FaderFoxDJ4.channel1Play = function (channel, control, value, status, group) {
channelNPlay(1, status, value);
};
FaderFoxDJ4.channel2Play = function (channel, control, value, status, group) {
channelNPlay(2, status, value);
};
FaderFoxDJ4.channel3Play = function (channel, control, value, status, group) {
channelNPlay(3, status, value);
};
FaderFoxDJ4.channel4Play = function (channel, control, value, status, group) {
channelNPlay(4, status, value);
};
// Shift
FaderFoxDJ4.shiftButton = function (channel, control, value, status, group) {
FaderFoxDJ4.shiftPressed = (value !== 0);
getInfo();
};
// Switch decks
FaderFoxDJ4.deckAButton = function (channel, control, value, status, group) {
FaderFoxDJ4.leftDeckIsC = false;
getInfo();
};
FaderFoxDJ4.deckCButton = function (channel, control, value, status, group) {
FaderFoxDJ4.leftDeckIsC = true;
getInfo();
};
FaderFoxDJ4.deckBButton = function (channel, control, value, status, group) {
FaderFoxDJ4.rightDeckIsD = false;
getInfo();
};
FaderFoxDJ4.deckDButton = function (channel, control, value, status, group) {
FaderFoxDJ4.rightDeckIsD = true;
getInfo();
};
// FX assign
FaderFoxDJ4.fx1Param1Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(1, 1, value);
};
FaderFoxDJ4.fx1Param2Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(1, 2, value);
};
FaderFoxDJ4.fx1Param3Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(1, 3, value);
};
FaderFoxDJ4.fx2Param1Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(2, 1, value);
};
FaderFoxDJ4.fx2Param2Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(2, 2, value);
};
FaderFoxDJ4.fx2Param3Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(2, 3, value);
};
FaderFoxDJ4.fx3Param1Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(3, 1, value);
};
FaderFoxDJ4.fx3Param2Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(3, 2, value);
};
FaderFoxDJ4.fx3Param3Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(3, 3, value);
};
FaderFoxDJ4.fx4Param1Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(4, 1, value);
};
FaderFoxDJ4.fx4Param2Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(4, 2, value);
};
FaderFoxDJ4.fx4Param3Toggle = function (channel, control, value, status, group) {
fxNParamNToggle(4, 3, value);
};
FaderFoxDJ4.fx1Param1Change = function (channel, control, value, status, group) {
fxNParamNChange(1, 1, value);
};
FaderFoxDJ4.fx1Param2Change = function (channel, control, value, status, group) {
fxNParamNChange(1, 2, value);
};
FaderFoxDJ4.fx1Param3Change = function (channel, control, value, status, group) {
fxNParamNChange(1, 3, value);
};
FaderFoxDJ4.fx2Param1Change = function (channel, control, value, status, group) {
fxNParamNChange(2, 1, value);
};
FaderFoxDJ4.fx2Param2Change = function (channel, control, value, status, group) {
fxNParamNChange(2, 2, value);
};
FaderFoxDJ4.fx2Param3Change = function (channel, control, value, status, group) {
fxNParamNChange(2, 3, value);
};
FaderFoxDJ4.fx3Param1Change = function (channel, control, value, status, group) {
fxNParamNChange(3, 1, value);
};
FaderFoxDJ4.fx3Param2Change = function (channel, control, value, status, group) {
fxNParamNChange(3, 2, value);
};
FaderFoxDJ4.fx3Param3Change = function (channel, control, value, status, group) {
fxNParamNChange(3, 3, value);
};
FaderFoxDJ4.fx4Param1Change = function (channel, control, value, status, group) {
fxNParamNChange(4, 1, value);
};
FaderFoxDJ4.fx4Param2Change = function (channel, control, value, status, group) {
fxNParamNChange(4, 2, value);
};
FaderFoxDJ4.fx4Param3Change = function (channel, control, value, status, group) {
fxNParamNChange(4, 3, value);
};
<?xml version="1.0" encoding="utf-8"?>
<MixxxControllerPreset schemaVersion="1" mixxxVersion="1.11+">
<info>
<name>FaderFox DJ4</name>
<author>Roger Jungemann</author>
<description>MIDI mapping for FaderFox DJ4 Controller</description>
<forums>http://www.mixxx.org/forums/viewtopic.php?f=7&amp;t=3940</forums>
<manual>faderfox_dj4</manual>
</info>
<controller id="FaderFox DJ4">
<scriptfiles>
<file filename="lodash.mixxx.js"/>
<file filename="midi-components-0.0.js"/>
<file functionprefix="FaderFoxDJ4" filename="FaderFox-DJ4-scripts.js" />
</scriptfiles>
<controls>
<!-- Master -->
<control>
<group>[Master]</group>
<key>crossfader</key>
<status>0xB0</status>
<midino>0x5C</midino>
</control>
<control>
<group>[Master]</group>
<key>volume</key>
<status>0xB0</status>
<midino>0x5E</midino>
<options><diff/></options>
</control>
<!-- FaderFox does not track deck A/C or B/D for faders, so we need to do it in code -->
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1Volume</key>
<status>0xB0</status>
<midino>0x16</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>FaderFoxDJ4.channel2Volume</key>
<status>0xB1</status>
<midino>0x16</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<!-- Knobs at top -->
<control>
<group>[Master]</group>
<key>maximize_library</key>
<status>0xB0</status>
<midino>0x73</midino>
</control>
<control>
<group>[Library]</group>
<key>MoveFocusForward</key>
<status>0xB0</status>
<midino>0x70</midino>
</control>
<control>
<group>[Library]</group>
<key>FaderFoxDJ4.moveLibrary</key>
<status>0xB0</status>
<midino>0x64</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Library]</group>
<key>FaderFoxDJ4.moveLibrary</key>
<status>0xB0</status>
<midino>0x66</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Library]</group>
<key>FaderFoxDJ4.moveLibrary</key>
<status>0xB1</status>
<midino>0x66</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Library]</group>
<key>FaderFoxDJ4.moveLibrary</key>
<status>0xB2</status>
<midino>0x66</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Library]</group>
<key>FaderFoxDJ4.moveLibrary</key>
<status>0xB3</status>
<midino>0x66</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<!-- Loading tracks from library into deck -->
<control>
<group>[Channel1]</group>
<key>LoadSelectedTrack</key>
<status>0xB0</status>
<midino>0x6C</midino>
</control>
<control>
<group>[Channel2]</group>
<key>LoadSelectedTrack</key>
<status>0xB1</status>
<midino>0x6C</midino>
</control>
<control>
<group>[Channel3]</group>
<key>LoadSelectedTrack</key>
<status>0xB2</status>
<midino>0x6C</midino>
</control>
<control>
<group>[Channel4]</group>
<key>LoadSelectedTrack</key>
<status>0xB3</status>
<midino>0x6C</midino>
</control>
<!-- Seek and scrub to cue -->
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1BeatJump</key>
<status>0xB0</status>
<midino>0x18</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1CueJump</key>
<status>0xB0</status>
<midino>0x19</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>FaderFoxDJ4.channel2BeatJump</key>
<status>0xB1</status>
<midino>0x18</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>FaderFoxDJ4.channel2CueJump</key>
<status>0xB1</status>
<midino>0x19</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel3]</group>
<key>FaderFoxDJ4.channel3BeatJump</key>
<status>0xB2</status>
<midino>0x18</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel3]</group>
<key>FaderFoxDJ4.channel3CueJump</key>
<status>0xB2</status>
<midino>0x19</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel4]</group>
<key>FaderFoxDJ4.channel4BeatJump</key>
<status>0xB3</status>
<midino>0x18</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel4]</group>
<key>FaderFoxDJ4.channel4CueJump</key>
<status>0xB3</status>
<midino>0x19</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<!-- Pitch/Key -->
<control>
<group>[Channel1]</group>
<key>pitch_adjust</key>
<status>0xB0</status>
<midino>0x1C</midino>
<options>
<diff/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1KeyAdjust</key>
<status>0xB0</status>
<midino>0x1D</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>pitch_adjust</key>
<status>0xB1</status>
<midino>0x1C</midino>
<options>
<diff/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>FaderFoxDJ4.channel2KeyAdjust</key>
<status>0xB1</status>
<midino>0x1D</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel3]</group>
<key>pitch_adjust</key>
<status>0xB2</status>
<midino>0x1C</midino>
<options>
<diff/>
</options>
</control>
<control>
<group>[Channel3]</group>
<key>FaderFoxDJ4.channel3KeyAdjust</key>
<status>0xB2</status>
<midino>0x1D</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel4]</group>
<key>pitch_adjust</key>
<status>0xB3</status>
<midino>0x1C</midino>
<options>
<diff/>
</options>
</control>
<control>
<group>[Channel4]</group>
<key>FaderFoxDJ4.channel4KeyAdjust</key>
<status>0xB3</status>
<midino>0x1D</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<!-- Loop -->
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1LoopSize</key>
<status>0xB0</status>
<midino>0x1A</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1LoopMove</key>
<status>0xB0</status>
<midino>0x1B</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1LoopToggle</key>
<status>0xB0</status>
<midino>0x54</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>FaderFoxDJ4.channel2LoopSize</key>
<status>0xB1</status>
<midino>0x1A</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>FaderFoxDJ4.channel2LoopMove</key>
<status>0xB1</status>
<midino>0x1B</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>loop_in</key>
<status>0xB1</status>
<midino>0x54</midino>
</control>
<control>
<group>[Channel2]</group>
<key>loop_out</key>
<status>0xB1</status>
<midino>0x55</midino>
</control>
<control>
<group>[Channel3]</group>
<key>FaderFoxDJ4.channel3LoopSize</key>
<status>0xB2</status>
<midino>0x1A</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel3]</group>
<key>FaderFoxDJ4.channel3LoopMove</key>
<status>0xB2</status>
<midino>0x1B</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel3]</group>
<key>loop_in</key>
<status>0xB2</status>
<midino>0x54</midino>
</control>
<control>
<group>[Channel3]</group>
<key>loop_out</key>
<status>0xB2</status>
<midino>0x55</midino>
</control>
<control>
<group>[Channel4]</group>
<key>FaderFoxDJ4.channel4LoopSize</key>
<status>0xB3</status>
<midino>0x1A</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel4]</group>
<key>FaderFoxDJ4.channel4LoopMove</key>
<status>0xB3</status>
<midino>0x1B</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel4]</group>
<key>loop_in</key>
<status>0xB3</status>
<midino>0x54</midino>
</control>
<control>
<group>[Channel4]</group>
<key>loop_out</key>
<status>0xB3</status>
<midino>0x55</midino>
</control>
<!-- Shift and deck-switching -->
<control>
<group>[Master]</group>
<key>FaderFoxDJ4.shiftButton</key>
<status>0xB0</status>
<midino>0x74</midino>
<options><Script-Binding/></options>
</control>
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.deckAButton</key>
<status>0xB0</status>
<midino>0x75</midino>
<options><Script-Binding/></options>
</control>
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.deckBButton</key>
<status>0xB1</status>
<midino>0x75</midino>
<options><Script-Binding/></options>
</control>
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.deckCButton</key>
<status>0xB2</status>
<midino>0x75</midino>
<options><Script-Binding/></options>
</control>
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.deckDButton</key>
<status>0xB3</status>
<midino>0x75</midino>
<options><Script-Binding/></options>
</control>
<!-- FX Enabled -->
<control>
<group>[EffectRack1_EffectUnit1_Effect1]</group>
<key>FaderFoxDJ4.fx1Param1Toggle</key>
<status>0xB0</status>
<midino>0x1E</midino>
<options><Script-Binding/></options>
</control>
<control>
<group>[EffectRack1_EffectUnit1_Effect2]</group>
<key>FaderFoxDJ4.fx1Param2Toggle</key>
<status>0xB0</status>
<midino>0x20</midino>
<options><Script-Binding/></options>
</control>
<control>
<group>[EffectRack1_EffectUnit1_Effect3]</group>
<key>FaderFoxDJ4.fx1Param3Toggle</key>
<status>0xB0</status>
<midino>0x22</midino>
<options><Script-Binding/></options>
</control>
<control>
<group>[EffectRack1_EffectUnit2_Effect1]</group>
<key>FaderFoxDJ4.fx2Param1Toggle</key>
<status>0xB1</status>
<midino>0x1E</midino>
<options><Script-Binding/></options>
</control>
<control>
<group>[EffectRack1_EffectUnit2_Effect2]</group>
<key>FaderFoxDJ4.fx2Param2Toggle</key>
<status>0xB1</status>
<midino>0x20</midino>
<options><Script-Binding/></options>
</control>
<control>
<group>[EffectRack1_EffectUnit2_Effect3]</group>
<key>FaderFoxDJ4.fx2Param3Toggle</key>
<status>0xB1</status>
<midino>0x22</midino>
<options><Script-Binding/></options>
</control>
<control>
<group>[EffectRack1_EffectUnit3_Effect1]</group>
<key>FaderFoxDJ4.fx3Param1Toggle</key>
<status>0xB2</status>
<midino>0x1E</midino>
<options><Script-Binding/></options>
</control>
<control>
<group>[EffectRack1_EffectUnit3_Effect2]</group>
<key>FaderFoxDJ4.fx3Param2Toggle</key>
<status>0xB2</status>
<midino>0x20</midino>
<options><Script-Binding/></options>
</control>
<control>
<group>[EffectRack1_EffectUnit3_Effect3]</group>
<key>FaderFoxDJ4.fx3Param3Toggle</key>
<status>0xB2</status>
<midino>0x22</midino>
<options><Script-Binding/></options>
</control>
<control>
<group>[EffectRack1_EffectUnit4_Effect1]</group>
<key>FaderFoxDJ4.fx4Param1Toggle</key>
<status>0xB3</status>
<midino>0x1E</midino>
<options><Script-Binding/></options>
</control>
<control>
<group>[EffectRack1_EffectUnit4_Effect2]</group>
<key>FaderFoxDJ4.fx4Param2Toggle</key>
<status>0xB3</status>
<midino>0x20</midino>
<options><Script-Binding/></options>
</control>
<control>
<group>[EffectRack1_EffectUnit4_Effect3]</group>
<key>FaderFoxDJ4.fx4Param3Toggle</key>
<status>0xB3</status>
<midino>0x22</midino>
<options><Script-Binding/></options>
</control>
<!-- FX Change -->
<control>
<group>[EffectRack1_EffectUnit1_Effect1]</group>
<key>FaderFoxDJ4.fx1Param1Change</key>
<status>0xB0</status>
<midino>0x02</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit1_Effect2]</group>
<key>FaderFoxDJ4.fx1Param2Change</key>
<status>0xB0</status>
<midino>0x04</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit1_Effect3]</group>
<key>FaderFoxDJ4.fx1Param3Change</key>
<status>0xB0</status>
<midino>0x06</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit2_Effect1]</group>
<key>FaderFoxDJ4.fx2Param1Change</key>
<status>0xB1</status>
<midino>0x02</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit2_Effect2]</group>
<key>FaderFoxDJ4.fx2Param2Change</key>
<status>0xB1</status>
<midino>0x04</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit2_Effect3]</group>
<key>FaderFoxDJ4.fx2Param3Change</key>
<status>0xB1</status>
<midino>0x06</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit3_Effect1]</group>
<key>FaderFoxDJ4.fx3Param1Change</key>
<status>0xB2</status>
<midino>0x02</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit3_Effect2]</group>
<key>FaderFoxDJ4.fx3Param2Change</key>
<status>0xB2</status>
<midino>0x04</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit3_Effect3]</group>
<key>FaderFoxDJ4.fx3Param3Change</key>
<status>0xB2</status>
<midino>0x06</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit4_Effect1]</group>
<key>FaderFoxDJ4.fx4Param1Change</key>
<status>0xB3</status>
<midino>0x02</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit4_Effect2]</group>
<key>FaderFoxDJ4.fx4Param2Change</key>
<status>0xB3</status>
<midino>0x04</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit4_Effect3]</group>
<key>FaderFoxDJ4.fx4Param3Change</key>
<status>0xB3</status>
<midino>0x06</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<!-- FX mix -->
<control>
<group>[EffectRack1_EffectUnit1]</group>
<key>FaderFoxDJ4.fx1Mix</key>
<status>0xB0</status>
<midino>0x08</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit2]</group>
<key>FaderFoxDJ4.fx2Mix</key>
<status>0xB1</status>
<midino>0x08</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit3]</group>
<key>FaderFoxDJ4.fx3Mix</key>
<status>0xB2</status>
<midino>0x08</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[EffectRack1_EffectUnit4]</group>
<key>FaderFoxDJ4.fx4Mix</key>
<status>0xB3</status>
<midino>0x08</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<!-- Channel 1 -->
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1Filter</key>
<status>0xB0</status>
<midino>0x14</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1EqHigh</key>
<status>0xB0</status>
<midino>0x0C</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1EqMid</key>
<status>0xB0</status>
<midino>0xOE</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1EqLow</key>
<status>0xB0</status>
<midino>0x10</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[QuickEffectRack1_[Channel1]_Effect1]</group>
<key>FaderFoxDJ4.channel1FilterEnabled</key>
<status>0xB0</status>
<midino>0x32</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1Cue</key>
<status>0xB0</status>
<midino>0x26</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1Mute</key>
<status>0xB0</status>
<midino>0x34</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1EqHighEnabled</key>
<status>0xB0</status>
<midino>0x33</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1EqMidEnabled</key>
<status>0xB0</status>
<midino>0x27</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1EqLowEnabled</key>
<status>0xB0</status>
<midino>0x35</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>filter</key>
<status>0xB0</status>
<midino>0x14</midino>
</control>
<control>
<group>[Channel1]</group>
<key>filterHigh</key>
<status>0xB0</status>
<midino>0x0C</midino>
</control>
<control>
<group>[Channel1]</group>
<key>filterMid</key>
<status>0xB0</status>
<midino>0x0E</midino>
</control>
<control>
<group>[Channel1]</group>
<key>filterLow</key>
<status>0xB0</status>
<midino>0x10</midino>
</control>
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1Sync</key>
<status>0xB0</status>
<midino>0x30</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1Play</key>
<status>0xB0</status>
<midino>0x38</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>rate_temp_down</key>
<status>0xB0</status>
<midino>0x4E</midino>
</control>
<control>
<group>[Channel1]</group>
<key>rate_temp_up</key>
<status>0xB0</status>
<midino>0x50</midino>
</control>
<!-- TODO: Grey keys -->
<!-- Channel 2 -->
<control>
<group>[Channel2]</group>
<key>FaderFoxDJ4.channel2Filter</key>
<status>0xB1</status>
<midino>0x14</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>FaderFoxDJ4.channel2EqHigh</key>
<status>0xB1</status>
<midino>0x0C</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>FaderFoxDJ4.channel2EqMid</key>
<status>0xB1</status>
<midino>0xOE</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>FaderFoxDJ4.channel2EqLow</key>
<status>0xB1</status>
<midino>0x10</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[QuickEffectRack1_[Channel2]_Effect1]</group>
<key>FaderFoxDJ4.channel2FilterEnabled</key>
<status>0xB1</status>
<midino>0x32</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>FaderFoxDJ4.channel2Cue</key>
<status>0xB1</status>
<midino>0x26</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>FaderFoxDJ4.channel2Mute</key>
<status>0xB1</status>
<midino>0x34</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>FaderFoxDJ4.channel2EqHighEnabled</key>
<status>0xB1</status>
<midino>0x33</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>FaderFoxDJ4.channel2EqMidEnabled</key>
<status>0xB1</status>
<midino>0x27</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>FaderFoxDJ4.channel2EqLowEnabled</key>
<status>0xB1</status>
<midino>0x35</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>filter</key>
<status>0xB1</status>
<midino>0x14</midino>
</control>
<control>
<group>[Channel2]</group>
<key>filterHigh</key>
<status>0xB1</status>
<midino>0x0C</midino>
</control>
<control>
<group>[Channel2]</group>
<key>filterMid</key>
<status>0xB1</status>
<midino>0x0E</midino>
</control>
<control>
<group>[Channel2]</group>
<key>filterLow</key>
<status>0xB1</status>
<midino>0x10</midino>
</control>
<control>
<group>[Channel2]</group>
<key>FaderFoxDJ4.channel2Sync</key>
<status>0xB1</status>
<midino>0x30</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>FaderFoxDJ4.channel2Play</key>
<status>0xB1</status>
<midino>0x38</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>rate_temp_down</key>
<status>0xB1</status>
<midino>0x4E</midino>
</control>
<control>
<group>[Channel2]</group>
<key>rate_temp_up</key>
<status>0xB1</status>
<midino>0x50</midino>
</control>
<!-- TODO: Grey keys -->
<!-- Channel 3 -->
<control>
<group>[Channel3]</group>
<key>FaderFoxDJ4.channel3Filter</key>
<status>0xB2</status>
<midino>0x14</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel3]</group>
<key>FaderFoxDJ4.channel3EqHigh</key>
<status>0xB2</status>
<midino>0x0C</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel3]</group>
<key>FaderFoxDJ4.channel3EqMid</key>
<status>0xB2</status>
<midino>0xOE</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel3]</group>
<key>FaderFoxDJ4.channel3EqLow</key>
<status>0xB2</status>
<midino>0x10</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[QuickEffectRack1_[Channel3]_Effect1]</group>
<key>FaderFoxDJ4.channel3FilterEnabled</key>
<status>0xB2</status>
<midino>0x32</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel3]</group>
<key>FaderFoxDJ4.channel3Cue</key>
<status>0xB2</status>
<midino>0x26</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel3]</group>
<key>FaderFoxDJ4.channel3Mute</key>
<status>0xB2</status>
<midino>0x34</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel3]</group>
<key>FaderFoxDJ4.channel3EqHighEnabled</key>
<status>0xB2</status>
<midino>0x33</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel3]</group>
<key>FaderFoxDJ4.channel3EqMidEnabled</key>
<status>0xB2</status>
<midino>0x27</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel3]</group>
<key>FaderFoxDJ4.channel3EqLowEnabled</key>
<status>0xB2</status>
<midino>0x35</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel3]</group>
<key>filter</key>
<status>0xB2</status>
<midino>0x14</midino>
</control>
<control>
<group>[Channel3]</group>
<key>filterHigh</key>
<status>0xB2</status>
<midino>0x0C</midino>
</control>
<control>
<group>[Channel3]</group>
<key>filterMid</key>
<status>0xB2</status>
<midino>0x0E</midino>
</control>
<control>
<group>[Channel3]</group>
<key>filterLow</key>
<status>0xB2</status>
<midino>0x10</midino>
</control>
<control>
<group>[Channel3]</group>
<key>FaderFoxDJ4.channel3Sync</key>
<status>0xB2</status>
<midino>0x30</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel3]</group>
<key>FaderFoxDJ4.channel3Play</key>
<status>0xB2</status>
<midino>0x38</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel3]</group>
<key>rate_temp_down</key>
<status>0xB2</status>
<midino>0x4E</midino>
</control>
<control>
<group>[Channel3]</group>
<key>rate_temp_up</key>
<status>0xB2</status>
<midino>0x50</midino>
</control>
<!-- TODO: Grey keys -->
<!-- Channel 4 -->
<control>
<group>[Channel4]</group>
<key>FaderFoxDJ4.channel4Filter</key>
<status>0xB3</status>
<midino>0x14</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel4]</group>
<key>FaderFoxDJ4.channel4EqHigh</key>
<status>0xB3</status>
<midino>0x0C</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel4]</group>
<key>FaderFoxDJ4.channel4EqMid</key>
<status>0xB3</status>
<midino>0xOE</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[Channel4]</group>
<key>FaderFoxDJ4.channel4EqLow</key>
<status>0xB3</status>
<midino>0x10</midino>
<options>
<Script-Binding/>
<diff/>
</options>
</control>
<control>
<group>[QuickEffectRack1_[Channel4]_Effect1]</group>
<key>FaderFoxDJ4.channel4FilterEnabled</key>
<status>0xB3</status>
<midino>0x32</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel4]</group>
<key>FaderFoxDJ4.channel4Cue</key>
<status>0xB3</status>
<midino>0x26</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel4]</group>
<key>FaderFoxDJ4.channel4Mute</key>
<status>0xB3</status>
<midino>0x34</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel4]</group>
<key>FaderFoxDJ4.channel4EqHighEnabled</key>
<status>0xB3</status>
<midino>0x33</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel4]</group>
<key>FaderFoxDJ4.channel4EqMidEnabled</key>
<status>0xB3</status>
<midino>0x27</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel4]</group>
<key>FaderFoxDJ4.channel4EqLowEnabled</key>
<status>0xB3</status>
<midino>0x35</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel4]</group>
<key>filter</key>
<status>0xB3</status>
<midino>0x14</midino>
</control>
<control>
<group>[Channel4]</group>
<key>filterHigh</key>
<status>0xB3</status>
<midino>0x0C</midino>
</control>
<control>
<group>[Channel4]</group>
<key>filterMid</key>
<status>0xB3</status>
<midino>0x0E</midino>
</control>
<control>
<group>[Channel4]</group>
<key>filterLow</key>
<status>0xB3</status>
<midino>0x10</midino>
</control>
<control>
<group>[Channel4]</group>
<key>FaderFoxDJ4.channel4Sync</key>
<status>0xB3</status>
<midino>0x30</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel4]</group>
<key>FaderFoxDJ4.channel4Play</key>
<status>0xB3</status>
<midino>0x38</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel4]</group>
<key>rate_temp_down</key>
<status>0xB3</status>
<midino>0x4E</midino>
</control>
<control>
<group>[Channel4]</group>
<key>rate_temp_up</key>
<status>0xB3</status>
<midino>0x50</midino>
</control>
<!-- FX Assign -->
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1Fx1Assign</key>
<status>0xB0</status>
<midino>0x28</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1Fx2Assign</key>
<status>0xB0</status>
<midino>0x2A</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1Fx3Assign</key>
<status>0xB0</status>
<midino>0x29</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>FaderFoxDJ4.channel1Fx4Assign</key>
<status>0xB0</status>
<midino>0x2B</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>FaderFoxDJ4.channel2Fx1Assign</key>
<status>0xB1</status>
<midino>0x28</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>FaderFoxDJ4.channel2Fx2Assign</key>
<status>0xB1</status>
<midino>0x2A</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>FaderFoxDJ4.channel2Fx3Assign</key>
<status>0xB1</status>
<midino>0x29</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel2]</group>
<key>FaderFoxDJ4.channel2Fx4Assign</key>
<status>0xB1</status>
<midino>0x2B</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel3]</group>
<key>FaderFoxDJ4.channel3Fx1Assign</key>
<status>0xB2</status>
<midino>0x28</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel3]</group>
<key>FaderFoxDJ4.channel3Fx2Assign</key>
<status>0xB2</status>
<midino>0x2A</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel3]</group>
<key>FaderFoxDJ4.channel3Fx3Assign</key>
<status>0xB2</status>
<midino>0x29</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel3]</group>
<key>FaderFoxDJ4.channel3Fx4Assign</key>
<status>0xB2</status>
<midino>0x2B</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel4]</group>
<key>FaderFoxDJ4.channel4Fx1Assign</key>
<status>0xB3</status>
<midino>0x28</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel4]</group>
<key>FaderFoxDJ4.channel4Fx2Assign</key>
<status>0xB3</status>
<midino>0x2A</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel4]</group>
<key>FaderFoxDJ4.channel4Fx3Assign</key>
<status>0xB3</status>
<midino>0x29</midino>
<options>
<Script-Binding/>
</options>
</control>
<control>
<group>[Channel4]</group>
<key>FaderFoxDJ4.channel4Fx4Assign</key>
<status>0xB3</status>
<midino>0x2B</midino>
<options>
<Script-Binding/>
</options>
</control>
</controls>
</controller>
</MixxxControllerPreset>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment