diff --git a/res/controllers/Denon-MC7000-scripts.js b/res/controllers/Denon-MC7000-scripts.js index d8dfb510f83a..6d6ec3bbc70d 100644 --- a/res/controllers/Denon-MC7000-scripts.js +++ b/res/controllers/Denon-MC7000-scripts.js @@ -112,6 +112,9 @@ MC7000.factor = []; //Set Shift button state to false as default MC7000.shift = [false, false, false, false]; +// For each side whether the top or bottom deck is active. +MC7000.topDeckActive = [true, true]; + // initialize the PAD Mode to Hot Cue and all others off when starting MC7000.PADModeCue = [true, true, true, true]; MC7000.PADModeCueLoop = [false, false, false, false]; @@ -181,6 +184,10 @@ MC7000.init = function() { engine.makeUnbufferedConnection("[Channel3]", "VuMeter", MC7000.VuMeter); engine.makeUnbufferedConnection("[Channel4]", "VuMeter", MC7000.VuMeter); + // Switch to active decks + midi.sendShortMsg(MC7000.topDeckActive[0] ? 0x90 : 0x92, 0x08, 0x7F); + midi.sendShortMsg(MC7000.topDeckActive[1] ? 0x91 : 0x93, 0x08, 0x7F); + // Platter Ring LED mode midi.sendShortMsg(0x90, 0x64, MC7000.modeSingleLED); midi.sendShortMsg(0x91, 0x64, MC7000.modeSingleLED); @@ -889,31 +896,34 @@ MC7000.crossFaderCurve = function(control, value) { // Update state on deck changes MC7000.switchDeck = function(channel, control, value, status, group) { + const deckOffset = script.deckFromGroup(group) - 1; + const isTopDeck = deckOffset < 2; + const side = deckOffset % 2; + + let previousDeckOffset; + switch (deckOffset) { + case 0: + previousDeckOffset = 2; + break; + case 1: + previousDeckOffset = 3; + break; + case 2: + previousDeckOffset = 0; + break; + case 3: + previousDeckOffset = 1; + break; + } + // We need to 'transfer' the shift state when switching decks, // otherwise it will get stuck and result in an 'inverted' // shift after switching back to the deck. // Since the controller switches immediately upon pressing down, // we only do this when value is high. - if (value === 0x7F) { - const deckOffset = script.deckFromGroup(group) - 1; - - let previousDeckOffset; - switch (deckOffset) { - case 0: - previousDeckOffset = 2; - break; - case 1: - previousDeckOffset = 3; - break; - case 2: - previousDeckOffset = 0; - break; - case 3: - previousDeckOffset = 1; - break; - } - + if (value === 0x7F && MC7000.topDeckActive[side] !== isTopDeck) { + MC7000.topDeckActive[side] = isTopDeck; MC7000.shift[deckOffset] = MC7000.shift[previousDeckOffset]; MC7000.shift[previousDeckOffset] = false; }