Instant Gratification - mapping to my controller
Instant Gratification - mapping to my controller Posted on: 23.05.2011 by Shane Gladfelder I have downloaded the instant gratification .tsi to use with Traktor Pro 2. I could like to change the mapping to my keys on my Remote SL 25. I basically want to transfer the 16 buttons of the midifighter to 16 of the keys on the keyboard. The only way I have seen to do this is to look at the comments for each mapping and note which midi control changes this. This could take a long time. Is there any way I can change the midi input for all the settings in one go? e.g. The midi control for "Beatmash 1" is "Ch.03.Note.E2". This midi control is maybe repeated 30 times throughout the entire mapping for one deck. How can I change them all in one go? I will buy a midifighter one day I'm sure, but I'd love to try it out this way first. | |
Allene Manitta 12.06.2011 |
Originally Posted by derschaich
gave my script a try, and everything went fine (make sure you choose all MIDI-Out ports a NONE for you Inst.Grat. mappings, else you will end up in deeeeeep s**t) except the combos. so i'm still searching the TSI for the messages to be triggered... help apprechiated! here is the recent code for you guys: Code:
midi.DeviceOut = 2 midi.DefaultChannel = 3 debug = Joystick.button5 //Define Deck if (Joystick1.button1) then Var.Deck=1 ; if (Joystick1.pov1left) then Var.Deck=2 ; if (Joystick1.pov1down) then Var.Deck=3 ; if (Joystick1.button4) then Var.Deck=4 ; //Deck Modes //Deck A if (Var.Deck=1) then { Var.ButtonA5 = Joystick1.button5 Var.ButtonA6 = Joystick1.Button6 Var.ButtonA7 = Joystick1.Button7 Var.ButtonA8 = Joystick1.Button8 Var.ButtonA9 = Joystick1.Button9 Var.ButtonA10 = Joystick1.Button10 Var.ButtonA11 = Joystick1.Button11 Var.ButtonA12 = Joystick1.Button12 Var.ButtonA13 = Joystick1.Button2 Var.ButtonA14 = Joystick1.pov1up Var.ButtonA15 = Joystick1.pov1right Var.ButtonA16 = Joystick1.Button3 } end if; //Deck B if (Var.Deck=2) then { Var.ButtonB5 = Joystick1.button5 Var.ButtonB6 = Joystick1.Button6 Var.ButtonB7 = Joystick1.Button7 Var.ButtonB8 = Joystick1.Button8 Var.ButtonB9 = Joystick1.Button9 Var.ButtonB10 = Joystick1.Button10 Var.ButtonB11 = Joystick1.Button11 Var.ButtonB12 = Joystick1.Button12 Var.ButtonB13 = Joystick1.Button2 Var.ButtonB14 = Joystick1.pov1up Var.ButtonB15 = Joystick1.pov1right Var.ButtonB16 = Joystick1.Button3 } end if //Deck C if (Var.Deck=3) then { Var.ButtonC5 = Joystick1.button5 Var.ButtonC6 = Joystick1.Button6 Var.ButtonC7 = Joystick1.Button7 Var.ButtonC8 = Joystick1.Button8 Var.ButtonC9 = Joystick1.Button9 Var.ButtonC10 = Joystick1.Button10 Var.ButtonC11 = Joystick1.Button11 Var.ButtonC12 = Joystick1.Button12 Var.ButtonC13 = Joystick1.Button2 Var.ButtonC14 = Joystick1.pov1up Var.ButtonC15 = Joystick1.pov1right Var.ButtonC16 = Joystick1.Button3 } end if //Deck D if (Var.Deck=4) then { Var.ButtonD5 = Joystick1.button5 Var.ButtonD6 = Joystick1.Button6 Var.ButtonD7 = Joystick1.Button7 Var.ButtonD8 = Joystick1.Button8 Var.ButtonD9 = Joystick1.Button9 Var.ButtonD10 = Joystick1.Button10 Var.ButtonD11 = Joystick1.Button11 Var.ButtonD12 = Joystick1.Button12 Var.ButtonD13 = Joystick1.Button2 Var.ButtonD14 = Joystick1.pov1up Var.ButtonD15 = Joystick1.pov1right Var.ButtonD16 = Joystick1.Button3 } end if //Button Conversion midi.c2= Joystick1.button1 midi.gsharp3 = Var.ButtonA5 midi.a3 = Var.ButtonA6 midi.asharp3 = Var.ButtonA7 midi.b3 = Var.ButtonA8 midi.e3 = Var.ButtonA9 midi.f3 = Var.ButtonA10 midi.fsharp3 = Var.ButtonA11 midi.g3 = Var.ButtonA12 midi.c3 = Var.ButtonA13 midi.csharp3 = Var.ButtonA14 midi.d3 = Var.ButtonA15 midi.dsharp3 = Var.ButtonA16 midi.csharp2= Joystick.pov1left midi.gsharp4 = Var.ButtonB5 midi.a4 = Var.ButtonB6 midi.asharp4 = Var.ButtonB7 midi.b4 = Var.ButtonB8 midi.e4 = Var.ButtonB9 midi.f4 = Var.ButtonB10 midi.fsharp4 = Var.ButtonB11 midi.g4 = Var.ButtonB12 midi.c4 = Var.ButtonB13 midi.csharp4 = Var.ButtonB14 midi.d4 = Var.ButtonB15 midi.dsharp4 = Var.ButtonB16 midi.d2= Joystick.pov1down midi.gsharp5 = Var.ButtonC5 midi.a5 = Var.ButtonC6 midi.asharp5 = Var.ButtonC7 midi.b5 = Var.ButtonC8 midi.e5 = Var.ButtonC9 midi.f5 = Var.ButtonC10 midi.fsharp5 = Var.ButtonC11 midi.g5 = Var.ButtonC12 midi.c5 = Var.ButtonC13 midi.csharp5 = Var.ButtonC14 midi.d5 = Var.ButtonC15 midi.dsharp5 = Var.ButtonC16 midi.dsharp2= Joystick.button4 midi.gsharp6 = Var.ButtonD5 midi.a6 = Var.ButtonD6 midi.asharp6 = Var.ButtonD7 midi.b6 = Var.ButtonD8 midi.e6 = Var.ButtonD9 midi.f6 = Var.ButtonD10 midi.fsharp6 = Var.ButtonD11 midi.g6 = Var.ButtonD12 midi.c6 = Var.ButtonD13 midi.csharp6 = Var.ButtonD14 midi.d6 = Var.ButtonD15 midi.dsharp6 = Var.ButtonD16 // COMPILED CODE, PLEASE DELETE BEFORE COMPILING! |
Chasidy Heckenbach 09.06.2011 |
Originally Posted by angelva
|
Chasidy Heckenbach 05.06.2011 |
Originally Posted by derschaich
might look again later when have time - or just have a better look at the tsi - could be a comment in there that would help |
Allene Manitta 05.06.2011 |
Originally Posted by angelva
|
Chasidy Heckenbach 31.05.2011 |
Originally Posted by derschaich
2. grat mapping:
i hope my script works with the old mapping (had no chance to test it yet) but with the new firmware triggering additional midi-notes at those combinations in the upper mentioned thread to free modifiers inside traktor. if i knew those messages i could implement them at ease! would still need to send a note off mesage for the combo when any of the buttons are released ofc - which would be easier to do maybe if implementing the full state machine. the messages sent out for the combos are: a=8, b=9, c=10, d=11, e=12 or at least those are the values sent to midi_stream_note() in the firmware. doesnt make sense tho as note 8 would be G#-1 surely? and i didnt see that in the tsi file... guess i'm missing something. i know in other places the notes are just offsets from note 36 but dont see how that would get added on in this bit of code - ah well... |
Chasidy Heckenbach 31.05.2011 |
Originally Posted by derschaich
the super combos arent just simple combinations of pressing buttons - they're driven by a state machine *but* it might be possible to simplify for using in glovepie as you can tell at any point when multiple buttons are pressed. e.g: for any (all?) where you just need to press and hold multiple buttons just one 'if' can be added to glovepie (i believe) here's the state machine code from the mf firmware: Code:
// State Transition Table // Key numbers are: // +-----------+ // | 0 1 2 3| // | 4 5 6 7| // | 8 9 10 11| // |12 13 14 15| // +-----------+ // combo_state_t state_table[] PROGMEM = { // state key next action /* 0 */ { 0, 12 | KEYDOWN, 1, COMBO_NONE }, // combo A /* 1 */ { 0, 9 | KEYDOWN, 5, COMBO_NONE }, // combo B /* 2 */ { 0, 8 | KEYDOWN, 9, COMBO_NONE }, // combo D /* 3 */ { 0, 4 | KEYDOWN, 18, COMBO_NONE }, // combo E /* 4 */ { 1, 13 | KEYDOWN, 2, COMBO_NONE }, // combo A /* 5 */ { 2, 14 | KEYDOWN, 3, COMBO_NONE }, /* 6 */ { 3, 15 | KEYDOWN, 4, COMBO_A_DOWN }, /* 7 */ { 4, 15 | KEYUP, 0, COMBO_A_RELEASE }, /* 8 */ { 5, 10 | KEYDOWN, 6, COMBO_NONE }, // combo B /* 9 */ { 6, 5 | KEYDOWN, 7, COMBO_NONE }, /* 10 */ { 7, 6 | KEYDOWN, 8, COMBO_C_DOWN }, /* 11 */ { 8, 6 | KEYUP, 0, COMBO_C_RELEASE }, /* 12 */ { 9, 8 | KEYUP, 10, COMBO_NONE }, // combo D /* 13 */ { 10, 9 | KEYDOWN, 11, COMBO_NONE }, /* 14 */ { 11, 9 | KEYUP, 12, COMBO_NONE }, /* 15 */ { 11, 10 | KEYDOWN, 6, COMBO_NONE }, // --> combo C /* 16 */ { 12, 10 | KEYDOWN, 13, COMBO_NONE }, /* 17 */ { 13, 10 | KEYUP, 14, COMBO_NONE }, /* 18 */ { 14, 10 | KEYDOWN, 15, COMBO_NONE }, /* 19 */ { 15, 10 | KEYUP, 16, COMBO_NONE }, /* 20 */ { 16, 11 | KEYDOWN, 17, COMBO_D_DOWN }, /* 21 */ { 17, 11 | KEYUP, 0, COMBO_D_RELEASE }, /* 22 */ { 18, 4 | KEYUP, 19, COMBO_NONE }, // combo E /* 23 */ { 19, 4 | KEYDOWN, 20, COMBO_NONE }, /* 24 */ { 20, 4 | KEYUP, 21, COMBO_NONE }, /* 25 */ { 21, 12 | KEYDOWN, 22, COMBO_NONE }, /* 26 */ { 22, 12 | KEYUP, 23, COMBO_NONE }, /* 27 */ { 23, 12 | KEYDOWN, 24, COMBO_NONE }, /* 28 */ { 24, 12 | KEYUP, 25, COMBO_NONE }, /* 29 */ { 25, 8 | KEYDOWN, 26, COMBO_NONE }, /* 30 */ { 26, 8 | KEYUP, 27, COMBO_NONE }, /* 31 */ { 26, 10 | KEYDOWN, 6, COMBO_NONE }, // --> combo C /* 32 */ { 27, 9 | KEYDOWN, 28, COMBO_NONE }, /* 33 */ { 28, 9 | KEYUP, 29, COMBO_NONE }, /* 34 */ { 29, 8 | KEYDOWN, 30, COMBO_NONE }, /* 35 */ { 30, 8 | KEYUP, 31, COMBO_NONE }, /* 36 */ { 31, 9 | KEYDOWN, 32, COMBO_NONE }, /* 37 */ { 31, 10 | KEYDOWN, 13, COMBO_NONE }, // --> combo D /* 38 */ { 32, 9 | KEYUP, 33, COMBO_NONE }, /* 39 */ { 33, 11 | KEYDOWN, 34, COMBO_NONE }, /* 40 */ { 33, 9 | KEYDOWN, 11, COMBO_NONE }, // --> combo D /* 41 */ { 34, 11 | KEYUP, 35, COMBO_NONE }, /* 42 */ { 35, 10 | KEYDOWN, 36, COMBO_E_DOWN }, /* 43 */ { 36, 10 | KEYUP, 0, COMBO_E_RELEASE }, }; |
Chasidy Heckenbach 30.05.2011 |
Originally Posted by derschaich
might be fun though... not sure how many buttons the gamepad has that i ordered (as i only need 8 since thats how many arcade buttons i bought) but if it has at least 12 i'd be able to do that out before pulling it apart and soldering to the 8 arcade buttons... combo.c in the mf firmware has the state table in - 44 elements - so 44 "if" statements in glovepie i guess shouldn't be too inefficient though as theres 37 different states and the only state that needs to check more than 1 or 2 button presses is the initial state. |
Allene Manitta 12.06.2011 |
Originally Posted by derschaich
gave my script a try, and everything went fine (make sure you choose all MIDI-Out ports a NONE for you Inst.Grat. mappings, else you will end up in deeeeeep s**t) except the combos. so i'm still searching the TSI for the messages to be triggered... help apprechiated! here is the recent code for you guys: Code:
midi.DeviceOut = 2 midi.DefaultChannel = 3 debug = Joystick.button5 //Define Deck if (Joystick1.button1) then Var.Deck=1 ; if (Joystick1.pov1left) then Var.Deck=2 ; if (Joystick1.pov1down) then Var.Deck=3 ; if (Joystick1.button4) then Var.Deck=4 ; //Deck Modes //Deck A if (Var.Deck=1) then { Var.ButtonA5 = Joystick1.button5 Var.ButtonA6 = Joystick1.Button6 Var.ButtonA7 = Joystick1.Button7 Var.ButtonA8 = Joystick1.Button8 Var.ButtonA9 = Joystick1.Button9 Var.ButtonA10 = Joystick1.Button10 Var.ButtonA11 = Joystick1.Button11 Var.ButtonA12 = Joystick1.Button12 Var.ButtonA13 = Joystick1.Button2 Var.ButtonA14 = Joystick1.pov1up Var.ButtonA15 = Joystick1.pov1right Var.ButtonA16 = Joystick1.Button3 } end if; //Deck B if (Var.Deck=2) then { Var.ButtonB5 = Joystick1.button5 Var.ButtonB6 = Joystick1.Button6 Var.ButtonB7 = Joystick1.Button7 Var.ButtonB8 = Joystick1.Button8 Var.ButtonB9 = Joystick1.Button9 Var.ButtonB10 = Joystick1.Button10 Var.ButtonB11 = Joystick1.Button11 Var.ButtonB12 = Joystick1.Button12 Var.ButtonB13 = Joystick1.Button2 Var.ButtonB14 = Joystick1.pov1up Var.ButtonB15 = Joystick1.pov1right Var.ButtonB16 = Joystick1.Button3 } end if //Deck C if (Var.Deck=3) then { Var.ButtonC5 = Joystick1.button5 Var.ButtonC6 = Joystick1.Button6 Var.ButtonC7 = Joystick1.Button7 Var.ButtonC8 = Joystick1.Button8 Var.ButtonC9 = Joystick1.Button9 Var.ButtonC10 = Joystick1.Button10 Var.ButtonC11 = Joystick1.Button11 Var.ButtonC12 = Joystick1.Button12 Var.ButtonC13 = Joystick1.Button2 Var.ButtonC14 = Joystick1.pov1up Var.ButtonC15 = Joystick1.pov1right Var.ButtonC16 = Joystick1.Button3 } end if //Deck D if (Var.Deck=4) then { Var.ButtonD5 = Joystick1.button5 Var.ButtonD6 = Joystick1.Button6 Var.ButtonD7 = Joystick1.Button7 Var.ButtonD8 = Joystick1.Button8 Var.ButtonD9 = Joystick1.Button9 Var.ButtonD10 = Joystick1.Button10 Var.ButtonD11 = Joystick1.Button11 Var.ButtonD12 = Joystick1.Button12 Var.ButtonD13 = Joystick1.Button2 Var.ButtonD14 = Joystick1.pov1up Var.ButtonD15 = Joystick1.pov1right Var.ButtonD16 = Joystick1.Button3 } end if //Button Conversion midi.c2= Joystick1.button1 midi.gsharp3 = Var.ButtonA5 midi.a3 = Var.ButtonA6 midi.asharp3 = Var.ButtonA7 midi.b3 = Var.ButtonA8 midi.e3 = Var.ButtonA9 midi.f3 = Var.ButtonA10 midi.fsharp3 = Var.ButtonA11 midi.g3 = Var.ButtonA12 midi.c3 = Var.ButtonA13 midi.csharp3 = Var.ButtonA14 midi.d3 = Var.ButtonA15 midi.dsharp3 = Var.ButtonA16 midi.csharp2= Joystick.pov1left midi.gsharp4 = Var.ButtonB5 midi.a4 = Var.ButtonB6 midi.asharp4 = Var.ButtonB7 midi.b4 = Var.ButtonB8 midi.e4 = Var.ButtonB9 midi.f4 = Var.ButtonB10 midi.fsharp4 = Var.ButtonB11 midi.g4 = Var.ButtonB12 midi.c4 = Var.ButtonB13 midi.csharp4 = Var.ButtonB14 midi.d4 = Var.ButtonB15 midi.dsharp4 = Var.ButtonB16 midi.d2= Joystick.pov1down midi.gsharp5 = Var.ButtonC5 midi.a5 = Var.ButtonC6 midi.asharp5 = Var.ButtonC7 midi.b5 = Var.ButtonC8 midi.e5 = Var.ButtonC9 midi.f5 = Var.ButtonC10 midi.fsharp5 = Var.ButtonC11 midi.g5 = Var.ButtonC12 midi.c5 = Var.ButtonC13 midi.csharp5 = Var.ButtonC14 midi.d5 = Var.ButtonC15 midi.dsharp5 = Var.ButtonC16 midi.dsharp2= Joystick.button4 midi.gsharp6 = Var.ButtonD5 midi.a6 = Var.ButtonD6 midi.asharp6 = Var.ButtonD7 midi.b6 = Var.ButtonD8 midi.e6 = Var.ButtonD9 midi.f6 = Var.ButtonD10 midi.fsharp6 = Var.ButtonD11 midi.g6 = Var.ButtonD12 midi.c6 = Var.ButtonD13 midi.csharp6 = Var.ButtonD14 midi.d6 = Var.ButtonD15 midi.dsharp6 = Var.ButtonD16 // COMPILED CODE, PLEASE DELETE BEFORE COMPILING! |
Allene Manitta 10.06.2011 | i checked the tsi (1.0.2) for extra midi notes and didn't find any. therefore it should work with this mapping (not the 1.0.3). looking forward to getting access to my controller on tuesday, will try out and report back in time! |
Chasidy Heckenbach 09.06.2011 |
Originally Posted by angelva
|
Pearle Brigden 09.06.2011 | Thank you very much, i' just test it and i am sorry to tell you this but it didt work. The combos are not working. |
Allene Manitta 07.06.2011 | updated the code with the midi-notes for the bank selection and effect hold: Code:
midi.DeviceOut = 2 midi.DefaultChannel = 3 debug = Joystick.button5 //Define Deck if (Joystick1.button1) then Var.Deck=1 ; if (Joystick1.pov1left) then Var.Deck=2 ; if (Joystick1.pov1down) then Var.Deck=3 ; if (Joystick1.button4) then Var.Deck=4 ; //Deck Modes //Deck A if (Var.Deck=1) then { Var.ButtonA5 = Joystick1.button5 Var.ButtonA6 = Joystick1.Button6 Var.ButtonA7 = Joystick1.Button7 Var.ButtonA8 = Joystick1.Button8 Var.ButtonA9 = Joystick1.Button9 Var.ButtonA10 = Joystick1.Button10 Var.ButtonA11 = Joystick1.Button11 Var.ButtonA12 = Joystick1.Button12 Var.ButtonA13 = Joystick1.Button2 Var.ButtonA14 = Joystick1.pov1up Var.ButtonA15 = Joystick1.pov1right Var.ButtonA16 = Joystick1.Button3 } end if; //Deck B if (Var.Deck=2) then { Var.ButtonB5 = Joystick1.button5 Var.ButtonB6 = Joystick1.Button6 Var.ButtonB7 = Joystick1.Button7 Var.ButtonB8 = Joystick1.Button8 Var.ButtonB9 = Joystick1.Button9 Var.ButtonB10 = Joystick1.Button10 Var.ButtonB11 = Joystick1.Button11 Var.ButtonB12 = Joystick1.Button12 Var.ButtonB13 = Joystick1.Button2 Var.ButtonB14 = Joystick1.pov1up Var.ButtonB15 = Joystick1.pov1right Var.ButtonB16 = Joystick1.Button3 } end if //Deck C if (Var.Deck=3) then { Var.ButtonC5 = Joystick1.button5 Var.ButtonC6 = Joystick1.Button6 Var.ButtonC7 = Joystick1.Button7 Var.ButtonC8 = Joystick1.Button8 Var.ButtonC9 = Joystick1.Button9 Var.ButtonC10 = Joystick1.Button10 Var.ButtonC11 = Joystick1.Button11 Var.ButtonC12 = Joystick1.Button12 Var.ButtonC13 = Joystick1.Button2 Var.ButtonC14 = Joystick1.pov1up Var.ButtonC15 = Joystick1.pov1right Var.ButtonC16 = Joystick1.Button3 } end if //Deck D if (Var.Deck=4) then { Var.ButtonD5 = Joystick1.button5 Var.ButtonD6 = Joystick1.Button6 Var.ButtonD7 = Joystick1.Button7 Var.ButtonD8 = Joystick1.Button8 Var.ButtonD9 = Joystick1.Button9 Var.ButtonD10 = Joystick1.Button10 Var.ButtonD11 = Joystick1.Button11 Var.ButtonD12 = Joystick1.Button12 Var.ButtonD13 = Joystick1.Button2 Var.ButtonD14 = Joystick1.pov1up Var.ButtonD15 = Joystick1.pov1right Var.ButtonD16 = Joystick1.Button3 } end if //Button Conversion midi.c2= Joystick1.button1 midi.gsharp3 = Var.ButtonA5 midi.a3 = Var.ButtonA6 midi.asharp3 = Var.ButtonA7 midi.b3 = Var.ButtonA8 midi.e3 = Var.ButtonA9 midi.f3 = Var.ButtonA10 midi.fsharp3 = Var.ButtonA11 midi.g3 = Var.ButtonA12 midi.c3 = Var.ButtonA13 midi.csharp3 = Var.ButtonA14 midi.d3 = Var.ButtonA15 midi.dsharp3 = Var.ButtonA16 midi.c3= Joystick.pov1left midi.gsharp4 = Var.ButtonB5 midi.a4 = Var.ButtonB6 midi.asharp4 = Var.ButtonB7 midi.b4 = Var.ButtonB8 midi.e4 = Var.ButtonB9 midi.f4 = Var.ButtonB10 midi.fsharp4 = Var.ButtonB11 midi.g4 = Var.ButtonB12 midi.c4 = Var.ButtonB13 midi.csharp4 = Var.ButtonB14 midi.d4 = Var.ButtonB15 midi.dsharp4 = Var.ButtonB16 midi.c4= Joystick.pov1down midi.gsharp5 = Var.ButtonC5 midi.a5 = Var.ButtonC6 midi.asharp5 = Var.ButtonC7 midi.b5 = Var.ButtonC8 midi.e5 = Var.ButtonC9 midi.f5 = Var.ButtonC10 midi.fsharp5 = Var.ButtonC11 midi.g5 = Var.ButtonC12 midi.c5 = Var.ButtonC13 midi.csharp5 = Var.ButtonC14 midi.d5 = Var.ButtonC15 midi.dsharp5 = Var.ButtonC16 midi.c5= Joystick.button4 midi.gsharp6 = Var.ButtonD5 midi.a6 = Var.ButtonD6 midi.asharp6 = Var.ButtonD7 midi.b6 = Var.ButtonD8 midi.e6 = Var.ButtonD9 midi.f6 = Var.ButtonD10 midi.fsharp6 = Var.ButtonD11 midi.g6 = Var.ButtonD12 midi.c6 = Var.ButtonD13 midi.csharp6 = Var.ButtonD14 midi.d6 = Var.ButtonD15 midi.dsharp6 = Var.ButtonD16 // COMPILED CODE, PLEASE DELETE BEFORE COMPILING! http://www.djranking s.com/wp-conten...4Banks-1.0.zip I am unable to give the script a try, as I don't have access to my CLONE right now. Please report back, for results! |
Chasidy Heckenbach 05.06.2011 |
Originally Posted by derschaich
might look again later when have time - or just have a better look at the tsi - could be a comment in there that would help |
Allene Manitta 05.06.2011 |
Originally Posted by angelva
|
Pearle Brigden 02.06.2011 | Hi the script for glovepie of the four bank mode works perfectly, can you incorporate the super combos and post it again pleace, that would be awesome. Thank you |
Chasidy Heckenbach 31.05.2011 |
Originally Posted by derschaich
2. grat mapping:
i hope my script works with the old mapping (had no chance to test it yet) but with the new firmware triggering additional midi-notes at those combinations in the upper mentioned thread to free modifiers inside traktor. if i knew those messages i could implement them at ease! would still need to send a note off mesage for the combo when any of the buttons are released ofc - which would be easier to do maybe if implementing the full state machine. the messages sent out for the combos are: a=8, b=9, c=10, d=11, e=12 or at least those are the values sent to midi_stream_note() in the firmware. doesnt make sense tho as note 8 would be G#-1 surely? and i didnt see that in the tsi file... guess i'm missing something. i know in other places the notes are just offsets from note 36 but dont see how that would get added on in this bit of code - ah well... |
Allene Manitta 31.05.2011 | 1. Buttons: I have 12 buttons, too, but i used the 4 "buttons" from the D-Pad, too to get a full 16-button matrix. be careful, as the d-pad states have conflicting messages (up+down and left+right). therefore i have two d-pad-buttons soldered to the top row of my clone, and the other two to the bottom row. 2. grat mapping: i hope my script works with the old mapping (had no chance to test it yet) but with the new firmware triggering additional midi-notes at those combinations in the upper mentioned thread to free modifiers inside traktor. if i knew those messages i could implement them at ease! |
Chasidy Heckenbach 31.05.2011 | i believe the explanation of super combo's in this thread is a tad simpler also makes more sense i believe for glovepie http://www.djranking s.com/community /sho...ht=super+combo my gamepad only has 12buttons + start + select but what i can see from your script looks cool. i only have 8 arcade buttons but believeing of maybe getting some more... (with a diff gamepad ofc) |
Chasidy Heckenbach 31.05.2011 |
Originally Posted by derschaich
the super combos arent just simple combinations of pressing buttons - they're driven by a state machine *but* it might be possible to simplify for using in glovepie as you can tell at any point when multiple buttons are pressed. e.g: for any (all?) where you just need to press and hold multiple buttons just one 'if' can be added to glovepie (i believe) here's the state machine code from the mf firmware: Code:
// State Transition Table // Key numbers are: // +-----------+ // | 0 1 2 3| // | 4 5 6 7| // | 8 9 10 11| // |12 13 14 15| // +-----------+ // combo_state_t state_table[] PROGMEM = { // state key next action /* 0 */ { 0, 12 | KEYDOWN, 1, COMBO_NONE }, // combo A /* 1 */ { 0, 9 | KEYDOWN, 5, COMBO_NONE }, // combo B /* 2 */ { 0, 8 | KEYDOWN, 9, COMBO_NONE }, // combo D /* 3 */ { 0, 4 | KEYDOWN, 18, COMBO_NONE }, // combo E /* 4 */ { 1, 13 | KEYDOWN, 2, COMBO_NONE }, // combo A /* 5 */ { 2, 14 | KEYDOWN, 3, COMBO_NONE }, /* 6 */ { 3, 15 | KEYDOWN, 4, COMBO_A_DOWN }, /* 7 */ { 4, 15 | KEYUP, 0, COMBO_A_RELEASE }, /* 8 */ { 5, 10 | KEYDOWN, 6, COMBO_NONE }, // combo B /* 9 */ { 6, 5 | KEYDOWN, 7, COMBO_NONE }, /* 10 */ { 7, 6 | KEYDOWN, 8, COMBO_C_DOWN }, /* 11 */ { 8, 6 | KEYUP, 0, COMBO_C_RELEASE }, /* 12 */ { 9, 8 | KEYUP, 10, COMBO_NONE }, // combo D /* 13 */ { 10, 9 | KEYDOWN, 11, COMBO_NONE }, /* 14 */ { 11, 9 | KEYUP, 12, COMBO_NONE }, /* 15 */ { 11, 10 | KEYDOWN, 6, COMBO_NONE }, // --> combo C /* 16 */ { 12, 10 | KEYDOWN, 13, COMBO_NONE }, /* 17 */ { 13, 10 | KEYUP, 14, COMBO_NONE }, /* 18 */ { 14, 10 | KEYDOWN, 15, COMBO_NONE }, /* 19 */ { 15, 10 | KEYUP, 16, COMBO_NONE }, /* 20 */ { 16, 11 | KEYDOWN, 17, COMBO_D_DOWN }, /* 21 */ { 17, 11 | KEYUP, 0, COMBO_D_RELEASE }, /* 22 */ { 18, 4 | KEYUP, 19, COMBO_NONE }, // combo E /* 23 */ { 19, 4 | KEYDOWN, 20, COMBO_NONE }, /* 24 */ { 20, 4 | KEYUP, 21, COMBO_NONE }, /* 25 */ { 21, 12 | KEYDOWN, 22, COMBO_NONE }, /* 26 */ { 22, 12 | KEYUP, 23, COMBO_NONE }, /* 27 */ { 23, 12 | KEYDOWN, 24, COMBO_NONE }, /* 28 */ { 24, 12 | KEYUP, 25, COMBO_NONE }, /* 29 */ { 25, 8 | KEYDOWN, 26, COMBO_NONE }, /* 30 */ { 26, 8 | KEYUP, 27, COMBO_NONE }, /* 31 */ { 26, 10 | KEYDOWN, 6, COMBO_NONE }, // --> combo C /* 32 */ { 27, 9 | KEYDOWN, 28, COMBO_NONE }, /* 33 */ { 28, 9 | KEYUP, 29, COMBO_NONE }, /* 34 */ { 29, 8 | KEYDOWN, 30, COMBO_NONE }, /* 35 */ { 30, 8 | KEYUP, 31, COMBO_NONE }, /* 36 */ { 31, 9 | KEYDOWN, 32, COMBO_NONE }, /* 37 */ { 31, 10 | KEYDOWN, 13, COMBO_NONE }, // --> combo D /* 38 */ { 32, 9 | KEYUP, 33, COMBO_NONE }, /* 39 */ { 33, 11 | KEYDOWN, 34, COMBO_NONE }, /* 40 */ { 33, 9 | KEYDOWN, 11, COMBO_NONE }, // --> combo D /* 41 */ { 34, 11 | KEYUP, 35, COMBO_NONE }, /* 42 */ { 35, 10 | KEYDOWN, 36, COMBO_E_DOWN }, /* 43 */ { 36, 10 | KEYUP, 0, COMBO_E_RELEASE }, }; |
Allene Manitta 31.05.2011 | here you go: only the different notes from deck A-D for a gamepad. dunno the notes and combinations of the super combos, but i would easily integrate them in my script. Code:
midi.DeviceOut = 2 midi.DefaultChannel = 3 debug = Joystick.button5 //Define Deck if (Joystick1.button1) then Var.Deck=1 ; if (Joystick1.pov1left) then Var.Deck=2 ; if (Joystick1.pov1down) then Var.Deck=3 ; if (Joystick1.button4) then Var.Deck=4 ; //Deck Modes //Deck A if (Var.Deck=1) then { Var.ButtonA5 = Joystick1.button5 Var.ButtonA6 = Joystick1.Button6 Var.ButtonA7 = Joystick1.Button7 Var.ButtonA8 = Joystick1.Button8 Var.ButtonA9 = Joystick1.Button9 Var.ButtonA10 = Joystick1.Button10 Var.ButtonA11 = Joystick1.Button11 Var.ButtonA12 = Joystick1.Button12 Var.ButtonA13 = Joystick1.Button2 Var.ButtonA14 = Joystick1.pov1up Var.ButtonA15 = Joystick1.pov1right Var.ButtonA16 = Joystick1.Button3 } end if; //Deck B if (Var.Deck=2) then { Var.ButtonB5 = Joystick1.button5 Var.ButtonB6 = Joystick1.Button6 Var.ButtonB7 = Joystick1.Button7 Var.ButtonB8 = Joystick1.Button8 Var.ButtonB9 = Joystick1.Button9 Var.ButtonB10 = Joystick1.Button10 Var.ButtonB11 = Joystick1.Button11 Var.ButtonB12 = Joystick1.Button12 Var.ButtonB13 = Joystick1.Button2 Var.ButtonB14 = Joystick1.pov1up Var.ButtonB15 = Joystick1.pov1right Var.ButtonB16 = Joystick1.Button3 } end if //Deck C if (Var.Deck=3) then { Var.ButtonC5 = Joystick1.button5 Var.ButtonC6 = Joystick1.Button6 Var.ButtonC7 = Joystick1.Button7 Var.ButtonC8 = Joystick1.Button8 Var.ButtonC9 = Joystick1.Button9 Var.ButtonC10 = Joystick1.Button10 Var.ButtonC11 = Joystick1.Button11 Var.ButtonC12 = Joystick1.Button12 Var.ButtonC13 = Joystick1.Button2 Var.ButtonC14 = Joystick1.pov1up Var.ButtonC15 = Joystick1.pov1right Var.ButtonC16 = Joystick1.Button3 } end if //Deck D if (Var.Deck=4) then { Var.ButtonD5 = Joystick1.button5 Var.ButtonD6 = Joystick1.Button6 Var.ButtonD7 = Joystick1.Button7 Var.ButtonD8 = Joystick1.Button8 Var.ButtonD9 = Joystick1.Button9 Var.ButtonD10 = Joystick1.Button10 Var.ButtonD11 = Joystick1.Button11 Var.ButtonD12 = Joystick1.Button12 Var.ButtonD13 = Joystick1.Button2 Var.ButtonD14 = Joystick1.pov1up Var.ButtonD15 = Joystick1.pov1right Var.ButtonD16 = Joystick1.Button3 } end if //Button Conversion midi.gsharp3 = Var.ButtonA5 midi.a3 = Var.ButtonA6 midi.asharp3 = Var.ButtonA7 midi.b3 = Var.ButtonA8 midi.e3 = Var.ButtonA9 midi.f3 = Var.ButtonA10 midi.fsharp3 = Var.ButtonA11 midi.g3 = Var.ButtonA12 midi.c3 = Var.ButtonA13 midi.csharp3 = Var.ButtonA14 midi.d3 = Var.ButtonA15 midi.dsharp3 = Var.ButtonA16 midi.gsharp4 = Var.ButtonB5 midi.a4 = Var.ButtonB6 midi.asharp4 = Var.ButtonB7 midi.b4 = Var.ButtonB8 midi.e4 = Var.ButtonB9 midi.f4 = Var.ButtonB10 midi.fsharp4 = Var.ButtonB11 midi.g4 = Var.ButtonB12 midi.c4 = Var.ButtonB13 midi.csharp4 = Var.ButtonB14 midi.d4 = Var.ButtonB15 midi.dsharp4 = Var.ButtonB16 midi.gsharp5 = Var.ButtonC5 midi.a5 = Var.ButtonC6 midi.asharp5 = Var.ButtonC7 midi.b5 = Var.ButtonC8 midi.e5 = Var.ButtonC9 midi.f5 = Var.ButtonC10 midi.fsharp5 = Var.ButtonC11 midi.g5 = Var.ButtonC12 midi.c5 = Var.ButtonC13 midi.csharp5 = Var.ButtonC14 midi.d5 = Var.ButtonC15 midi.dsharp5 = Var.ButtonC16 midi.gsharp6 = Var.ButtonD5 midi.a6 = Var.ButtonD6 midi.asharp6 = Var.ButtonD7 midi.b6 = Var.ButtonD8 midi.e6 = Var.ButtonD9 midi.f6 = Var.ButtonD10 midi.fsharp6 = Var.ButtonD11 midi.g6 = Var.ButtonD12 midi.c6 = Var.ButtonD13 midi.csharp6 = Var.ButtonD14 midi.d6 = Var.ButtonD15 midi.dsharp6 = Var.ButtonD16 // COMPILED CODE, PLEASE DELETE BEFORE COMPILING! |
Chasidy Heckenbach 30.05.2011 |
Originally Posted by derschaich
might be fun though... not sure how many buttons the gamepad has that i ordered (as i only need 8 since thats how many arcade buttons i bought) but if it has at least 12 i'd be able to do that out before pulling it apart and soldering to the 8 arcade buttons... combo.c in the mf firmware has the state table in - 44 elements - so 44 "if" statements in glovepie i guess shouldn't be too inefficient though as theres 37 different states and the only state that needs to check more than 1 or 2 button presses is the initial state. |
Allene Manitta 30.05.2011 | glovePIE script is done, will post when back at home, stay tuned! |
Chasidy Heckenbach 29.05.2011 | the instant gratification and deckalized mappings are here: http://www.djranking
s.com/midi-map/ with bomes you could setup translations from the output of the device you want to use as a controller to and from the input expected from a midi fighter. so if want the top left button of the midifighter (C-1 in 4deck mode) to be controlled via a key that sends out D-0 then you use bomes to do that translation - sending the result from bomes to a virtual midi port that is then what you'd select in traktor. two big advantages of doing it this way.... a) you'll be able to load any new mf mappings without modding them b) you'll only need to add one rule per note/cc event - rather than the "bugger knows how many times" you'd need to edit each note in the actual traktor tsi edit: you'll actually need to add a 2nd bomes mapping to get the led status back to your controller ofc |
Shane Gladfelder 29.05.2011 | Apologies for my ignorance but I don't know why Bomes will help me in my task. Also, could you provide a link to vanilla mf tsis. Much appreciated. |
Chasidy Heckenbach 29.05.2011 |
Originally Posted by mishmashmole
that was my theory above anyway. fyi - that image posted by fullenglishpint does seem correct as i found that on the community the other week and it's what i based my code on. |
Shane Gladfelder 29.05.2011 |
Originally Posted by fullenglishpint
I will be posting a mapping for the Remote SL 25 in due course. |
Chasidy Heckenbach 29.05.2011 | i've just got some code working that emulates the midifighter 4bank mode. the code might not be any use to anyone but the logic and note info in it might be. the function: Code:
any2mf_4banks_map = { ["select"] = { ["0,0"] = { ["note"] = "C-1", ["bank"] = 1 }, ["1,0"] = { ["note"] = "C#-1", ["bank"] = 2 }, ["2,0"] = { ["note"] = "D-1", ["bank"] = 3 }, ["3,0"] = { ["note"] = "D#-1", ["bank"] = 4 } }, ["banks"] = { { ["0,1"] = "G#2", ["1,1"] = "A2", ["2,1"] = "A#2", ["3,1"] = "B2", ["0,2"] = "E2", ["1,2"] = "F2", ["2,2"] = "F#2", ["3,2"] = "G2", ["0,3"] = "C2", ["1,3"] = "C#2", ["2,3"] = "D2", ["3,3"] = "D#2" }, { ["0,1"] = "G#3", ["1,1"] = "A3", ["2,1"] = "A#3", ["3,1"] = "B3", ["0,2"] = "E3", ["1,2"] = "F3", ["2,2"] = "F#3", ["3,2"] = "G3", ["0,3"] = "C3", ["1,3"] = "C#3", ["2,3"] = "D3", ["3,3"] = "D#3" }, { ["0,1"] = "G#4", ["1,1"] = "A4", ["2,1"] = "A#4", ["3,1"] = "B4", ["0,2"] = "E4", ["1,2"] = "F4", ["2,2"] = "F#4", ["3,2"] = "G4", ["0,3"] = "C4", ["1,3"] = "C#4", ["2,3"] = "D4", ["3,3"] = "D#4" }, { ["0,1"] = "G#5", ["1,1"] = "A5", ["2,1"] = "A#5", ["3,1"] = "B5", ["0,2"] = "E5", ["1,2"] = "F5", ["2,2"] = "F#5", ["3,2"] = "G5", ["0,3"] = "C5", ["1,3"] = "C#5", ["2,3"] = "D5", ["3,3"] = "D#5" } } } -- map mf notes back to our surface mf2any_4banks_map = {} for k,v in pairs(any2mf_4banks_map["select"]) do mf2any_4banks_map[v["note"]] = k for k2, v2 in ipairs(any2mf_4banks_map["banks"]) do for k3, v3 in pairs(any2mf_4banks_map["banks"][k2]) do mf2any_4banks_map[v3] = k3 end end end mf_4banks_curr_bank = {} function create_midifighter_4banks(rdev, rdevpage, vdev, off_color, on_color) -- set our current bank to 1 local mf_4banks_id = #mf_4banks_curr_bank + 1 mf_4banks_curr_bank[mf_4banks_id] = 1 for x=0,3 do for y=0,3 do btn = y..","..x -- init off color send_event(rdev, btn, off_color) -- map input to the virtual midifighter capture_event(rdev, btn, rdevpage, function(d, e, p, v) local curr_bank = mf_4banks_curr_bank[mf_4banks_id]; if any2mf_4banks_map["select"][e] ~= nil then -- save bank number and send message out to virtual mf mf_4banks_curr_bank[mf_4banks_id] = any2mf_4banks_map["select"][e]["bank"] send_event(vdev, any2mf_4banks_map["select"][e]["note"], v, 3) elseif any2mf_4banks_map["banks"][curr_bank][e] ~= nil then -- send the message out from a multi bank row (2,3,4) send_event(vdev, any2mf_4banks_map["banks"][curr_bank][e], v, 3) end end) -- route mf input back to real surface capture_event(vdev, any2mf_map[btn], 0, function(d, e, p, v) if mf2any_4banks_map[e] ~= nil then if v == 0 then send_event(rdev, mf2any_4banks_map[e], off_color) else send_event(rdev, mf2any_4banks_map[e], on_color) end end end) end end end Code:
open_midi_device("traktor", "traktor", "Traktor Output", "Traktor Input"); open_midi_device("launchpad", "launchpad", "Launchpad", "Launchpad", 8) open_midi_device("midifighter", "midifighter", "MidiFighter Input", "MidiFighter Output") create_midifighter_4banks("launchpad", 0, "midifighter", lp_lo_red, lp_hi_green) the plan is to add the ability to offset the virtual fighters and then have 2 normal mode MF'ers and two 4bank mode MF'ers on one launchpad page. edit: the code looks a bit complicated but 99% of it is run at startup time - only small snippets of code (the functions passed to capture_event()) actually get run when a button is pressed or traktor sends an event. |
Chasidy Heckenbach 29.05.2011 |
Originally Posted by derschaich
this is the mf normal mode not 4banks mode (which i'll have a play with in a bit). pasting here in case anyone else is doing something as mad as using lua or some other 'glue' to xlate between devices and/or in case the logic is any use. the 4banks mode shouldn't be much harder to do. still don't know what extra combo messages might get send by the mf though - or are all combos just from traktor modifiers etc? Code:
any2mf_map = { ["0,0"] = "C3", ["1,0"] = "C#3", ["2,0"] = "D3", ["3,0"] = "D#3", ["0,1"] = "G#2", ["1,1"] = "A2", ["2,1"] = "A#2", ["3,1"] = "B2", ["0,2"] = "E2", ["1,2"] = "F2", ["2,2"] = "F#2", ["3,2"] = "G2", ["0,3"] = "C2", ["1,3"] = "C#2", ["2,3"] = "D2", ["3,3"] = "D#2" } mf2any_map = {} for k,v in pairs(any2mf_map) do mf2any_map[v] = k end function create_midifighter(rdev, rdevpage, vdev, off_color, on_color) for x=0,3 do for y=0,3 do btn = y..","..x -- init off color send_event(rdev, btn, off_color) -- map input to the virtual midifighter capture_event(rdev, btn, rdevpage, function(d, e, p, v) if any2mf_map[e] ~= nil then send_event(vdev, any2mf_map[e], v, 3) end end) -- route mf input back to real surface capture_event(vdev, any2mf_map[btn], 0, function(d, e, p, v) if mf2any_map[e] ~= nil then if v == 0 then send_event(rdev, mf2any_map[e], off_color) else send_event(rdev, mf2any_map[e], on_color) end end end) end end end create_midifighter("launchpad", 0, "midifighter", lp_lo_red, lp_hi_green) |
Tatum Ansaldo 29.05.2011 |
Originally Posted by mishmashmole
|
Shane Gladfelder 29.05.2011 | OK thanks. So I need to read through all the banks figuring out the midi messages for each of the buttons. I take Bank A, map those, make a new page, take Bank B and map those and so on. Does someone not have a list of the midi messages with corresponding buttons and banks? I presume it's already been done... |
Tatum Ansaldo 29.05.2011 | there's no version of the IG mapping that does not require 4 banks mode. You can either map only one deck page of it to your controller, or set up pages (banks) on your controller if it supports that feature. |
Shane Gladfelder 29.05.2011 | That version is 1.0.2 - I was led to believe there was a version that didn't use 4 banks... I have mapped this one and it doesn't see to work on my controller |
Tatum Ansaldo 27.05.2011 | 3rd thread on the midifighter community
... http://www.djranking s.com/community /showthread.php?t=24514 |
Shane Gladfelder 27.05.2011 | Arrgghhh! I can't find an older version. Anyone? I have a gig in 12 hours time |
Tatum Ansaldo 26.05.2011 |
Originally Posted by mishmashmole
|
Allene Manitta 26.05.2011 | nope, you'd still have to trigger additional notes in certain combinations. I'm working on a simulation of the midi-fighter firmware for GlovePIE as we speak (or whatever this medium of communitcation is called). to convert any 16-button controller into a midi-fighter! |
Shane Gladfelder 25.05.2011 | I just thought... I could change the midi signals my Remote SL sends to match the ones of the Midifighter... That would work wouldn't it? |
Kecia Wnukowski 24.05.2011 | If I'm not mistaken, banks are like pages if you want. So to adapt the MF mapping you'll have to use modifiers and depending on those modifiers, you may assign fx units to different decks. This article may also help you to adapt it to your own controller as unlike your controller you may not have (probably not) a 5 fifth note sent after pressing 4 buttons: http://www.djranking s.com/2011/02/0...rs/#more-10799 |
Shane Gladfelder 23.05.2011 |
Originally Posted by derschaich
My theory was this: - I go into MF_FX 4 Banks A - I order the column "Mapped to" by clicking on the header. This puts all the midi notes in order thus making them easier to change. - The first note I found was "G2" which related to Beatmash 4. - I clicked in learn and changed all the "G2" to a key on my controller. - I continued and changed all the Beatmash mappings for Bank "A". - At this point I thought it would work - I'm wrong. - Pressing my beatmash keys only made delay kick in on FX2 1. I don't understand about the banks. I thought I could change all the mappings for Bank A and change Device Target to "focus". 2. I'm not new to this but I do it so infrequently it always feels like starting from new again. 3. Any help or advice would be appreciated. |
Allene Manitta 23.05.2011 |
Originally Posted by Yul
+ custom firmware for midifighters (additional notes triggered if you combinate certain buttons) I'm working on an emulation of this firmware for GlovePIE to go nuts on any 16 button controller (MPC etc...) |
<< Back to Post and find Controller MappingsReply