summaryrefslogtreecommitdiffstats
path: root/res/controllers/DJTechTools-MIDIFighter-scripts.js
diff options
context:
space:
mode:
authorRJ Ryan <rryan@mixxx.org>2013-06-19 00:46:54 -0400
committerRJ Ryan <rryan@mixxx.org>2013-06-19 00:46:54 -0400
commit25d57b59dff3947212909634864dd82365c9606b (patch)
treef0d0f8a048f8ed2f45c5ff015fc96891662f72f1 /res/controllers/DJTechTools-MIDIFighter-scripts.js
parente50f9f168fa08f2be6d0f13e8a225bbcc9de09bb (diff)
Moving mixxx/* to the root. A new era begins!
Diffstat (limited to 'res/controllers/DJTechTools-MIDIFighter-scripts.js')
-rw-r--r--res/controllers/DJTechTools-MIDIFighter-scripts.js136
1 files changed, 136 insertions, 0 deletions
diff --git a/res/controllers/DJTechTools-MIDIFighter-scripts.js b/res/controllers/DJTechTools-MIDIFighter-scripts.js
new file mode 100644
index 0000000000..e3cc887897
--- /dev/null
+++ b/res/controllers/DJTechTools-MIDIFighter-scripts.js
@@ -0,0 +1,136 @@
+// DJ Tech Tools MIDI Fighter
+// By RJ Ryan (rryan@mit.edu)
+// For Mixxx 1.8.0+
+
+// These scripts are the basics of mapping buttons on the MIDI Fighter to do
+// things in Mixxx. Since everyone will have their own preference for what each
+// button should do, the basic mappings do nothing more than assign player 1's
+// hotcues 1-8 on the top two rows and player 2's hotcues 1-8 on the bottom two
+// rows.
+
+// If no mapping is given for a button then the function
+// MIDIFighter.buttonX_down will be called when the button is pressed, and
+// MIDIFighter.buttonX_up will be called when the button is depressed. This
+// makes it easy to extend this script with custom functionality.
+
+// The MIDI Fighter is laid out like this (in terms of the button numbers
+// referenced below:
+//
+// || <-- usb wire
+// ================
+// | 1 2 3 4 |
+// | 5 6 7 8 |
+// | 9 10 11 12 |
+// | 13 14 15 16 |
+// | MIDI FIGHTER |
+// ================
+
+// A big thanks go to Ean Golden of DJ Tech Tools for sending me a MIDI
+// Fighter. Mixxx would not have a mapping for the MIDI Fighter if it weren't
+// for his generosity.
+
+function MIDIFighter() {}
+
+MIDIFighter.control_map = {
+ 0x30: 1,
+ 0x31: 2,
+ 0x32: 3,
+ 0x33: 4,
+ 0x2C: 5,
+ 0x2D: 6,
+ 0x2E: 7,
+ 0x2F: 8,
+ 0x28: 9,
+ 0x29: 10,
+ 0x2A: 11,
+ 0x2B: 12,
+ 0x24: 13,
+ 0x25: 14,
+ 0x26: 15,
+ 0x27: 16,
+};
+
+MIDIFighter.button_mappings = {
+};
+
+MIDIFighter.map_button = function (button, control_object) {
+ MIDIFighter.button_mappings[button] = control_object;
+}
+
+MIDIFighter.init = function(id) {
+ MIDIFighter.id = id;
+ print("MIDI Fighter " + MIDIFighter.id + " initialized.");
+
+ MIDIFighter.map_button(1, {'group': '[Channel1]', 'item': 'hotcue_1_activate'});
+ MIDIFighter.map_button(2, {'group': '[Channel1]', 'item': 'hotcue_2_activate'});
+ MIDIFighter.map_button(3, {'group': '[Channel1]', 'item': 'hotcue_3_activate'});
+ MIDIFighter.map_button(4, {'group': '[Channel1]', 'item': 'hotcue_4_activate'});
+
+ MIDIFighter.map_button(5, {'group': '[Channel1]', 'item': 'hotcue_5_activate'});
+ MIDIFighter.map_button(6, {'group': '[Channel1]', 'item': 'hotcue_6_activate'});
+ MIDIFighter.map_button(7, {'group': '[Channel1]', 'item': 'hotcue_7_activate'});
+ MIDIFighter.map_button(8, {'group': '[Channel1]', 'item': 'hotcue_8_activate'});
+
+ MIDIFighter.map_button(9, {'group': '[Channel2]', 'item': 'hotcue_1_activate'});
+ MIDIFighter.map_button(10, {'group': '[Channel2]', 'item': 'hotcue_2_activate'});
+ MIDIFighter.map_button(11, {'group': '[Channel2]', 'item': 'hotcue_3_activate'});
+ MIDIFighter.map_button(12, {'group': '[Channel2]', 'item': 'hotcue_4_activate'});
+
+ MIDIFighter.map_button(13, {'group': '[Channel2]', 'item': 'hotcue_5_activate'});
+ MIDIFighter.map_button(14, {'group': '[Channel2]', 'item': 'hotcue_6_activate'});
+ MIDIFighter.map_button(15, {'group': '[Channel2]', 'item': 'hotcue_7_activate'});
+ MIDIFighter.map_button(16, {'group': '[Channel2]', 'item': 'hotcue_8_activate'});
+}
+
+MIDIFighter.shutdown = function() {
+ print("MIDI Fighter " + MIDIFighter.id + " shutting down.");
+}
+
+MIDIFighter.button_down = function (channel, control, value, status) {
+ //print("Button down " + channel + " " + control + " " + value);
+ var button_number = MIDIFighter.control_map[control];
+ var button_name = 'button' + button_number;
+ var button_name_down = 'button' + button_number + "_down";
+ if (button_number in MIDIFighter.button_mappings) {
+ var control = MIDIFighter.button_mappings[button_number];
+ engine.setValue(control.group, control.item, 1);
+ } else if (button_name_down in MIDIFighter) {
+ MIDIFighter[button_name_down]();
+ } else if (button_name in MIDIFighter) {
+ MIDIFighter[button_name](1);
+ }
+}
+
+MIDIFighter.button_up = function (channel, control, value, status) {
+ //print("Button up " + channel + " " + control + " " + value);
+ var button_number = MIDIFighter.control_map[control];
+ var button_name = 'button' + button_number;
+ var button_name_up = 'button' + button_number + "_up";
+
+ if (button_number in MIDIFighter.button_mappings) {
+ var control = MIDIFighter.button_mappings[button_number];
+ engine.setValue(control.group, control.item, 0);
+ } else if (button_name_up in MIDIFighter) {
+ print ("Calling " + button_name_up);
+ MIDIFighter[button_name_up]();
+ } else if (button_name in MIDIFighter) {
+ MIDIFighter[button_name](0);
+ }
+}
+
+MIDIFighter.button1_down = function() {
+ // Example, if no mapping is made for button 1 then this will be called when
+ // button 1 is pressed.
+}
+
+MIDIFighter.button1_up = function() {
+ // Example, if no mapping is made for button 1 then this will be called when
+ // button 1 is released.
+}
+
+MIDIFighter.button1 = function() {
+ // Example, if no mapping is given for button 1, and no button1_up or
+ // button1_down method is defined, then this function will be called with
+ // the argument 1 for the button being pressed and 0 for the button being
+ // released.
+}