summaryrefslogtreecommitdiffstats
path: root/res/controllers/common-controller-scripts.js
diff options
context:
space:
mode:
Diffstat (limited to 'res/controllers/common-controller-scripts.js')
-rw-r--r--res/controllers/common-controller-scripts.js465
1 files changed, 241 insertions, 224 deletions
diff --git a/res/controllers/common-controller-scripts.js b/res/controllers/common-controller-scripts.js
index 687f422b14..c1d2d09f58 100644
--- a/res/controllers/common-controller-scripts.js
+++ b/res/controllers/common-controller-scripts.js
@@ -1,98 +1,127 @@
// Functions common to all controllers go in this file
-nop = function () {} // Only here so you don't get a syntax error on load if the file was otherwise empty
-
// ----------------- Prototype enhancements ---------------------
// Returns an ASCII byte array for the string
String.prototype.toInt = function() {
- var a = new Array();
+ var a = new Array()
for (var i = 0; i < this.length; i++) {
- a[i] = this.charCodeAt(i);
+ a[i] = this.charCodeAt(i)
}
- return a;
+ return a
}
// ----------------- Function overloads ---------------------
// Causes script print() calls to appear in the log file as well
print = function(string) {
- engine.log(string);
+ engine.log(string)
+}
+
+printObject = function(obj, maxdepth) {
+ print(stringifyObject(obj, maxdepth))
}
-var printObject = function (object) {
- print(JSON.stringify(object, null, 2));
-};
+stringifyObject = function(obj, maxdepth, checked, prefix) {
+ if (!maxdepth)
+ maxdepth = 2
+ try {
+ return JSON.stringify(obj, null, maxdepth)
+ } catch (e) {
+ if (!checked)
+ checked = []
+ if (!prefix)
+ prefix = ""
+ if (maxdepth > 0 && typeof obj === "object" && obj !== null && Object.getPrototypeOf(obj) !== "" && !arrayContains(checked, obj)) {
+ checked.push(obj)
+ var output = "{\n"
+ for (var property in obj) {
+ var value = obj[property]
+ if (typeof value === "function")
+ continue
+ output += prefix + property + ": " + stringifyObject(value, maxdepth - 1, checked, prefix + " ") + "\n"
+ }
+ return output + prefix.substr(2) + "}"
+ }
+ }
+ return obj
+}
+
+arrayContains = function(array, elem) {
+ for (var i = 0; i < array.length; i++) {
+ if (array[i] === elem)
+ return true
+ }
+ return false
+}
// ----------------- Generic functions ---------------------
-function secondstominutes(secs)
-{
- var m = (secs / 60) | 0;
+secondstominutes = function(secs) {
+ var m = (secs / 60) | 0
- return (m < 10 ? "0" + m : m)
- + ":"
- + ( ( secs %= 60 ) < 10 ? "0" + secs : secs);
+ return (m < 10 ? "0" + m : m)
+ + ":"
+ + ((secs %= 60) < 10 ? "0" + secs : secs)
}
-function msecondstominutes(msecs)
-{
- var m = (msecs / 60000) | 0;
- msecs %= 60000;
- var secs = (msecs / 1000) | 0;
- msecs %= 1000;
- msecs = Math.round(msecs * 100 / 1000);
- if (msecs==100) msecs=99;
-
-// print("secs="+secs+", msecs="+msecs);
+msecondstominutes = function(msecs) {
+ var m = (msecs / 60000) | 0
+ msecs %= 60000
+ var secs = (msecs / 1000) | 0
+ msecs %= 1000
+ msecs = Math.round(msecs * 100 / 1000)
+ if (msecs === 100)
+ msecs = 99
return (m < 10 ? "0" + m : m)
+ ":"
- + ( secs < 10 ? "0" + secs : secs )
+ + (secs < 10 ? "0" + secs : secs)
+ "."
- + ( msecs < 10 ? "0" + msecs : msecs);
+ + (msecs < 10 ? "0" + msecs : msecs)
}
-function script() {}
+script = function() {
+}
// DEPRECATED -- use script.midiDebug() instead
-script.debug = function (channel, control, value, status, group) {
- print("Warning: script.debug() is deprecated. Use script.midiDebug() instead.");
- script.midiDebug(channel, control, value, status, group);
+script.debug = function(channel, control, value, status, group) {
+ print("Warning: script.debug() is deprecated. Use script.midiDebug() instead.")
+ script.midiDebug(channel, control, value, status, group)
}
// DEPRECATED -- use script.midiPitch() instead
-script.pitch = function (LSB, MSB, status) {
- print("Warning: script.pitch() is deprecated. Use script.midiPitch() instead.");
- return script.midiPitch(LSB, MSB, status);
+script.pitch = function(LSB, MSB, status) {
+ print("Warning: script.pitch() is deprecated. Use script.midiPitch() instead.")
+ return script.midiPitch(LSB, MSB, status)
}
// DEPRECATED -- use script.absoluteLin() instead
-script.absoluteSlider = function (group, key, value, low, high, min, max) {
- print("Warning: script.absoluteSlider() is deprecated. Use engine.setValue(group, key, script.absoluteLin(...)) instead.");
- engine.setValue(group, key, script.absoluteLin(value, low, high, min, max));
+script.absoluteSlider = function(group, key, value, low, high, min, max) {
+ print("Warning: script.absoluteSlider() is deprecated. Use engine.setValue(group, key, script.absoluteLin(...)) instead.")
+ engine.setValue(group, key, script.absoluteLin(value, low, high, min, max))
}
-script.midiDebug = function (channel, control, value, status, group) {
+script.midiDebug = function(channel, control, value, status, group) {
print("Script.midiDebug - channel: 0x" + channel.toString(16) +
- " control: 0x" + control.toString(16) + " value: 0x" + value.toString(16) +
- " status: 0x" + status.toString(16) + " group: " + group);
+ " control: 0x" + control.toString(16) + " value: 0x" + value.toString(16) +
+ " status: 0x" + status.toString(16) + " group: " + group)
}
// Returns the deck number of a "ChannelN" or "SamplerN" group
-script.deckFromGroup = function (group) {
- var deck = 0;
- if (group.substring(2,8)=="hannel") {
+script.deckFromGroup = function(group) {
+ var deck = 0
+ if (group.substring(2, 8) == "hannel") {
// Extract deck number from the group text
- deck = group.substring(8,group.length-1);
+ deck = group.substring(8, group.length - 1)
}
-/*
- else if (group.substring(2,8)=="ampler") {
- // Extract sampler number from the group text
- deck = group.substring(8,group.length-1);
- }
-*/
- return parseInt(deck);
+ /*
+ else if (group.substring(2,8)=="ampler") {
+ // Extract sampler number from the group text
+ deck = group.substring(8,group.length-1);
+ }
+ */
+ return parseInt(deck)
}
/* -------- ------------------------------------------------------
@@ -104,14 +133,14 @@ script.deckFromGroup = function (group) {
controls will be bound to.
Output: none
-------- ------------------------------------------------------ */
-script.bindConnections = function (group, controlsToFunctions, remove) {
- var control;
- remove = (remove === undefined) ? false : remove;
+script.bindConnections = function(group, controlsToFunctions, remove) {
+ var control
+ remove = (remove === undefined) ? false : remove
for (control in controlsToFunctions) {
- engine.connectControl(group, control, controlsToFunctions[control], remove);
+ engine.connectControl(group, control, controlsToFunctions[control], remove)
if (!remove) {
- engine.trigger(group, control);
+ engine.trigger(group, control)
}
}
}
@@ -122,8 +151,8 @@ script.bindConnections = function (group, controlsToFunctions, remove) {
Input: Group and control names
Output: none
-------- ------------------------------------------------------ */
-script.toggleControl = function (group, control) {
- engine.setValue(group, control, !(engine.getValue(group, control)));
+script.toggleControl = function(group, control) {
+ engine.setValue(group, control, !(engine.getValue(group, control)))
}
/* -------- ------------------------------------------------------
@@ -135,14 +164,14 @@ script.toggleControl = function (group, control) {
Input: Group and control names, delay in milliseconds (optional)
Output: none
-------- ------------------------------------------------------ */
-script.triggerControl = function (group, control, delay) {
- if (typeof delay !== 'number') {
- delay = 200;
+script.triggerControl = function(group, control, delay) {
+ if (typeof delay !== "number") {
+ delay = 200
}
- engine.setValue(group, control, 1);
- engine.beginTimer(delay, function () {
- engine.setValue(group, control, 0);
- }, true);
+ engine.setValue(group, control, 1)
+ engine.beginTimer(delay, function() {
+ engine.setValue(group, control, 0)
+ }, true)
}
/* -------- ------------------------------------------------------
@@ -154,20 +183,20 @@ script.triggerControl = function (group, control, delay) {
(Default knob values are standard MIDI 0..127)
Output: MixxxControl value corresponding to the knob position
-------- ------------------------------------------------------ */
-script.absoluteLin = function (value, low, high, min, max) {
+script.absoluteLin = function(value, low, high, min, max) {
if (!min) {
- min = 0;
+ min = 0
}
if (!max) {
- max = 127;
+ max = 127
}
-
+
if (value <= min) {
- return low;
+ return low
} else if (value >= max) {
- return high;
+ return high
} else {
- return ((((high - low) / (max-min)) * (value-min)) + low);
+ return ((((high - low) / (max - min)) * (value - min)) + low)
}
}
@@ -180,20 +209,20 @@ script.absoluteLin = function (value, low, high, min, max) {
(Default knob values are standard MIDI 0..127)
Output: Linear value corresponding to the knob position
-------- ------------------------------------------------------ */
-script.absoluteLinInverse = function (value, low, high, min, max) {
+script.absoluteLinInverse = function(value, low, high, min, max) {
if (!min) {
- min = 0;
+ min = 0
}
if (!max) {
- max = 127;
+ max = 127
}
- var result = (((value-low)*(max-min))/(high-low)) + min
+ var result = (((value - low) * (max - min)) / (high - low)) + min
if (result < min) {
- return min;
+ return min
} else if (result > max) {
- return max;
+ return max
} else {
- return result;
+ return result
}
}
@@ -207,20 +236,20 @@ script.absoluteLinInverse = function (value, low, high, min, max) {
(Default knob values are standard MIDI 0..127)
Output: MixxxControl value corresponding to the knob position
-------- ------------------------------------------------------ */
-script.absoluteNonLin = function (value, low, mid, high, min, max) {
+script.absoluteNonLin = function(value, low, mid, high, min, max) {
if (!min) {
- min = 0;
+ min = 0
}
if (!max) {
- max = 127;
+ max = 127
}
- var center = (max-min)/2;
- if (value==center || value==Math.round(center)) {
- return mid;
- } else if (value<center) {
- return low+(value/(center/(mid-low)));
+ var center = (max - min) / 2
+ if (value == center || value == Math.round(center)) {
+ return mid
+ } else if (value < center) {
+ return low + (value / (center / (mid - low)))
} else {
- return mid+((value-center)/(center/(high-mid)));
+ return mid + ((value - center) / (center / (high - mid)))
}
}
@@ -232,30 +261,30 @@ script.absoluteNonLin = function (value, low, mid, high, min, max) {
bottom of output range, top of output range. (Default output range is standard MIDI 0..127)
Output: MixxxControl value scaled to output range
-------- ------------------------------------------------------ */
-script.absoluteNonLinInverse = function (value, low, mid, high, min, max) {
+script.absoluteNonLinInverse = function(value, low, mid, high, min, max) {
if (!min) {
- min = 0;
+ min = 0
}
if (!max) {
- max = 127;
+ max = 127
}
- var center = (max-min)/2;
- var result;
-
- if (value==mid) {
- return center;
- } else if (value<mid) {
- result = (center/(mid-low)) * (value-low);
+ var center = (max - min) / 2
+ var result
+
+ if (value == mid) {
+ return center
+ } else if (value < mid) {
+ result = (center / (mid - low)) * (value - low)
} else {
- result = center + (center/(high-mid)) * (value-mid);
+ result = center + (center / (high - mid)) * (value - mid)
}
-
+
if (result < min) {
- return min;
+ return min
} else if (result > max) {
- return max;
+ return max
} else {
- return result;
+ return result
}
}
@@ -265,13 +294,13 @@ script.absoluteNonLinInverse = function (value, low, mid, high, min, max) {
Input: Current value of the hardware control, min and max values for that control
Output: none
-------- ------------------------------------------------------ */
-script.crossfaderCurve = function (value, min, max) {
- if (engine.getValue("[Mixer Profile]", "xFaderMode")==1) {
+script.crossfaderCurve = function(value, min, max) {
+ if (engine.getValue("[Mixer Profile]", "xFaderMode") == 1) {
// Constant Power
- engine.setValue("[Mixer Profile]", "xFaderCalibration", script.absoluteLin(value, 0.5, 0.962, min, max));
+ engine.setValue("[Mixer Profile]", "xFaderCalibration", script.absoluteLin(value, 0.5, 0.962, min, max))
} else {
// Additive
- engine.setValue("[Mixer Profile]", "xFaderCurve", script.absoluteLin(value, 1, 2, min, max));
+ engine.setValue("[Mixer Profile]", "xFaderCurve", script.absoluteLin(value, 1, 2, min, max))
}
}
@@ -284,13 +313,13 @@ script.crossfaderCurve = function (value, min, max) {
Input: MixxxControl group, direction to move, number of beats to move
Output: none
-------- ------------------------------------------------------ */
-script.loopMove = function (group,direction,numberOfBeats) {
- if (!numberOfBeats || numberOfBeats==0) numberOfBeats = 0.5;
+script.loopMove = function(group, direction, numberOfBeats) {
+ if (!numberOfBeats || numberOfBeats == 0) numberOfBeats = 0.5
if (direction < 0) {
- engine.setValue(group, "loop_move", -numberOfBeats);
+ engine.setValue(group, "loop_move", -numberOfBeats)
} else {
- engine.setValue(group, "loop_move", numberOfBeats);
+ engine.setValue(group, "loop_move", numberOfBeats)
}
}
@@ -304,16 +333,16 @@ script.loopMove = function (group,direction,numberOfBeats) {
message was not a Pitch message (0xE#)
-------- ------------------------------------------------------ */
// TODO: Is this still useful now that MidiController.cpp properly handles these?
-script.midiPitch = function (LSB, MSB, status) {
+script.midiPitch = function(LSB, MSB, status) {
if ((status & 0xF0) !== 0xE0) { // Mask the upper nybble so we can check the opcode regardless of the channel
- print("Script.midiPitch: Error, not a MIDI pitch (0xEn) message: "+status);
- return false;
+ print("Script.midiPitch: Error, not a MIDI pitch (0xEn) message: " + status)
+ return false
}
- var value = (MSB << 7) | LSB; // Construct the 14-bit number
+ var value = (MSB << 7) | LSB // Construct the 14-bit number
// Range is 0x0000..0x3FFF center @ 0x2000, i.e. 0..16383 center @ 8192
- var rate = (value-8192)/8191;
+ var rate = (value - 8192) / 8191
// print("Script.Pitch: MSB="+MSB+", LSB="+LSB+", value="+value+", rate="+rate);
- return rate;
+ return rate
}
/* -------- ------------------------------------------------------
@@ -327,14 +356,14 @@ script.midiPitch = function (LSB, MSB, status) {
script.spinback = function(channel, control, value, status, group, factor, rate) {
// if brake is called without defined factor and rate, reset to defaults
if (factor === undefined) {
- factor = 1;
+ factor = 1
}
// if brake is called without defined rate, reset to default
if (rate === undefined) {
- rate = -10;
+ rate = -10
}
// disable on note-off or zero value note/cc
- engine.spinback(parseInt(group.substring(8,9)), ((status & 0xF0) !== 0x80 && value > 0), factor, rate);
+ engine.spinback(parseInt(group.substring(8, 9)), ((status & 0xF0) !== 0x80 && value > 0), factor, rate)
}
/* -------- ------------------------------------------------------
@@ -348,10 +377,10 @@ script.spinback = function(channel, control, value, status, group, factor, rate)
script.brake = function(channel, control, value, status, group, factor) {
// if brake is called without factor defined, reset to default
if (factor === undefined) {
- factor = 1;
+ factor = 1
}
// disable on note-off or zero value note/cc, use default decay rate '1'
- engine.brake(parseInt(group.substring(8,9)), ((status & 0xF0) !== 0x80 && value > 0), factor);
+ engine.brake(parseInt(group.substring(8, 9)), ((status & 0xF0) !== 0x80 && value > 0), factor)
}
/* -------- ------------------------------------------------------
@@ -366,17 +395,18 @@ script.brake = function(channel, control, value, status, group, factor) {
script.softStart = function(channel, control, value, status, group, factor) {
// if softStart is called without factor defined, reset to default
if (factor === undefined) {
- factor = 1;
+ factor = 1
}
// disable on note-off or zero value note/cc, use default increase rate '1'
- engine.softStart(parseInt(group.substring(8,9)), ((status & 0xF0) !== 0x80 && value > 0), factor);
+ engine.softStart(parseInt(group.substring(8, 9)), ((status & 0xF0) !== 0x80 && value > 0), factor)
}
// bpm - Used for tapping the desired BPM for a deck
-function bpm() {}
+bpm = function() {
+}
-bpm.tapTime = 0.0;
-bpm.tap = []; // Tap sample values
+bpm.tapTime = 0.0
+bpm.tap = [] // Tap sample values
/* -------- ------------------------------------------------------
bpm.tapButton
@@ -388,135 +418,122 @@ bpm.tap = []; // Tap sample values
Output: -
-------- ------------------------------------------------------ */
bpm.tapButton = function(deck) {
- var now = new Date()/1000; // Current time in seconds
- var tapDelta = now - bpm.tapTime;
- bpm.tapTime=now;
- if (tapDelta>2.0) { // reset if longer than two seconds between taps
- bpm.tap=[];
- return;
+ var now = new Date() / 1000 // Current time in seconds
+ var tapDelta = now - bpm.tapTime
+ bpm.tapTime = now
+ if (tapDelta > 2.0) { // reset if longer than two seconds between taps
+ bpm.tap = []
+ return
}
- bpm.tap.push(60/tapDelta);
- if (bpm.tap.length>8) bpm.tap.shift(); // Keep the last 8 samples for averaging
- var sum = 0;
- for (i=0; i<bpm.tap.length; i++) {
- sum += bpm.tap[i];
+ bpm.tap.push(60 / tapDelta)
+ if (bpm.tap.length > 8) bpm.tap.shift() // Keep the last 8 samples for averaging
+ var sum = 0
+ for (i = 0; i < bpm.tap.length; i++) {
+ sum += bpm.tap[i]
}
- var average = sum/bpm.tap.length;
+ var average = sum / bpm.tap.length
- var fRateScale = average/engine.getValue("[Channel"+deck+"]","bpm");
+ var fRateScale = average / engine.getValue("[Channel" + deck + "]", "bpm")
// Adjust the rate:
- fRateScale = (fRateScale-1.)/engine.getValue("[Channel"+deck+"]","rateRange");
+ fRateScale = (fRateScale - 1.) / engine.getValue("[Channel" + deck + "]", "rateRange")
- engine.setValue("[Channel"+deck+"]","rate",fRateScale * engine.getValue("[Channel"+deck+"]","rate_dir"));
+ engine.setValue("[Channel" + deck + "]", "rate", fRateScale * engine.getValue("[Channel" + deck + "]", "rate_dir"))
// print("Script: BPM="+average+" setting to "+fRateScale);
}
// ----------------- Common regular expressions --------------------------
-script.samplerRegEx = /^\[Sampler(\d+)\]$/ ;
-script.channelRegEx = /^\[Channel(\d+)\]$/ ;
-script.eqRegEx = /^\[EqualizerRack1_(\[.*\])_Effect1\]$/ ;
-script.quickEffectRegEx = /^\[QuickEffectRack1_(\[.*\])\]$/ ;
-script.effectUnitRegEx = /^\[EffectRack1_EffectUnit(\d+)\]$/ ;
-script.individualEffectRegEx = /^\[EffectRack1_EffectUnit(\d+)_Effect(\d+)\]$/ ;
+script.samplerRegEx = /^\[Sampler(\d+)\]$/
+script.channelRegEx = /^\[Channel(\d+)\]$/
+script.eqRegEx = /^\[EqualizerRack1_(\[.*\])_Effect1\]$/
+script.quickEffectRegEx = /^\[QuickEffectRack1_(\[.*\])\]$/
+script.effectUnitRegEx = /^\[EffectRack1_EffectUnit(\d+)\]$/
+script.individualEffectRegEx = /^\[EffectRack1_EffectUnit(\d+)_Effect(\d+)\]$/
// ----------------- Object definitions --------------------------
-ButtonState = {"released":0x00, "pressed":0x7F};
-LedState = {"off": 0x00, "on": 0x7F};
+ButtonState = {"released": 0x00, "pressed": 0x7F}
+LedState = {"off": 0x00, "on": 0x7F}
//Controller
-function Controller () {
- this.group = "[Master]";
- this.Controls = [];
- this.Buttons = [];
-};
+function Controller() {
+ this.group = "[Master]"
+ this.Controls = []
+ this.Buttons = []
+}
Controller.prototype.addButton = function(buttonName, button, eventHandler) {
- if(eventHandler) {
- var executionEnvironment = this;
- function handler(value) {
- button.state = value;
- executionEnvironment[eventHandler](value);
- }
- button.handler = handler;
- }
- this.Buttons[buttonName] = button;
+ if (eventHandler) {
+ var executionEnvironment = this
+ handler = function(value) {
+ button.state = value
+ executionEnvironment[eventHandler](value)
+ }
+ button.handler = handler
+ }
+ this.Buttons[buttonName] = button
}
Controller.prototype.setControlValue = function(control, value) {
- this.Controls[control].setValue(this.group, value);
+ this.Controls[control].setValue(this.group, value)
}
//Button
-function Button(controlId) {
- this.controlId = controlId;
- this.state = ButtonState.released;
+Button = function(controlId) {
+ this.controlId = controlId
+ this.state = ButtonState.released
}
Button.prototype.handleEvent = function(value) {
- this.handler(value);
-};
+ this.handler(value)
+}
//Control
-function Control(mappedFunction, softMode) {
- // These defaults are for MIDI controllers
- this.minInput = 0;
- this.midInput = 0x3F;
- this.maxInput = 0x7F;
- // ----
-
- this.minOutput = -1.0;
- this.midOutput = 0.0;
- this.maxOutput = 1.0;
- this.mappedFunction = mappedFunction;
- this.softMode = softMode;
- this.maxJump = 10;
-}
-
-Control.prototype.setValue = function(group, inputValue){
- var outputValue = 0;
- if(inputValue <= this.midInput){
- outputValue = this.minOutput + ((inputValue - this.minInput) / (this.midInput - this.minInput)) * (this.midOutput - this.minOutput);
- } else {
- outputValue = this.midOutput + ((inputValue - this.midInput) / (this.maxInput - this.midInput)) * (this.maxOutput - this.midOutput);
- }
- if(this.softMode){
- var currentValue = engine.getValue(group, this.mappedFunction);
- var currentRelative = 0.0;
- if(currentValue <= this.midOutput){
- currentRelative = this.minInput + ((currentValue - this.minOutput) / (this.midOutput - this.minOutput)) * (this.midInput - this.minInput);
- } else {
- currentRelative = this.midInput + ((currentValue - this.midOutput) / (this.maxOutput - this.midOutput)) * (this.maxInput - this.midInput);
- }
- if(inputValue > currentRelative - this.maxJump && inputValue < currentRelative + this.maxJump) {
- engine.setValue(group, this.mappedFunction, outputValue);
- }
- } else {
- engine.setValue(group, this.mappedFunction, outputValue);
- }
+Control = function(mappedFunction, softMode) {
+ // These defaults are for MIDI controllers
+ this.minInput = 0
+ this.midInput = 0x3F
+ this.maxInput = 0x7F
+ // ----
+
+ this.minOutput = -1.0
+ this.midOutput = 0.0
+ this.maxOutput = 1.0
+ this.mappedFunction = mappedFunction
+ this.softMode = softMode
+ this.maxJump = 10
}
-//Deck
-Deck = function (deckNumber, group) {
- this.deckNumber = deckNumber;
- this.group = group;
- this.Buttons = [];
+Control.prototype.setValue = function(group, inputValue) {
+ var outputValue = 0
+ if (inputValue <= this.midInput) {
+ outputValue = this.minOutput + ((inputValue - this.minInput) / (this.midInput - this.minInput)) * (this.midOutput - this.minOutput)
+ } else {
+ outputValue = this.midOutput + ((inputValue - this.midInput) / (this.maxInput - this.midInput)) * (this.maxOutput - this.midOutput)
+ }
+ if (this.softMode) {
+ var currentValue = engine.getValue(group, this.mappedFunction)
+ var currentRelative = 0.0
+ if (currentValue <= this.midOutput) {
+ currentRelative = this.minInput + ((currentValue - this.minOutput) / (this.midOutput - this.minOutput)) * (this.midInput - this.minInput)
+ } else {
+ currentRelative = this.midInput + ((currentValue - this.midOutput) / (this.maxOutput - this.midOutput)) * (this.maxInput - this.midInput)
+ }
+ if (inputValue > currentRelative - this.maxJump && inputValue < currentRelative + this.maxJump) {
+ engine.setValue(group, this.mappedFunction, outputValue)
+ }
+ } else {
+ engine.setValue(group, this.mappedFunction, outputValue)
+ }
}
-Deck.prototype.setControlValue = Controller.prototype.setControlValue;
-Deck.prototype.addButton = Controller.prototype.addButton;
-// Data packet
-function Packet(length, initialValue) {
- this.length = length;
- this.data = new Array(length); // Size the array
-
- if (!initialValue) initialValue=0;
-
- // Initialize data values
- for (i=0; i<this.length; i++) {
- this.data[i]=initialValue;
- }
+//Deck
+Deck = function(deckNumber, group) {
+ this.deckNumber = deckNumber
+ this.group = group
+ this.Buttons = []
}
+Deck.prototype.setControlValue = Controller.prototype.setControlValue
+Deck.prototype.addButton = Controller.prototype.addButton
// ----------------- END Object definitions ----------------------