home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Narzedzia / Aplikacje_64-bitowe / Mixxx / mixxx-1.9.0-win64.exe / midi / DJTechTools-MIDIFighter-scripts.js < prev    next >
Text File  |  2010-12-02  |  5KB  |  137 lines

  1. // DJ Tech Tools MIDI Fighter
  2. // By RJ Ryan (rryan@mit.edu)
  3. // For Mixxx 1.8.0+
  4.  
  5. // These scripts are the basics of mapping buttons on the MIDI Fighter to do
  6. // things in Mixxx. Since everyone will have their own preference for what each
  7. // button should do, the basic mappings do nothing more than assign player 1's
  8. // hotcues 1-8 on the top two rows and player 2's hotcues 1-8 on the bottom two
  9. // rows.
  10.  
  11. // If no mapping is given for a button then the function
  12. // MIDIFighter.buttonX_down will be called when the button is pressed, and
  13. // MIDIFighter.buttonX_up will be called when the button is depressed. This
  14. // makes it easy to extend this script with custom functionality.
  15.  
  16. // The MIDI Fighter is laid out like this (in terms of the button numbers
  17. // referenced below:
  18. //
  19. //     || <-- usb wire
  20. // ================
  21. // |  1  2  3  4  |
  22. // |  5  6  7  8  |
  23. // |  9 10 11 12  |
  24. // | 13 14 15 16  |
  25. // | MIDI FIGHTER |
  26. // ================
  27.  
  28. // A big thanks go to Ean Golden of DJ Tech Tools for sending me a MIDI
  29. // Fighter. Mixxx would not have a mapping for the MIDI Fighter if it weren't
  30. // for his generosity.
  31.  
  32. function MIDIFighter() {}
  33.  
  34. MIDIFighter.control_map = {
  35.     0x30: 1,
  36.     0x31: 2,
  37.     0x32: 3,
  38.     0x33: 4,
  39.     0x2C: 5,
  40.     0x2D: 6,
  41.     0x2E: 7,
  42.     0x2F: 8,
  43.     0x28: 9,
  44.     0x29: 10,
  45.     0x2A: 11,
  46.     0x2B: 12,
  47.     0x24: 13,
  48.     0x25: 14,
  49.     0x26: 15,
  50.     0x27: 16,
  51. };
  52.  
  53. MIDIFighter.button_mappings = {
  54. };
  55.  
  56. MIDIFighter.map_button = function (button, control_object) {
  57.     MIDIFighter.button_mappings[button] = control_object;
  58. }
  59.  
  60. MIDIFighter.init = function(id) {
  61.     MIDIFighter.id = id;
  62.     print("MIDI Fighter " + MIDIFighter.id + " initialized.");
  63.  
  64.     MIDIFighter.map_button(1, {'group': '[Channel1]', 'item': 'hotcue_1_activate'});
  65.     MIDIFighter.map_button(2, {'group': '[Channel1]', 'item': 'hotcue_2_activate'});
  66.     MIDIFighter.map_button(3, {'group': '[Channel1]', 'item': 'hotcue_3_activate'});
  67.     MIDIFighter.map_button(4, {'group': '[Channel1]', 'item': 'hotcue_4_activate'});
  68.  
  69.     MIDIFighter.map_button(5, {'group': '[Channel1]', 'item': 'hotcue_5_activate'});
  70.     MIDIFighter.map_button(6, {'group': '[Channel1]', 'item': 'hotcue_6_activate'});
  71.     MIDIFighter.map_button(7, {'group': '[Channel1]', 'item': 'hotcue_7_activate'});
  72.     MIDIFighter.map_button(8, {'group': '[Channel1]', 'item': 'hotcue_8_activate'});
  73.  
  74.     MIDIFighter.map_button(9, {'group': '[Channel2]', 'item': 'hotcue_1_activate'});
  75.     MIDIFighter.map_button(10, {'group': '[Channel2]', 'item': 'hotcue_2_activate'});
  76.     MIDIFighter.map_button(11, {'group': '[Channel2]', 'item': 'hotcue_3_activate'});
  77.     MIDIFighter.map_button(12, {'group': '[Channel2]', 'item': 'hotcue_4_activate'});
  78.  
  79.     MIDIFighter.map_button(13, {'group': '[Channel2]', 'item': 'hotcue_5_activate'});
  80.     MIDIFighter.map_button(14, {'group': '[Channel2]', 'item': 'hotcue_6_activate'});
  81.     MIDIFighter.map_button(15, {'group': '[Channel2]', 'item': 'hotcue_7_activate'});
  82.     MIDIFighter.map_button(16, {'group': '[Channel2]', 'item': 'hotcue_8_activate'});
  83. }
  84.  
  85. MIDIFighter.shutdown = function() {
  86.     print("MIDI Fighter " + MIDIFighter.id + " shutting down.");
  87. }
  88.  
  89. MIDIFighter.button_down = function (channel, control, value, status) {
  90.     //print("Button down " + channel + " " + control + " " + value);
  91.     var button_number = MIDIFighter.control_map[control];
  92.     var button_name = 'button' + button_number;
  93.     var button_name_down = 'button' + button_number + "_down";
  94.     if (button_number in MIDIFighter.button_mappings) {
  95.         var control = MIDIFighter.button_mappings[button_number];
  96.         engine.setValue(control.group, control.item, 1);
  97.     } else if (button_name_down in MIDIFighter) {
  98.         MIDIFighter[button_name_down]();
  99.     } else if (button_name in MIDIFighter) {
  100.         MIDIFighter[button_name](1);
  101.     }
  102. }
  103.  
  104. MIDIFighter.button_up = function (channel, control, value, status) {
  105.     //print("Button up " + channel + " " + control + " " + value);
  106.     var button_number = MIDIFighter.control_map[control];
  107.     var button_name = 'button' + button_number;
  108.     var button_name_up = 'button' + button_number + "_up";
  109.  
  110.     if (button_number in MIDIFighter.button_mappings) {
  111.         var control = MIDIFighter.button_mappings[button_number];
  112.         engine.setValue(control.group, control.item, 0);
  113.     } else if (button_name_up in MIDIFighter) {
  114.         print ("Calling " + button_name_up);
  115.         MIDIFighter[button_name_up]();
  116.     } else if (button_name in MIDIFighter) {
  117.         MIDIFighter[button_name](0);
  118.     }
  119. }
  120.  
  121. MIDIFighter.button1_down = function() {
  122.     // Example, if no mapping is made for button 1 then this will be called when
  123.     // button 1 is pressed.
  124. }
  125.  
  126. MIDIFighter.button1_up = function() {
  127.     // Example, if no mapping is made for button 1 then this will be called when
  128.     // button 1 is released.
  129. }
  130.  
  131. MIDIFighter.button1 = function() {
  132.     // Example, if no mapping is given for button 1, and no button1_up or
  133.     // button1_down method is defined, then this function will be called with
  134.     // the argument 1 for the button being pressed and 0 for the button being
  135.     // released.
  136. }
  137.