Skip to content

Commit c7dd1d6

Browse files
author
tonell_m
committed
Fixed FX controls
- Removed existing code for controlling effect units - Replaced with implementation using Components
1 parent 98e21d0 commit c7dd1d6

2 files changed

Lines changed: 249 additions & 312 deletions

File tree

res/controllers/Pioneer-DDJ-SB-scripts.js

Lines changed: 79 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ PioneerDDJSB.jumpPreviewPosition = 0.5;
3939

4040

4141
PioneerDDJSB.init = function(id) {
42+
43+
PioneerDDJSB.effectUnit = [];
44+
PioneerDDJSB.effectUnit[1] = new PioneerDDJSB.EffectUnit(1);
45+
PioneerDDJSB.effectUnit[2] = new PioneerDDJSB.EffectUnit(2);
46+
4247
PioneerDDJSB.scratchSettings = {
4348
'alpha': 1.0 / 8,
4449
'beta': 1.0 / 8 / 32,
@@ -61,37 +66,13 @@ PioneerDDJSB.init = function(id) {
6166
'[Sampler4]': 0x03
6267
};
6368

64-
PioneerDDJSB.fxGroups = {
65-
'[EffectRack1_EffectUnit1]': 0x00,
66-
'[EffectRack1_EffectUnit2]': 0x01
67-
};
68-
69-
PioneerDDJSB.fxControls = {
70-
'group_[Channel1]_enable': 0x00,
71-
'group_[Channel3]_enable': 0x00,
72-
'group_[Headphone]_enable': 0x01,
73-
'group_[Channel2]_enable': 0x02,
74-
'group_[Channel4]_enable': 0x02
75-
};
76-
7769
PioneerDDJSB.shiftPressed = false;
7870

7971
PioneerDDJSB.chFaderStart = [
8072
null,
8173
null
8274
];
8375

84-
PioneerDDJSB.fxButtonPressed = [
85-
[false, false, false],
86-
[false, false, false]
87-
];
88-
89-
// used for soft takeover workaround
90-
PioneerDDJSB.fxParamsActiveValues = [
91-
[0, 0, 0, 0, 0],
92-
[0, 0, 0, 0, 0]
93-
];
94-
9576
PioneerDDJSB.scratchMode = [false, false, false, false];
9677

9778
PioneerDDJSB.ledGroups = {
@@ -182,41 +163,24 @@ PioneerDDJSB.bindDeckControlConnections = function(channelGroup, isUnbinding) {
182163
}
183164

184165
script.bindConnections(channelGroup, controlsToFunctions, isUnbinding);
185-
186-
for (fxUnitIndex = 1; fxUnitIndex <= 2; fxUnitIndex++) {
187-
engine.connectControl('[EffectRack1_EffectUnit' + fxUnitIndex + ']', 'group_' + channelGroup + '_enable', 'PioneerDDJSB.fxLeds', isUnbinding);
188-
if (!isUnbinding) {
189-
engine.trigger('[EffectRack1_EffectUnit' + fxUnitIndex + ']', 'group_' + channelGroup + '_enable');
190-
}
191-
}
192166
};
193167

194168
PioneerDDJSB.bindNonDeckControlConnections = function(isUnbinding) {
195-
var samplerIndex,
196-
fxUnitIndex;
169+
var samplerIndex;
197170

198171
for (samplerIndex = 1; samplerIndex <= 4; samplerIndex++) {
199172
PioneerDDJSB.bindSamplerControlConnections('[Sampler' + samplerIndex + ']', isUnbinding);
200173
}
201-
202-
for (fxUnitIndex = 1; fxUnitIndex <= 2; fxUnitIndex++) {
203-
engine.connectControl('[EffectRack1_EffectUnit' + fxUnitIndex + ']', 'group_[Headphone]_enable', 'PioneerDDJSB.fxLeds', isUnbinding);
204-
}
205174
};
206175

207176
PioneerDDJSB.bindAllControlConnections = function(isUnbinding) {
208177
var samplerIndex,
209-
fxUnitIndex,
210178
channelIndex;
211179

212180
for (samplerIndex = 1; samplerIndex <= 4; samplerIndex++) {
213181
PioneerDDJSB.bindSamplerControlConnections('[Sampler' + samplerIndex + ']', isUnbinding);
214182
}
215183

216-
for (fxUnitIndex = 1; fxUnitIndex <= 2; fxUnitIndex++) {
217-
engine.connectControl('[EffectRack1_EffectUnit' + fxUnitIndex + ']', 'group_[Headphone]_enable', 'PioneerDDJSB.fxLeds', isUnbinding);
218-
}
219-
220184
for (channelIndex = 1; channelIndex <= 2; channelIndex++) {
221185
PioneerDDJSB.bindDeckControlConnections('[Channel' + channelIndex + ']', isUnbinding);
222186
}
@@ -580,20 +544,6 @@ PioneerDDJSB.deckConverter = function(group) {
580544
return group % 2;
581545
};
582546

583-
PioneerDDJSB.fxLedControl = function(deck, ledNumber, shift, active) {
584-
var fxLedsBaseChannel = 0x94,
585-
fxLedsBaseControl = (shift ? 0x63 : 0x47),
586-
midiChannelOffset = PioneerDDJSB.deckConverter(deck);
587-
588-
if (midiChannelOffset !== null) {
589-
midi.sendShortMsg(
590-
fxLedsBaseChannel + midiChannelOffset,
591-
fxLedsBaseControl + ledNumber,
592-
active ? 0x7F : 0x00
593-
);
594-
}
595-
};
596-
597547
PioneerDDJSB.padLedControl = function(deck, groupNumber, shiftGroup, ledNumber, shift, active) {
598548
var padLedsBaseChannel = 0x97,
599549
padLedControl = (shiftGroup ? 0x40 : 0x00) + (shift ? 0x08 : 0x00) + (+groupNumber) + (+ledNumber),
@@ -626,14 +576,6 @@ PioneerDDJSB.nonPadLedControl = function(deck, ledNumber, active) {
626576
// LEDS //
627577
///////////////////////////////////////////////////////////////
628578

629-
PioneerDDJSB.fxLeds = function(value, group, control) {
630-
var deck = PioneerDDJSB.fxGroups[group],
631-
ledNumber = PioneerDDJSB.fxControls[control];
632-
633-
PioneerDDJSB.fxLedControl(deck, ledNumber, false, value);
634-
PioneerDDJSB.fxLedControl(deck, ledNumber, true, value);
635-
};
636-
637579
PioneerDDJSB.headphoneCueLed = function(value, group, control) {
638580
PioneerDDJSB.nonPadLedControl(group, PioneerDDJSB.nonPadLeds.headphoneCue, value);
639581
PioneerDDJSB.nonPadLedControl(group, PioneerDDJSB.nonPadLeds.shiftHeadphoneCue, value);
@@ -898,88 +840,81 @@ PioneerDDJSB.rotarySelectorShiftedClick = function(channel, control, value, _sta
898840
// FX //
899841
///////////////////////////////////////////////////////////////
900842

901-
PioneerDDJSB.fxKnobMSB = [0, 0];
902-
PioneerDDJSB.fxKnobShiftedMSB = [0, 0];
843+
PioneerDDJSB.EffectUnit = function(unitNumber) {
844+
var eu = this;
845+
this.group = "[EffectRack1_EffectUnit" + unitNumber + "]";
846+
engine.setValue(this.group, "show_focus", 1);
903847

904-
PioneerDDJSB.fxButton = function(channel, control, value, status, group) {
905-
var deck = channel - 4,
906-
button = control - 0x47,
907-
channel = PioneerDDJSB.deckSwitchTable['[Channel' + (button === 0 ? 1 : 2) + ']'];
848+
this.EffectButton = function(buttonNumber) {
849+
this.buttonNumber = buttonNumber;
908850

909-
PioneerDDJSB.fxButtonPressed[deck][button] = (value === 0x7F);
851+
this.group = eu.group;
852+
this.midi = [0x93 + unitNumber, 0x46 + buttonNumber];
910853

911-
if (button === 1) {
912-
engine.trigger(group, 'group_[Headphone]_enable');
913-
} else {
914-
engine.trigger(group, 'group_' + channel + '_enable');
915-
}
916-
};
917-
918-
PioneerDDJSB.fxButtonShifted = function(channel, control, value, status, group) {
919-
var button = control - 0x63,
920-
channel = PioneerDDJSB.deckSwitchTable['[Channel' + (button === 0 ? 1 : 2) + ']'];
921-
922-
if (value) {
923-
if (button === 1) {
924-
script.toggleControl(group, 'group_[Headphone]_enable');
925-
} else {
926-
script.toggleControl(group, 'group_' + channel + '_enable');
927-
}
928-
}
929-
};
930-
931-
PioneerDDJSB.fxKnobShiftedMSB = function(channel, control, value, status) {
932-
PioneerDDJSB.fxKnobShiftedMSB[channel - 4] = value;
933-
};
934-
935-
PioneerDDJSB.fxKnobShiftedLSB = function(channel, control, value, status) {
936-
var deck = channel - 4,
937-
fullValue = (PioneerDDJSB.fxKnobShiftedMSB[deck] << 7) + value;
938-
939-
if (PioneerDDJSB.softTakeoverEmulation(deck, 4, PioneerDDJSB.fxKnobShiftedMSB[deck])) {
940-
engine.setValue('[EffectRack1_EffectUnit' + (deck + 1) + ']', 'super1', fullValue / 0x3FFF);
941-
}
942-
};
943-
944-
PioneerDDJSB.fxKnobMSB = function(channel, control, value, status) {
945-
PioneerDDJSB.fxKnobMSB[channel - 4] = value;
946-
};
947-
948-
PioneerDDJSB.fxKnobLSB = function(channel, control, value, status) {
949-
var deck = channel - 4,
950-
anyButtonPressed = false,
951-
fullValue = (PioneerDDJSB.fxKnobMSB[deck] << 7) + value,
952-
parameter;
953-
954-
for (parameter = 0; parameter < 3; parameter++) {
955-
if (PioneerDDJSB.fxButtonPressed[deck][parameter]) {
956-
anyButtonPressed = true;
957-
}
958-
}
959-
960-
if (!anyButtonPressed) {
961-
if (PioneerDDJSB.softTakeoverEmulation(deck, 3, PioneerDDJSB.fxKnobMSB[deck])) {
962-
engine.setValue('[EffectRack1_EffectUnit' + (deck + 1) + ']', 'mix', fullValue / 0x3FFF);
963-
}
964-
} else {
965-
for (parameter = 0; parameter < 3; parameter++) {
966-
if (PioneerDDJSB.fxButtonPressed[deck][parameter] && PioneerDDJSB.softTakeoverEmulation(deck, parameter, PioneerDDJSB.fxKnobMSB[deck])) {
967-
engine.setParameter(
968-
'[EffectRack1_EffectUnit' + (deck + 1) + '_Effect1]',
969-
'parameter' + (parameter + 1),
970-
fullValue / 0x3FFF
971-
);
854+
components.Button.call(this);
855+
};
856+
this.EffectButton.prototype = new components.Button({
857+
input: function(channel, control, value, status) {
858+
if (this.isPress(channel, control, value, status)) {
859+
this.isLongPressed = false;
860+
this.longPressTimer = engine.beginTimer(this.longPressTimeout, function() {
861+
var effectGroup = "[EffectRack1_EffectUnit" + unitNumber + "_Effect" + this.buttonNumber + "]";
862+
script.toggleControl(effectGroup, "enabled");
863+
this.isLongPressed = true;
864+
}, true);
865+
} else {
866+
if (!this.isLongPressed) {
867+
var focusedEffect = engine.getValue(eu.group, "focused_effect");
868+
if (focusedEffect === this.buttonNumber) {
869+
engine.setValue(eu.group, "focused_effect", 0);
870+
} else {
871+
engine.setValue(eu.group, "focused_effect", this.buttonNumber);
872+
}
873+
}
874+
this.isLongPressed = false;
875+
engine.stopTimer(this.longPressTimer);
972876
}
877+
},
878+
outKey: "focused_effect",
879+
output: function(value, _group, _control) {
880+
this.send((value === this.buttonNumber) ? this.on : this.off);
881+
},
882+
sendShifted: true,
883+
shiftControl: true,
884+
shiftOffset: 28,
885+
});
886+
887+
this.button = [];
888+
for (var i = 1; i <= 3; i++) {
889+
this.button[i] = new this.EffectButton(i);
890+
891+
var effectGroup = "[EffectRack1_EffectUnit" + unitNumber + "_Effect" + i + "]";
892+
engine.softTakeover(effectGroup, "meta", true);
893+
engine.softTakeover(eu.group, "mix", true);
894+
}
895+
896+
this.knob = new components.Pot({
897+
unshift: function() {
898+
this.input = function(channel, control, value, _status) {
899+
value = (this.MSB << 7) + value;
900+
901+
var focusedEffect = engine.getValue(eu.group, "focused_effect");
902+
if (focusedEffect === 0) {
903+
engine.setParameter(eu.group, "mix", value / this.max);
904+
} else {
905+
var effectGroup = "[EffectRack1_EffectUnit" + unitNumber + "_Effect" + focusedEffect + "]";
906+
engine.setParameter(effectGroup, "meta", value / this.max);
907+
}
908+
};
909+
},
910+
});
911+
912+
this.knobSoftTakeoverHandler = engine.makeConnection(eu.group, "focused_effect", function(value, _group, _control) {
913+
if (value === 0) {
914+
engine.softTakeoverIgnoreNextValue(eu.group, "mix");
915+
} else {
916+
var effectGroup = "[EffectRack1_EffectUnit" + unitNumber + "_Effect" + value + "]";
917+
engine.softTakeoverIgnoreNextValue(effectGroup, "meta");
973918
}
974-
}
975-
};
976-
977-
PioneerDDJSB.softTakeoverEmulation = function(deck, index, currentValue) {
978-
var deltaToActive = currentValue - PioneerDDJSB.fxParamsActiveValues[deck][index];
979-
980-
if (Math.abs(deltaToActive) < 15) {
981-
PioneerDDJSB.fxParamsActiveValues[deck][index] = currentValue;
982-
return true;
983-
}
984-
return false;
985-
};
919+
}.bind(this));
920+
};

0 commit comments

Comments
 (0)