diff options
author | RJ Ryan <rryan@mixxx.org> | 2013-06-19 00:46:54 -0400 |
---|---|---|
committer | RJ Ryan <rryan@mixxx.org> | 2013-06-19 00:46:54 -0400 |
commit | 25d57b59dff3947212909634864dd82365c9606b (patch) | |
tree | f0d0f8a048f8ed2f45c5ff015fc96891662f72f1 /res/controllers/DJTechTools-MIDIFighter-scripts.js | |
parent | e50f9f168fa08f2be6d0f13e8a225bbcc9de09bb (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.js | 136 |
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. +} |