Instant Gratification - mapping to my controller

Home :: Post and find Controller Mappings :: Instant Gratification - mapping to my controllerReply
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
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!
well guys, bad news:

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
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.
the glovepie code doesn't (yet) include the super combos from the midi fighter firmware.
Chasidy Heckenbach
05.06.2011
Originally Posted by derschaich
just got the code from the original MF-Firmare. i don't understand the language jet, but i believe i will get this figured out pretty soon. i only have the conditions for triggering the combos, but not the output messages for each combo... anyone tell me the midi-messages? - would be dope!
same question as i asked 3 posts ago in this thread. e.g: the mf sends sends out '8' for combo 'a' but couldn't quite work out the correct note offset when i looked at the firmware.

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
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
just got the code from the original MF-Firmare. i don't understand the language jet, but i believe i will get this figured out pretty soon. i only have the conditions for triggering the combos, but not the output messages for each combo... anyone tell me the midi-messages? - would be dope!
Chasidy Heckenbach
31.05.2011
Originally Posted by derschaich
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.
ah - then mine only has 8 buttons + start + select + the xy buttons. i'm just playing with your mapping to use the 8 buttons + xy as 12 buttons and then start+select as the first two on the top row of a midi fighter. does mean i cant press more than two of the xy ones together - but this is only to play with your script as i'll only be creating an 8 button arcade controller from this for the time being.

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!
for starters you could send the combo message on note just when all the right buttons are pressed together, i.e: make them all like combo b which doesnt care about the order the buttons are pressed in, which would at least make the glovepie script simpler.

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
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.
excellent timing as my gamepad turned up about an hour ago

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
glovePIE script is done, will post when back at home, stay tuned!
might be cool to add the super combo messages to it too - or have you already done that? might be a bit complicated to add via glovepie though as it doesnt support any type of data structures so it would have to be a whole heap of "if" type statements.

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
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!
well guys, bad news:

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
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.
the glovepie code doesn't (yet) include the super combos from the midi fighter firmware.
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!
even the combos should work with the old MF TSI (1.0.2)

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
just got the code from the original MF-Firmare. i don't understand the language jet, but i believe i will get this figured out pretty soon. i only have the conditions for triggering the combos, but not the output messages for each combo... anyone tell me the midi-messages? - would be dope!
same question as i asked 3 posts ago in this thread. e.g: the mf sends sends out '8' for combo 'a' but couldn't quite work out the correct note offset when i looked at the firmware.

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
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
just got the code from the original MF-Firmare. i don't understand the language jet, but i believe i will get this figured out pretty soon. i only have the conditions for triggering the combos, but not the output messages for each combo... anyone tell me the midi-messages? - would be dope!
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
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.
ah - then mine only has 8 buttons + start + select + the xy buttons. i'm just playing with your mapping to use the 8 buttons + xy as 12 buttons and then start+select as the first two on the top row of a midi fighter. does mean i cant press more than two of the xy ones together - but this is only to play with your script as i'll only be creating an 8 button arcade controller from this for the time being.

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!
for starters you could send the combo message on note just when all the right buttons are pressed together, i.e: make them all like combo b which doesnt care about the order the buttons are pressed in, which would at least make the glovepie script simpler.

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
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.
excellent timing as my gamepad turned up about an hour ago

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
glovePIE script is done, will post when back at home, stay tuned!
might be cool to add the super combo messages to it too - or have you already done that? might be a bit complicated to add via glovepie though as it doesnt support any type of data structures so it would have to be a whole heap of "if" type statements.

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
THANK YOU!

I will be posting a mapping for the Remote SL 25 in due course.
you could always use bomes to do translation and then you can use the vanilla mf tsi's? also means ofc any new ones you can then use without any effort at all.

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
http://www.djranking s.com/community /attachment.php?attachmentid=5475&stc=1&d=130666419 0
THANK YOU!

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
then i just use these lines to set it up using lo red for off and green for lit up leds:

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)
seems to work ok - but it's going to take me a while to understand this midifighter IG mapping

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
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!
i'd be keen to see your glovepie script once done. today i've just written a lua script for my homebrew midimashing app to add a virtual midifighter to a page on my launchpad. it uses a 2extra midifighter virtual midi ports in loopMIDI so i can connect those to traktor while also using other output from the lp for other stuff etc.

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
Does someone not have a list of the midi messages with corresponding buttons and banks? I presume it's already been done...
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
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?
To an extent. The firmware quirks for super combos in the IG mapping are a very new thing, If you find an older version of it they're all controlled by modifiers so yes, you could do that.
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
this

+ 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...)
I didn't really understand what you wrote until I looked I started to change the mapping.

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
nope you can't. Welcome in the very boring world of Traktor's controller manager.
this

+ 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

Copyright 2012-2023
DJRANKINGS.ORG n.g.o.
Chuo-ku, Osaka, Japan

Created by Ajaxel CMS

Terms & Privacy