summaryrefslogtreecommitdiffstats
path: root/res/controllers/Pioneer-DDJ-200-scripts.js
diff options
context:
space:
mode:
Diffstat (limited to 'res/controllers/Pioneer-DDJ-200-scripts.js')
-rw-r--r--res/controllers/Pioneer-DDJ-200-scripts.js59
1 files changed, 59 insertions, 0 deletions
diff --git a/res/controllers/Pioneer-DDJ-200-scripts.js b/res/controllers/Pioneer-DDJ-200-scripts.js
new file mode 100644
index 0000000000..a7b662bbd4
--- /dev/null
+++ b/res/controllers/Pioneer-DDJ-200-scripts.js
@@ -0,0 +1,59 @@
+var DDJ200 = {
+ jogDisabled: new Array(false, false, false, false, false)
+};
+
+DDJ200.init = function() {};
+
+DDJ200.shutdown = function() {};
+
+DDJ200.scratch = function(channel, control, value, status, group) {
+ // For a control that centers on 0x40 (64):
+ // Convert value down to +1/-1
+ // Register the movement
+ engine.scratchTick(script.deckFromGroup(group), value - 64);
+};
+
+DDJ200.jog = function(channel, control, value, status, group) {
+ // For a control that centers on 0x40 (64):
+ // Convert value down to +1/-1
+ // Register the movement
+ var deckNumber = script.deckFromGroup(group);
+ if (! DDJ200.jogDisabled[deckNumber]) {
+ engine.setValue(group, "jog", value - 64);
+ }
+};
+
+DDJ200.touch = function(channel, control, value, status, group) {
+ var deckNumber = script.deckFromGroup(group);
+ if (value) {
+ // enable scratch
+ var alpha = 1.0 / 8;
+ engine.scratchEnable(deckNumber, 128, 33 + 1 / 3, alpha, alpha / 32);
+ } else {
+ // disable jog to not prevent alignment and enable it after 900 ms
+ DDJ200.jogDisabled[deckNumber] = true;
+ engine.beginTimer(900, "DDJ200.jogDisabled["+deckNumber+"] = false;",
+ true);
+ // disable scratch
+ engine.scratchDisable(deckNumber);
+ }
+};
+
+DDJ200.seek = function(channel, control, value, status, group) {
+ var oldPos = engine.getValue(group, "playposition");
+ // Since ‘playposition’ is normalized to unity, we need to scale by
+ // song duration in order for the jog wheel to cover the same amount
+ // of time given a constant turning angle.
+ var duration = engine.getValue(group, "duration");
+ var newPos = Math.max(0, oldPos + ((value - 64) * 0.2 / duration));
+ engine.setValue(group, "playposition", newPos); // Strip search
+};
+
+DDJ200.headmix = function(channel, control, value) {
+ if (value) {
+ var masterMixEnabled = (engine.getValue("[Master]", "headMix") > 0);
+ // toggle headMix knob between values of -1 and 1
+ engine.setValue("[Master]", "headMix", masterMixEnabled ? -1 : 1);
+ midi.sendShortMsg(0x96, 0x63, masterMixEnabled ? 0x7F : 0); // set LED
+ }
+};