summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUwe Klotz <uklotz@mixxx.org>2020-05-29 12:51:29 +0200
committerUwe Klotz <uklotz@mixxx.org>2020-05-29 16:28:45 +0200
commit8ec6f701544a679ef4785c55cedc400676253dae (patch)
tree9fd0d6cbd533623073ef0ea0fe7c752c9d7a0fc0
parent4b821a59671ab0af1e5732e912e5ca7ad6cc40ab (diff)
MC6000MK2: Fix shift handling and propagation
-rw-r--r--res/controllers/Denon-MC6000MK2-scripts.js703
-rw-r--r--res/controllers/Denon-MC6000MK2.midi.xml108
2 files changed, 404 insertions, 407 deletions
diff --git a/res/controllers/Denon-MC6000MK2-scripts.js b/res/controllers/Denon-MC6000MK2-scripts.js
index a2df841aa8..02de5bfa9c 100644
--- a/res/controllers/Denon-MC6000MK2-scripts.js
+++ b/res/controllers/Denon-MC6000MK2-scripts.js
@@ -84,6 +84,51 @@ DenonMC6000MK2.MIDI_CH1 = 0x01;
DenonMC6000MK2.MIDI_CH2 = 0x02;
DenonMC6000MK2.MIDI_CH3 = 0x03;
+////////////////////////////////////////////////////////////////////////
+// Globals //
+////////////////////////////////////////////////////////////////////////
+
+DenonMC6000MK2.sidesByGroup = {};
+
+DenonMC6000MK2.getSideByGroup = function(group) {
+ var side = DenonMC6000MK2.sidesByGroup[group];
+ if (side === undefined) {
+ DenonMC6000MK2.logError("No side found for " + group);
+ } else {
+ if (side instanceof DenonMC6000MK2.Side === false) {
+ DenonMC6000MK2.logError("Unexpected type: " + typeof side);
+ }
+ }
+ return side;
+};
+
+DenonMC6000MK2.oldSidesByGroup = {};
+
+DenonMC6000MK2.getOldSideByGroup = function(group) {
+ var side = DenonMC6000MK2.oldSidesByGroup[group];
+ if (undefined === side) {
+ DenonMC6000MK2.logError("No side found for " + group);
+ } else {
+ if (side instanceof DenonMC6000MK2.OldSide === false) {
+ DenonMC6000MK2.logError("Unexpected type: " + typeof side);
+ }
+ }
+ return side;
+};
+
+DenonMC6000MK2.oldDecksByGroup = {};
+
+DenonMC6000MK2.getOldDeckByGroup = function(group) {
+ var deck = DenonMC6000MK2.oldDecksByGroup[group];
+ if (deck === undefined) {
+ DenonMC6000MK2.logError("No deck found for " + group);
+ } else {
+ if (deck instanceof DenonMC6000MK2.OldDeck === false) {
+ DenonMC6000MK2.logError("Unexpected type: " + typeof deck);
+ }
+ }
+ return deck;
+};
////////////////////////////////////////////////////////////////////////
// Logging functions //
@@ -317,6 +362,146 @@ DenonMC6000MK2.disconnectControls = function() {
////////////////////////////////////////////////////////////////////////
+// Custom components //
+////////////////////////////////////////////////////////////////////////
+
+DenonMC6000MK2.LoadButton = function() {
+ components.Button.call(this, {
+ type: components.Button.toggle,
+ unshift: function() {
+ this.inKey = "LoadSelectedTrack";
+ },
+ shift: function() {
+ this.inKey = "eject";
+ },
+ input: function(_channel, _control, value, _status, _group) {
+ this.inSetParameter(this.inValueScale(value));
+ // Smart PFL control
+ if (this.inKey === "LoadSelectedTrack" && !engine.getValue(this.group, "play")) {
+ for (var deckIndex in DenonMC6000MK2.allDecks) {
+ var deck = DenonMC6000MK2.allDecks[deckIndex];
+ var deckGroup = deck.currentDeck;
+ engine.setValue(deckGroup, "pfl", this.group === deckGroup);
+ }
+ }
+ },
+ });
+};
+
+DenonMC6000MK2.LoadButton.prototype = Object.create(components.Button.prototype);
+DenonMC6000MK2.LoadButton.prototype.constructor = DenonMC6000MK2.LoadButton;
+
+
+DenonMC6000MK2.Deck = function(number, channel) {
+ DenonMC6000MK2.logDebug("Creating deck: " + number);
+
+ components.Deck.call(this, number);
+
+ this.loadButton = new DenonMC6000MK2.LoadButton();
+
+ this.cueButton = new components.CueButton([0xB0 + channel, 0x26]);
+ this.playButton = new components.PlayButton([0xB0 + channel, 0x27]);
+ this.syncButton = new components.SyncButton([0xB0 + channel, 0x09]);
+
+ this.hotcueButtons = [];
+ for (var i = 1; i <= 4; i++) {
+ this.hotcueButtons[i] = new components.HotcueButton({
+ midi: [0xB0 + channel, 0x11 + 2 * (i - 1)],
+ number: i,
+ });
+ }
+
+ // Set the group properties of the above Components and connect their output callback functions
+ var thisDeck = this;
+ this.reconnectComponents(function(component) {
+ if (component.group === undefined) {
+ component.group = thisDeck.currentDeck;
+ }
+ });
+};
+
+DenonMC6000MK2.Deck.prototype = Object.create(components.Deck.prototype);
+DenonMC6000MK2.Deck.prototype.constructor = DenonMC6000MK2.Deck;
+
+DenonMC6000MK2.Deck.prototype.loopInButtonInput = function(channel, control, value, status, group) {
+ var isButtonPressed = DenonMC6000MK2.isButtonPressed(value);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
+ deck.onLoopInButton(isButtonPressed);
+};
+
+DenonMC6000MK2.Deck.prototype.loopOutButtonInput = function(channel, control, value, status, group) {
+ var isButtonPressed = DenonMC6000MK2.isButtonPressed(value);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
+ deck.onLoopOutButton(isButtonPressed);
+};
+
+
+DenonMC6000MK2.Side = function(name, effectUnitNumbers, oldSide) {
+ DenonMC6000MK2.logDebug("Creating Side: " + name);
+
+ components.ComponentContainer.call(this);
+
+ this.name = name;
+
+ this.decksByGroup = {};
+ this.currentDeck = undefined;
+
+ this.effectUnit = new components.EffectUnit(effectUnitNumbers);
+ this.effectUnit.dryWetKnob.input = function(_channel, _control, value, _status, _group) {
+ var knobDelta = DenonMC6000MK2.getKnobDelta(value);
+ this.inSetParameter(this.inGetParameter() + knobDelta / DenonMC6000MK2.EFX_MIX_ENCODER_STEPS);
+ };
+ this.effectUnit.init();
+
+ // TODO: Eliminate oldSide
+ DenonMC6000MK2.sidesByGroup[oldSide.efxUnit.group] = this;
+ for (var samplerIndex in oldSide.samplers) {
+ var sampler = oldSide.samplers[samplerIndex];
+ DenonMC6000MK2.sidesByGroup[sampler.group] = this;
+ }
+};
+
+DenonMC6000MK2.Side.prototype = Object.create(components.ComponentContainer.prototype);
+DenonMC6000MK2.Side.prototype.constructor = DenonMC6000MK2.Side;
+
+DenonMC6000MK2.Side.prototype.getShiftState = function() {
+ if (DenonMC6000MK2.GLOBAL_SHIFT_STATE) {
+ return DenonMC6000MK2.getShiftState();
+ } else {
+ return this.isShifted;
+ }
+};
+
+DenonMC6000MK2.Side.prototype.connectDeck = function(deck) {
+ if (deck instanceof DenonMC6000MK2.Deck === false) {
+ DenonMC6000MK2.logError("Type mismatch: " + deck);
+ return;
+ }
+ var group = deck.currentDeck;
+ DenonMC6000MK2.logDebug("Connecting deck " + group + " to " + this.name + " side");
+ DenonMC6000MK2.sidesByGroup[group] = this;
+ this.decksByGroup[group] = deck;
+};
+
+DenonMC6000MK2.Side.prototype.shiftButtonInput = function(channel, control, value, status) {
+ var isButtonPressed = components.Button.prototype.isPress(channel, control, value, status);
+ if (isButtonPressed) {
+ this.shift();
+ } else {
+ this.unshift();
+ }
+ for (var deckGroup in this.decksByGroup) {
+ var deck = this.decksByGroup[deckGroup];
+ if (isButtonPressed) {
+ deck.shift();
+ } else {
+ deck.unshift();
+ }
+ }
+};
+
+
+////////////////////////////////////////////////////////////////////////
// Samplers //
////////////////////////////////////////////////////////////////////////
@@ -332,11 +517,10 @@ DenonMC6000MK2.getSamplerByGroup = function(group) {
return sampler;
};
-DenonMC6000MK2.Sampler = function(side, midiChannel, midiLedValue, midiDimmerLedValue) {
+DenonMC6000MK2.Sampler = function(midiChannel, midiLedValue, midiDimmerLedValue) {
this.number = ++DenonMC6000MK2.samplerCount;
this.group = "[Sampler" + this.number + "]";
DenonMC6000MK2.samplersByGroup[this.group] = this;
- DenonMC6000MK2.sidesByGroup[this.group] = side;
this.midiChannel = midiChannel;
this.midiLedValue = midiLedValue;
this.midiDimmerLedValue = midiDimmerLedValue;
@@ -423,18 +607,6 @@ DenonMC6000MK2.Sampler.prototype.connectControls = function() {
// Decks //
////////////////////////////////////////////////////////////////////////
-/* Management */
-
-DenonMC6000MK2.decksByGroup = {};
-
-DenonMC6000MK2.getDeckByGroup = function(group) {
- var deck = DenonMC6000MK2.decksByGroup[group];
- if (deck === undefined) {
- DenonMC6000MK2.logError("No deck found for " + group);
- }
- return deck;
-};
-
/* Constructor */
DenonMC6000MK2.OldDeck = function(number, midiChannel) {
@@ -443,7 +615,7 @@ DenonMC6000MK2.OldDeck = function(number, midiChannel) {
this.filterGroup = "[QuickEffectRack1_" + this.group + "_Effect1]";
this.midiChannel = midiChannel;
this.jogTouchState = false;
- DenonMC6000MK2.decksByGroup[this.group] = this;
+ DenonMC6000MK2.oldDecksByGroup[this.group] = this;
this.rateDirBackup = this.getValue("rate_dir");
this.setValue("rate_dir", -1);
this.vinylMode = undefined;
@@ -453,7 +625,10 @@ DenonMC6000MK2.OldDeck = function(number, midiChannel) {
/* Shift */
DenonMC6000MK2.OldDeck.prototype.getShiftState = function() {
+ DenonMC6000MK2.logInfo("### DenonMC6000MK2.OldDeck.prototype.getShiftState " + this.group);
var side = DenonMC6000MK2.getSideByGroup(this.group);
+ DenonMC6000MK2.logInfo("### side " + typeof side);
+ DenonMC6000MK2.logInfo("### side " + typeof side.getShiftState);
return side.getShiftState();
};
@@ -545,8 +720,8 @@ DenonMC6000MK2.OldDeck.prototype.disableSyncMode = function() {
/* Cue Mix */
DenonMC6000MK2.OldDeck.prototype.setCueMixSolo = function() {
- for (var deckGroup in DenonMC6000MK2.decksByGroup) {
- var deck = DenonMC6000MK2.getDeckByGroup(deckGroup);
+ for (var index in DenonMC6000MK2.oldDecksByGroup) {
+ var deck = DenonMC6000MK2.oldDecksByGroup[index];
deck.setValue("pfl", this === deck);
}
};
@@ -738,7 +913,7 @@ DenonMC6000MK2.OldDeck.prototype.spinJog = function(jogDelta) {
/* Filter */
DenonMC6000MK2.OldDeck.prototype.applyFilter = function() {
- var side = DenonMC6000MK2.getSideByGroup(this.group);
+ var side = DenonMC6000MK2.getOldSideByGroup(this.group);
engine.setValue(this.filterGroup, "enabled", side.filterEnabled);
engine.setParameter(this.filterGroup, "meta", side.filterParam);
};
@@ -897,8 +1072,8 @@ DenonMC6000MK2.OldDeck.prototype.connectControls = function() {
this.connectControl("loop_enabled", DenonMC6000MK2.ctrlLoopEnabled);
this.connectControl("loop_start_position", DenonMC6000MK2.ctrlLoopStartPosition);
this.connectControl("loop_end_position", DenonMC6000MK2.ctrlLoopEndPosition);
- DenonMC6000MK2.leftSide.efxUnit.connectDeckControls(this, DenonMC6000MK2.leftSide.efxUnit.ctrlDeck);
- DenonMC6000MK2.rightSide.efxUnit.connectDeckControls(this, DenonMC6000MK2.rightSide.efxUnit.ctrlDeck);
+ DenonMC6000MK2.oldLeftSide.efxUnit.connectDeckControls(this, DenonMC6000MK2.oldLeftSide.efxUnit.ctrlDeck);
+ DenonMC6000MK2.oldRightSide.efxUnit.connectDeckControls(this, DenonMC6000MK2.oldRightSide.efxUnit.ctrlDeck);
// default settings
this.enableKeyLock();
this.enableVinylMode();
@@ -935,14 +1110,13 @@ DenonMC6000MK2.EfxParam = function(group) {
// Efx Units //
////////////////////////////////////////////////////////////////////////
-DenonMC6000MK2.EfxUnit = function(side, unit) {
- this.unit = DenonMC6000MK2.EFX_RACK + "_" + unit;
- this.group = "[" + this.unit + "]";
- DenonMC6000MK2.sidesByGroup[this.group] = side;
+DenonMC6000MK2.EfxUnit = function(unit) {
+ var groupName = DenonMC6000MK2.EFX_RACK + "_" + unit;
+ this.group = "[" + groupName + "]";
this.params = [];
- this.params[1] = new DenonMC6000MK2.EfxParam("[" + this.unit + "_Effect1]");
- this.params[2] = new DenonMC6000MK2.EfxParam("[" + this.unit + "_Effect2]");
- this.params[3] = new DenonMC6000MK2.EfxParam("[" + this.unit + "_Effect3]");
+ for (var i = 1; i <= 3; ++i) {
+ this.params[i] = new DenonMC6000MK2.EfxParam("[" + groupName + "_Effect" + i + "]");
+ }
};
DenonMC6000MK2.EfxUnit.prototype.getShiftState = function() {
@@ -973,13 +1147,13 @@ DenonMC6000MK2.EfxUnit.prototype.isDeckAssigned = function(deck) {
};
DenonMC6000MK2.EfxUnit.prototype.isActiveDeckAssigned = function() {
- var side = DenonMC6000MK2.getSideByGroup(this.group);
+ var side = DenonMC6000MK2.getOldSideByGroup(this.group);
return engine.getValue(this.group, this.getDeckAssignKey(side.activeDeck));
};
DenonMC6000MK2.EfxUnit.prototype.isAnyDeckAssigned = function() {
- for (var deckGroup in DenonMC6000MK2.decksByGroup) {
- var deck = DenonMC6000MK2.getDeckByGroup(deckGroup);
+ for (var deckGroup in DenonMC6000MK2.oldDecksByGroup) {
+ var deck = DenonMC6000MK2.oldDecksByGroup[deckGroup];
if (this.isDeckAssigned(deck)) {
return true;
}
@@ -992,8 +1166,8 @@ DenonMC6000MK2.EfxUnit.prototype.assignDeckToggle = function(deck) {
};
DenonMC6000MK2.EfxUnit.prototype.assignDeckExlusively = function(deck) {
- for (var deckGroup in DenonMC6000MK2.decksByGroup) {
- var varDeck = DenonMC6000MK2.getDeckByGroup(deckGroup);
+ for (var deckGroup in DenonMC6000MK2.oldDecksByGroup) {
+ var varDeck = DenonMC6000MK2.oldDecksByGroup[deckGroup];
engine.setValue(this.group, this.getDeckAssignKey(varDeck), varDeck === deck);
}
};
@@ -1004,7 +1178,7 @@ DenonMC6000MK2.EfxUnit.prototype.onEnabled = function() {
DenonMC6000MK2.EfxUnit.prototype.onDeckButton = function(deckGroup, isButtonPressed) {
if (isButtonPressed) {
- var deck = DenonMC6000MK2.getDeckByGroup(deckGroup);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(deckGroup);
if (this.getShiftState()) {
this.assignDeckExlusively(deck);
} else {
@@ -1017,68 +1191,43 @@ DenonMC6000MK2.EfxUnit.prototype.onDeckButton = function(deckGroup, isButtonPres
// Sides //
////////////////////////////////////////////////////////////////////////
-/* Management */
-
-DenonMC6000MK2.sidesByGroup = {};
-
-DenonMC6000MK2.getSideByGroup = function(group) {
- var side = DenonMC6000MK2.sidesByGroup[group];
- if (undefined === side) {
- DenonMC6000MK2.logError("No side found for " + group);
- }
- return side;
-};
-
/* Constructor */
-DenonMC6000MK2.Side = function(decks, efxUnit, samplerMidiChannel) {
+DenonMC6000MK2.OldSide = function(decks, efxUnit, samplerMidiChannel) {
this.decksByGroup = {};
for (var deckIndex in decks) {
var deck = decks[deckIndex];
+ DenonMC6000MK2.logInfo("Adding deck " + deck.group + " to side");
+ DenonMC6000MK2.oldSidesByGroup[deck.group] = this;
this.decksByGroup[deck.group] = deck;
- DenonMC6000MK2.sidesByGroup[deck.group] = this;
}
this.activeDeck = decks[0];
- this.shiftState = false;
- this.efxUnit = new DenonMC6000MK2.EfxUnit(this, efxUnit);
+ this.efxUnit = new DenonMC6000MK2.EfxUnit(efxUnit);
+ DenonMC6000MK2.oldSidesByGroup[this.efxUnit.group] = this;
this.samplers = [];
- this.samplers[1] = new DenonMC6000MK2.Sampler(this, samplerMidiChannel, 0x19, 0x1A);
- this.samplers[2] = new DenonMC6000MK2.Sampler(this, samplerMidiChannel, 0x1B, 0x1C);
- this.samplers[3] = new DenonMC6000MK2.Sampler(this, samplerMidiChannel, 0x1D, 0x1F);
- this.samplers[4] = new DenonMC6000MK2.Sampler(this, samplerMidiChannel, 0x20, 0x21);
- this.filterLed = undefined;
-};
-
-/* Shift */
-
-DenonMC6000MK2.Side.prototype.getShiftState = function() {
- if (DenonMC6000MK2.GLOBAL_SHIFT_STATE) {
- return DenonMC6000MK2.getShiftState();
- } else {
- return this.shiftState;
+ this.samplers[1] = new DenonMC6000MK2.Sampler(samplerMidiChannel, 0x19, 0x1A);
+ this.samplers[2] = new DenonMC6000MK2.Sampler(samplerMidiChannel, 0x1B, 0x1C);
+ this.samplers[3] = new DenonMC6000MK2.Sampler(samplerMidiChannel, 0x1D, 0x1F);
+ this.samplers[4] = new DenonMC6000MK2.Sampler(samplerMidiChannel, 0x20, 0x21);
+ for (var samplerIndex in this.samplers) {
+ var sampler = this.samplers[samplerIndex];
+ DenonMC6000MK2.oldSidesByGroup[sampler.group] = this;
}
+ this.filterLed = undefined;
};
/* Decks */
-DenonMC6000MK2.Side.prototype.getDeckByGroup = function(group) {
- var deck = this.decksByGroup[group];
- if (undefined === deck) {
- DenonMC6000MK2.logError("No deck found for " + group);
- }
- return deck;
-};
-
-DenonMC6000MK2.Side.prototype.onDeckButton = function(deckGroup, isButtonPressed) {
+DenonMC6000MK2.OldSide.prototype.onDeckButton = function(deckGroup, isButtonPressed) {
if (isButtonPressed) {
- this.activeDeck = this.getDeckByGroup(deckGroup);
+ this.activeDeck = this.decksByGroup[deckGroup];
}
};
/* Startup */
-DenonMC6000MK2.Side.prototype.connectLeds = function() {
+DenonMC6000MK2.OldSide.prototype.connectLeds = function() {
for (var deckGroup in this.decksByGroup) {
var deck = this.decksByGroup[deckGroup];
deck.connectLeds();
@@ -1088,7 +1237,7 @@ DenonMC6000MK2.Side.prototype.connectLeds = function() {
}
};
-DenonMC6000MK2.Side.prototype.connectControls = function() {
+DenonMC6000MK2.OldSide.prototype.connectControls = function() {
for (var deckGroup in this.decksByGroup) {
var deck = this.decksByGroup[deckGroup];
deck.connectControls();
@@ -1100,48 +1249,40 @@ DenonMC6000MK2.Side.prototype.connectControls = function() {
/* Shutdown */
-DenonMC6000MK2.Side.prototype.restoreValues = function() {
+DenonMC6000MK2.OldSide.prototype.restoreValues = function() {
for (var group in this.decksByGroup) {
var deck = this.decksByGroup[group];
deck.restoreValues();
}
};
-// Shift
-DenonMC6000MK2.Side.prototype.onShiftButton = function(isButtonPressed) {
- // local shift state
- this.shiftState = isButtonPressed;
- // global shift state
- DenonMC6000MK2.shiftState = isButtonPressed;
-};
-
// Filter
-DenonMC6000MK2.Side.prototype.applyFilter = function() {
+DenonMC6000MK2.OldSide.prototype.applyFilter = function() {
for (var group in this.decksByGroup) {
var deck = this.decksByGroup[group];
deck.applyFilter();
}
};
-DenonMC6000MK2.Side.prototype.initFilter = function() {
+DenonMC6000MK2.OldSide.prototype.initFilter = function() {
this.filterEnabled = true;
this.filterParam = 0.5; // centered
this.applyFilter();
};
-DenonMC6000MK2.Side.prototype.toggleFilter = function() {
+DenonMC6000MK2.OldSide.prototype.toggleFilter = function() {
this.filterEnabled = !this.filterEnabled;
this.applyFilter();
};
-DenonMC6000MK2.Side.prototype.onFilterButton = function(isButtonPressed) {
+DenonMC6000MK2.OldSide.prototype.onFilterButton = function(isButtonPressed) {
if (isButtonPressed) {
this.toggleFilter();
}
};
-DenonMC6000MK2.Side.prototype.onFilterMidiValue = function(value) {
+DenonMC6000MK2.OldSide.prototype.onFilterMidiValue = function(value) {
this.filterParam = script.absoluteLin(value, 0.0, 1.0);
this.applyFilter();
};
@@ -1156,22 +1297,26 @@ DenonMC6000MK2.debug = undefined;
DenonMC6000MK2.group = "[Master]";
// left side
-DenonMC6000MK2.deck1 = new DenonMC6000MK2.OldDeck(1, DenonMC6000MK2.MIDI_CH0);
-DenonMC6000MK2.deck3 = new DenonMC6000MK2.OldDeck(3, DenonMC6000MK2.MIDI_CH1);
-DenonMC6000MK2.leftDecks = [DenonMC6000MK2.deck1, DenonMC6000MK2.deck3];
-DenonMC6000MK2.leftSide = new DenonMC6000MK2.Side(DenonMC6000MK2.leftDecks, DenonMC6000MK2.LEFT_EFX_UNIT, DenonMC6000MK2.MIDI_CH0);
+DenonMC6000MK2.oldDeck1 = new DenonMC6000MK2.OldDeck(1, DenonMC6000MK2.MIDI_CH0);
+DenonMC6000MK2.oldDeck3 = new DenonMC6000MK2.OldDeck(3, DenonMC6000MK2.MIDI_CH1);
+DenonMC6000MK2.oldLeftSide = new DenonMC6000MK2.OldSide(
+ [DenonMC6000MK2.oldDeck1, DenonMC6000MK2.oldDeck3],
+ DenonMC6000MK2.LEFT_EFX_UNIT,
+ DenonMC6000MK2.MIDI_CH0);
// right side
-DenonMC6000MK2.deck2 = new DenonMC6000MK2.OldDeck(2, DenonMC6000MK2.MIDI_CH2);
-DenonMC6000MK2.deck4 = new DenonMC6000MK2.OldDeck(4, DenonMC6000MK2.MIDI_CH3);
-DenonMC6000MK2.rightDecks = [DenonMC6000MK2.deck2, DenonMC6000MK2.deck4];
-DenonMC6000MK2.rightSide = new DenonMC6000MK2.Side(DenonMC6000MK2.rightDecks, DenonMC6000MK2.RIGHT_EFX_UNIT, DenonMC6000MK2.MIDI_CH2);
+DenonMC6000MK2.oldDeck2 = new DenonMC6000MK2.OldDeck(2, DenonMC6000MK2.MIDI_CH2);
+DenonMC6000MK2.oldDeck4 = new DenonMC6000MK2.OldDeck(4, DenonMC6000MK2.MIDI_CH3);
+DenonMC6000MK2.oldRightSide = new DenonMC6000MK2.OldSide(
+ [DenonMC6000MK2.oldDeck2, DenonMC6000MK2.oldDeck4],
+ DenonMC6000MK2.RIGHT_EFX_UNIT,
+ DenonMC6000MK2.MIDI_CH2);
-DenonMC6000MK2.sides = [DenonMC6000MK2.leftSide, DenonMC6000MK2.rightSide];
+DenonMC6000MK2.oldSides = [DenonMC6000MK2.oldLeftSide, DenonMC6000MK2.oldRightSide];
DenonMC6000MK2.getShiftState = function() {
- return DenonMC6000MK2.leftSide.shiftState ||
- DenonMC6000MK2.rightSide.shiftState;
+ // Direct access to prevent recursion
+ return DenonMC6000MK2.leftSide.isShifted || DenonMC6000MK2.rightSide.isShifted;
};
DenonMC6000MK2.getValue = function(key) {
@@ -1200,54 +1345,54 @@ DenonMC6000MK2.initValues = function() {
};
DenonMC6000MK2.connectLeds = function() {
- DenonMC6000MK2.deck1.cueMixLed = DenonMC6000MK2.connectLed(0x00, 0x45);
- DenonMC6000MK2.deck1.cueMixDimmerLed = DenonMC6000MK2.connectLed(0x00, 0x46);
- DenonMC6000MK2.deck1.leftEfxLed = DenonMC6000MK2.connectTriLed(0x00, 0x56);
- DenonMC6000MK2.deck1.rightEfxLed = DenonMC6000MK2.connectTriLed(0x00, 0x5A);
- DenonMC6000MK2.deck2.cueMixLed = DenonMC6000MK2.connectLed(0x00, 0x4B);
- DenonMC6000MK2.deck2.cueMixDimmerLed = DenonMC6000MK2.connectLed(0x00, 0x4C);
- DenonMC6000MK2.deck2.leftEfxLed = DenonMC6000MK2.connectTriLed(0x00, 0x57);
- DenonMC6000MK2.deck2.rightEfxLed = DenonMC6000MK2.connectTriLed(0x00, 0x5B);
- DenonMC6000MK2.deck3.cueMixLed = DenonMC6000MK2.connectLed(0x00, 0x51);
- DenonMC6000MK2.deck3.cueMixDimmerLed = DenonMC6000MK2.connectLed(0x00, 0x52);
- DenonMC6000MK2.deck3.leftEfxLed = DenonMC6000MK2.connectTriLed(0x00, 0x54);
- DenonMC6000MK2.deck3.rightEfxLed = DenonMC6000MK2.connectTriLed(0x00, 0x58);
- DenonMC6000MK2.deck4.cueMixLed = DenonMC6000MK2.connectLed(0x00, 0x57);
- DenonMC6000MK2.deck4.cueMixDimmerLed = DenonMC6000MK2.connectLed(0x00, 0x58);
- DenonMC6000MK2.deck4.leftEfxLed = DenonMC6000MK2.connectTriLed(0x00, 0x55);
- DenonMC6000MK2.deck4.rightEfxLed = DenonMC6000MK2.connectTriLed(0x00, 0x59);
- DenonMC6000MK2.leftSide.efxUnit.params[1].onLed = DenonMC6000MK2.connectTriLed(0x00, 0x5C);
- DenonMC6000MK2.leftSide.efxUnit.params[2].onLed = DenonMC6000MK2.connectTriLed(0x00, 0x5D);
- DenonMC6000MK2.leftSide.efxUnit.params[3].onLed = DenonMC6000MK2.connectTriLed(0x00, 0x5E);
- DenonMC6000MK2.leftSide.efxUnit.tapLed = DenonMC6000MK2.connectTriLed(0x00, 0x5F);
- DenonMC6000MK2.leftSide.filterLed = DenonMC6000MK2.connectLed(0x00, 0x65);
- DenonMC6000MK2.rightSide.efxUnit.params[1].onLed = DenonMC6000MK2.connectTriLed(0x00, 0x60);
- DenonMC6000MK2.rightSide.efxUnit.params[2].onLed = DenonMC6000MK2.connectTriLed(0x00, 0x61);
- DenonMC6000MK2.rightSide.efxUnit.params[3].onLed = DenonMC6000MK2.connectTriLed(0x00, 0x62);
- DenonMC6000MK2.rightSide.efxUnit.tapLed = DenonMC6000MK2.connectTriLed(0x00, 0x63);
- DenonMC6000MK2.rightSide.filterLed = DenonMC6000MK2.connectLed(0x00, 0x66);
- for (var index in DenonMC6000MK2.sides) {
- var side = DenonMC6000MK2.sides[index];
- side.connectLeds();
+ DenonMC6000MK2.oldDeck1.cueMixLed = DenonMC6000MK2.connectLed(0x00, 0x45);
+ DenonMC6000MK2.oldDeck1.cueMixDimmerLed = DenonMC6000MK2.connectLed(0x00, 0x46);
+ DenonMC6000MK2.oldDeck1.leftEfxLed = DenonMC6000MK2.connectTriLed(0x00, 0x56);
+ DenonMC6000MK2.oldDeck1.rightEfxLed = DenonMC6000MK2.connectTriLed(0x00, 0x5A);
+ DenonMC6000MK2.oldDeck2.cueMixLed = DenonMC6000MK2.connectLed(0x00, 0x4B);
+ DenonMC6000MK2.oldDeck2.cueMixDimmerLed = DenonMC6000MK2.connectLed(0x00, 0x4C);
+ DenonMC6000MK2.oldDeck2.leftEfxLed = DenonMC6000MK2.connectTriLed(0x00, 0x57);
+ DenonMC6000MK2.oldDeck2.rightEfxLed = DenonMC6000MK2.connectTriLed(0x00, 0x5B);
+ DenonMC6000MK2.oldDeck3.cueMixLed = DenonMC6000MK2.connectLed(0x00, 0x51);
+ DenonMC6000MK2.oldDeck3.cueMixDimmerLed = DenonMC6000MK2.connectLed(0x00, 0x52);
+ DenonMC6000MK2.oldDeck3.leftEfxLed = DenonMC6000MK2.connectTriLed(0x00, 0x54);
+ DenonMC6000MK2.oldDeck3.rightEfxLed = DenonMC6000MK2.connectTriLed(0x00, 0x58);
+ DenonMC6000MK2.oldDeck4.cueMixLed = DenonMC6000MK2.connectLed(0x00, 0x57);
+ DenonMC6000MK2.oldDeck4.cueMixDimmerLed = DenonMC6000MK2.connectLed(0x00, 0x58);
+ DenonMC6000MK2.oldDeck4.leftEfxLed = DenonMC6000MK2.connectTriLed(0x00, 0x55);
+ DenonMC6000MK2.oldDeck4.rightEfxLed = DenonMC6000MK2.connectTriLed(0x00, 0x59);
+ DenonMC6000MK2.oldLeftSide.efxUnit.params[1].onLed = DenonMC6000MK2.connectTriLed(0x00, 0x5C);
+ DenonMC6000MK2.oldLeftSide.efxUnit.params[2].onLed = DenonMC6000MK2.connectTriLed(0x00, 0x5D);
+ DenonMC6000MK2.oldLeftSide.efxUnit.params[3].onLed = DenonMC6000MK2.connectTriLed(0x00, 0x5E);
+ DenonMC6000MK2.oldLeftSide.efxUnit.tapLed = DenonMC6000MK2.connectTriLed(0x00, 0x5F);
+ DenonMC6000MK2.oldLeftSide.filterLed = DenonMC6000MK2.connectLed(0x00, 0x65);
+ DenonMC6000MK2.oldRightSide.efxUnit.params[1].onLed = DenonMC6000MK2.connectTriLed(0x00, 0x60);
+ DenonMC6000MK2.oldRightSide.efxUnit.params[2].onLed = DenonMC6000MK2.connectTriLed(0x00, 0x61);
+ DenonMC6000MK2.oldRightSide.efxUnit.params[3].onLed = DenonMC6000MK2.connectTriLed(0x00, 0x62);
+ DenonMC6000MK2.oldRightSide.efxUnit.tapLed = DenonMC6000MK2.connectTriLed(0x00, 0x63);
+ DenonMC6000MK2.oldRightSide.filterLed = DenonMC6000MK2.connectLed(0x00, 0x66);
+ for (var index in DenonMC6000MK2.oldSides) {
+ var oldSide = DenonMC6000MK2.oldSides[index];
+ oldSide.connectLeds();
}
};
DenonMC6000MK2.connectControls = function() {
- for (var index in DenonMC6000MK2.sides) {
- var side = DenonMC6000MK2.sides[index];
- side.connectControls();
- DenonMC6000MK2.connectControl(side.efxUnit.group, "enabled", side.efxUnit.ctrlEnabled);
- for (var deckGroup in side.decksByGroup) {
- var deck = this.decksByGroup[deckGroup];
- DenonMC6000MK2.connectControl(deck.filterGroup, "enabled", side.ctrlFilterEnabled);
+ for (var index in DenonMC6000MK2.oldSides) {
+ var oldSide = DenonMC6000MK2.oldSides[index];
+ oldSide.connectControls();
+ DenonMC6000MK2.connectControl(oldSide.efxUnit.group, "enabled", oldSide.efxUnit.ctrlEnabled);
+ for (var deckGroup in oldSide.decksByGroup) {
+ var deck = oldSide.decksByGroup[deckGroup];
+ DenonMC6000MK2.connectControl(deck.filterGroup, "enabled", oldSide.ctrlFilterEnabled);
}
}
};
DenonMC6000MK2.restoreValues = function() {
- for (var index in DenonMC6000MK2.sides) {
- var side = DenonMC6000MK2.sides[index];
- side.restoreValues();
+ for (var index in DenonMC6000MK2.oldSides) {
+ var oldSide = DenonMC6000MK2.oldSides[index];
+ oldSide.restoreValues();
}
DenonMC6000MK2.setValue("num_samplers", DenonMC6000MK2.backupNumSamplers);
DenonMC6000MK2.setValue("num_decks", DenonMC6000MK2.backupNumDecks);
@@ -1306,7 +1451,7 @@ DenonMC6000MK2.recvXfaderAssignLeftButton = function(_channel, _control, value,
if (!isButtonPressed) {
return;
}
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
deck.assignXfaderLeft();
};
@@ -1315,7 +1460,7 @@ DenonMC6000MK2.recvXfaderAssignThruButton = function(_channel, _control, value,
if (!isButtonPressed) {
return;
}
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
deck.assignXfaderCenter();
};
@@ -1324,7 +1469,7 @@ DenonMC6000MK2.recvXfaderAssignRightButton = function(_channel, _control, value,
if (!isButtonPressed) {
return;
}
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
deck.assignXfaderRight();
};
@@ -1350,79 +1495,79 @@ DenonMC6000MK2.recvAreaButton = function(_channel, _control, value, _status, _gr
DenonMC6000MK2.recvVinylButton = function(_channel, _control, value, _status, group) {
var isButtonPressed = DenonMC6000MK2.isButtonPressed(value);
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
deck.onVinylButton(isButtonPressed);
};
DenonMC6000MK2.recvKeyLockButton = function(_channel, _control, value, _status, group) {
var isButtonPressed = DenonMC6000MK2.isButtonPressed(value);
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
deck.onKeyLockButton(isButtonPressed);
};
DenonMC6000MK2.recvCueMixButton = function(_channel, _control, value, _status, group) {
var isButtonPressed = DenonMC6000MK2.isButtonPressed(value);
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
deck.onCueMixButton(isButtonPressed);
};
DenonMC6000MK2.recvBendPlusButton = function(_channel, _control, value, _status, group) {
var isButtonPressed = DenonMC6000MK2.isButtonPressed(value);
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
deck.onBendPlusButton(isButtonPressed);
};
DenonMC6000MK2.recvBendMinusButton = function(_channel, _control, value, _status, group) {
var isButtonPressed = DenonMC6000MK2.isButtonPressed(value);
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
deck.onBendMinusButton(isButtonPressed);
};
DenonMC6000MK2.recvJogTouch = function(_channel, _control, value, _status, group) {
var isJogTouched = DenonMC6000MK2.isButtonPressed(value);
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
deck.touchJog(isJogTouched);
};
DenonMC6000MK2.recvJogTouchVinyl = function(_channel, _control, value, _status, group) {
var isJogTouched = DenonMC6000MK2.isButtonPressed(value);
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
deck.touchJog(isJogTouched);
};
DenonMC6000MK2.recvJogSpin = function(_channel, _control, value, _status, group) {
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
var jogDelta = DenonMC6000MK2.getJogDeltaValue(value);
deck.spinJog(jogDelta);
};
DenonMC6000MK2.recvJogSpinVinyl = function(_channel, _control, value, _status, group) {
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
var jogDelta = DenonMC6000MK2.getJogDeltaValue(value);
deck.spinJog(jogDelta);
};
DenonMC6000MK2.recvAutoLoopButton = function(_channel, _control, value, _status, group) {
var isButtonPressed = DenonMC6000MK2.isButtonPressed(value);
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
deck.onAutoLoopButton(isButtonPressed);
};
DenonMC6000MK2.recvLoopCutMinusButton = function(_channel, _control, value, _status, group) {
var isButtonPressed = DenonMC6000MK2.isButtonPressed(value);
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
deck.onLoopCutMinusButton(isButtonPressed);
};
DenonMC6000MK2.recvLoopCutPlusButton = function(_channel, _control, value, _status, group) {
var isButtonPressed = DenonMC6000MK2.isButtonPressed(value);
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
deck.onLoopCutPlusButton(isButtonPressed);
};
DenonMC6000MK2.recvCensorButton = function(_channel, _control, value, _status, group) {
var isButtonPressed = DenonMC6000MK2.isButtonPressed(value);
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
deck.onCensorButton(isButtonPressed);
};
@@ -1432,52 +1577,52 @@ DenonMC6000MK2.recvSamplerButton = function(_channel, _control, value, _status,
sampler.onButton(isButtonPressed);
};
-DenonMC6000MK2.leftSide.recvFilterButton = function(_channel, _control, value, _status, _group) {
+DenonMC6000MK2.oldLeftSide.recvFilterButton = function(_channel, _control, value, _status, _group) {
var isButtonPressed = DenonMC6000MK2.isButtonPressed(value);
- DenonMC6000MK2.leftSide.onFilterButton(isButtonPressed);
+ DenonMC6000MK2.oldLeftSide.onFilterButton(isButtonPressed);
};
-DenonMC6000MK2.rightSide.recvFilterButton = function(_channel, _control, value, _status, _group) {
+DenonMC6000MK2.oldRightSide.recvFilterButton = function(_channel, _control, value, _status, _group) {
var isButtonPressed = DenonMC6000MK2.isButtonPressed(value);
- DenonMC6000MK2.rightSide.onFilterButton(isButtonPressed);
+ DenonMC6000MK2.oldRightSide.onFilterButton(isButtonPressed);
};
-DenonMC6000MK2.leftSide.recvFilterKnob = function(_channel, _control, value, _status, _group) {
- DenonMC6000MK2.leftSide.onFilterMidiValue(value);
+DenonMC6000MK2.oldLeftSide.recvFilterKnob = function(_channel, _control, value, _status, _group) {
+ DenonMC6000MK2.oldLeftSide.onFilterMidiValue(value);
};
-DenonMC6000MK2.rightSide.recvFilterKnob = function(_channel, _control, value, _status, _group) {
- DenonMC6000MK2.rightSide.onFilterMidiValue(value);
+DenonMC6000MK2.oldRightSide.recvFilterKnob = function(_channel, _control, value, _status, _group) {
+ DenonMC6000MK2.oldRightSide.onFilterMidiValue(value);
};
-DenonMC6000MK2.leftSide.efxUnit.recvDeckButton = function(_channel, _control, value, _status, group) {
+DenonMC6000MK2.oldLeftSide.efxUnit.recvDeckButton = function(_channel, _control, value, _status, group) {
var isButtonPressed = DenonMC6000MK2.isButtonPressed(value);
- DenonMC6000MK2.leftSide.efxUnit.onDeckButton(group, isButtonPressed);
+ DenonMC6000MK2.oldLeftSide.efxUnit.onDeckButton(group, isButtonPressed);
};
-DenonMC6000MK2.rightSide.efxUnit.recvDeckButton = function(_channel, _control, value, _status, group) {
+DenonMC6000MK2.oldRightSide.efxUnit.recvDeckButton = function(_channel, _control, value, _status, group) {
var isButtonPressed = DenonMC6000MK2.isButtonPressed(value);
- DenonMC6000MK2.rightSide.efxUnit.onDeckButton(group, isButtonPressed);
+ DenonMC6000MK2.oldRightSide.efxUnit.onDeckButton(group, isButtonPressed);
};
-DenonMC6000MK2.leftSide.efxUnit.recvTapButton = function(_channel, _control, value, _status, _group) {
+DenonMC6000MK2.oldLeftSide.efxUnit.recvTapButton = function(_channel, _control, value, _status, _group) {
var isButtonPressed = DenonMC6000MK2.isButtonPressed(value);
- DenonMC6000MK2.leftSide.efxUnit.onEnableButton(isButtonPressed);
+ DenonMC6000MK2.oldLeftSide.efxUnit.onEnableButton(isButtonPressed);
};
-DenonMC6000MK2.rightSide.efxUnit.recvTapButton = function(_channel, _control, value, _status, _group) {
+DenonMC6000MK2.oldRightSide.efxUnit.recvTapButton = function(_channel, _control, value, _status, _group) {
var isButtonPressed = DenonMC6000MK2.isButtonPressed(value);
- DenonMC6000MK2.rightSide.efxUnit.onEnableButton(isButtonPressed);
+ DenonMC6000MK2.oldRightSide.efxUnit.onEnableButton(isButtonPressed);
};
-DenonMC6000MK2.leftSide.recvDeckButton = function(_channel, _control, value, _status, group) {
+DenonMC6000MK2.oldLeftSide.recvDeckButton = function(_channel, _control, value, _status, group) {
var isButtonPressed = DenonMC6000MK2.isButtonPressed(value);
- DenonMC6000MK2.leftSide.onDeckButton(group, isButtonPressed);
+ DenonMC6000MK2.oldLeftSide.onDeckButton(group, isButtonPressed);
};
-DenonMC6000MK2.rightSide.recvDeckButton = function(_channel, _control, value, _status, group) {
+DenonMC6000MK2.oldRightSide.recvDeckButton = function(_channel, _control, value, _status, group) {
var isButtonPressed = DenonMC6000MK2.isButtonPressed(value);
- DenonMC6000MK2.rightSide.onDeckButton(group, isButtonPressed);
+ DenonMC6000MK2.oldRightSide.onDeckButton(group, isButtonPressed);
};
@@ -1488,39 +1633,39 @@ DenonMC6000MK2.rightSide.recvDeckButton = function(_channel, _control, value, _s
// Deck controls
DenonMC6000MK2.ctrlKeyLock = function(value, group, _control) {
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
deck.onKeyLockValue(value);
};
DenonMC6000MK2.ctrlSlipModeValue = function(value, group, _control) {
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
deck.onSlipModeValue(value);
};
DenonMC6000MK2.ctrlCueMix = function(value, group, _control) {
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
deck.onCueMixValue(value);
};
DenonMC6000MK2.ctrlTrackSamples = function(value, group, _control) {
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
deck.onTrackSamplesValue(value);
};
// Loop controls
DenonMC6000MK2.ctrlLoopStartPosition = function(value, group, _control) {
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
deck.updateLoopLeds();
};
DenonMC6000MK2.ctrlLoopEndPosition = function(value, group, _control) {
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
deck.updateLoopLeds();
};
DenonMC6000MK2.ctrlLoopEnabled = function(value, group, _control) {
- var deck = DenonMC6000MK2.getDeckByGroup(group);
+ var deck = DenonMC6000MK2.getOldDeckByGroup(group);
deck.updateLoopLeds();
};
@@ -1533,166 +1678,34 @