[Numark Mixtrack] [Traktor] - Help With Making Loop Roll Logic
#edit :: Massive, massive freudian slip with the title. THIS IS LOOP ROLL, NOT REMIX DECK LOGIC. Can an admin change the thread title to reflect this post title…?
I’m finally working on finishing my Mixtrack mapping, found here : DJ TechTools - Aleeway's Mega Mixtrack Mapping **OLD**
I intended on finishing and polishing my loop roller mapping, but for the life of me, I’m having a REALLY hard time figuring out how to do it in Traktor’s limited mapping language. If you want to tackle an interesting mapping problem…read on.
It’s set up so I have a shift button (M1) that engages Flux Mode and causes the loop buttons to command Loop Roll instead of standard loop commands (one of many shift features). Each deck’s loop roller function is implemented in its own separate mapping file, because there’s too many variables that I need to use.
I want it set up so that the loop roll has an adaptive memory function. Here’s how I want it to work.
You engage loop roll mode. You engage a 1 beat loop. You think, this needs more excitement, lemme half it to a 1/2 beat, then release 1/2 beat and bring it back to 1 beat, press, release, press release. Let’s make it more exciting, bring it down to a 1/4 beat, then a 1/8 beat. Too fast! Wait, lemme think, this could be interesting, I’ll let go of 1/4 beat and skip right back to 1/2 beat and do the 1 beat 1/2 beat alternating thing again.
That or whatever you imagination can dream of that Serato can do with its loop roll
#djlogic
Anyways, I’ve been knocking my head in figuring this out the past 2 days that I’m coming here for advice, if you want to bear with a traditional programmer trying to have some fun ![]()
Here’s how I have it set up in words.
Mod 1 is the shift mode button. If the shift button is held, sets to 1.
Mod 2 enumerates how many buttons are held at once.
- If a button is PRESSED while Mod 1 is 1, Mod 2 increases released
- If a button is RELEASED while Mod 1 is 1, Mod 2 is decreased
Mods 3 4 5 6 are assigned to each button, and dictates what order priority the buttons have. - Button 1 corresponds to Mod 3
- Button 2 corresponds to Mod 4
- Button 3 corresponds to Mod 5
- Button 4 corresponds to Mod 6
- DIRECT (button pressed) assignments are made based on Mod 2. The value assigned is whatever Mod 2’s value plus one. If Mod 2 is 1 (one button pressed), and a button is pressed, that button’s corresponding modifier is assigned 2, to indicate it is the second button pressed. Now, Traktor doesn’t HAVE AN IF FUNCTION, so the entire table is actually written out in the mapping…
- INVERSE (button released) assignments are based on every modifier’s value, and Mod 2. If a button is released, ITS SPECIFIC modifier value drops to 0, regardless. When a button is released, however, the values of the other modifiers DEPENDS. If the button released is smaller than the current M2 value, any modifier ABOVE that button’s previous modifier value DROPS by one.
i.e. here’s a table illustrating one case. Button 1, 2, 3, 4, are pressed in that order. Button 2 is released. Note how the #'s reorder themselves as appropriate.
M1 M2 M3 M4 M5 M6
1 0 0 0 0 0
1 1 1 0 0 0
1 2 1 2 0 0
1 3 1 2 3 0
1 4 1 2 3 4
1 3 1 0 2 3
Loop length changes (DIRECT) - When a button is pressed, assign the appropriate length.
Button 1 cues a 1/8 loop, 2 cues a 1/4 loop, 3 cues a 1/2 loop, 4 cues a 1 beat loop.
::Loop length changes (INVERSE)::
THE PROBLEM I’m running into is how I call the loop length changes when a button is RELEASED.
I originally just made it match M2 minus 1 and M3/M4/M5/M6 (i.e. pick the value one less), which worked if you pulled the keys out in order. But the problem lies in if you pull the keys out of order. Look at the table again.
M1 M2 M3 M4 M5 M6
1 0 0 0 0 0
1 1 1 0 0 0
1 2 1 2 0 0
1 3 1 2 3 0
1 4 1 2 3 4
(this is with the last line omitted)
If you release a button now, the loop length would call up and look for one less than M2 (value three), which corresponds to button 5 (value three as well), a 1/2 loop. This works if you released button 4. But what if you released button 2? It STILL cues up that 1/2 loop. You can see that this is incorrect, the loop that is active must be button 4 (highest value), not button 3.
M1 M2 M3 M4 M5 M6
1 3 1 0 2 3
(this is the last line of the table)
Basically I just cant, figure out a darn way to defer the loop length call if you release the buttons out of order. I’ve tried swapping around M2 to a new unique state when you release a button out of order, M2 getting states 5 and 6, but that doesn’t stop M2 from being what it is when you release a button and calling loop length incorrectly. What I NEED, is a third condition in traktor…so I can confirm for instance, M2=4=M6, M4=3, and build a giant condition table for WHEN the loop length can specifically call…
If you’ve beared to read thru this…any ideas? I’ve been stuck on this for a few days, heh, another brain would be awesome.
If you want to see the work in progress mapper, with all its truth table glory, I could upload a proto build of it right now.