Sign In:     


Forum: General Discussion

Topic: Remapping All EQ Knobs/Isolating Controller "Activity" by its Associated Channel
It seems that any of the knobs or buttons that have a mirror on my Traktor Kontrol S3 from the left side to the right side of the controller show up in the "Activity Window" inside of the custom mapping section for my controller as a generic label. ie. the jog wheel just shows up as 'jog' or 'jog_touch', the EQ knobs all show up as 'eq_hi' 'eq_mid' and 'eq_low' rather than explicitly allowing me to remap the EQ knob for a specific frequency on a specific channel.

There must be some way to specify what it is that I want to remap, after all, how is Virtual DJ able to tell when I touch my left jog wheel vs my right jog wheel?

Maybe the issue is in the code that I attach to the button/knob. For example, in an attempt to remap the low eq knob on channel C aka 3, I created the following code as a test to see how to get this to work: deck 1 eq_high

Only issue is, with this code applied to the key EQ_LOW, all of the low eq knobs now reflect this new mapping. Regardless of the fact that when I selected the key in the action window, I was twisting the low eq knob on channel 3.

I'd greatly appreciate any help or insight that can be given. Please let me know if you have any questions.

Sincerely
 

Posted Sat 20 Sep 25 @ 6:44 pm
action_deck 3 ? deck 1 eq_high : eq_low
 

Or better yet:

Consider that VirtualDJ uses the same name for all the controls that do the same thing (but on a different deck)

When you remap a button, let's say PLAY button, you don't have to map 4 different PLAY buttons(PLAY1, PLAY2, PLAY3 and PLAY4) 4 times (deck 1 play_pause, deck 2 play_pause, deck 3 play_pause and deck 4 play_pause).
That's the most inefficient way to do things.
Instead it passes the deck as an implicit parameter:

When VirtualDJ says "PLAY" on the activity window it also passes the deck that caused it to change state.
So it says "PLAY" but it knows it's actually "deck 3 PLAY"
Then when it looks at your mapping (the code of what to do) it passes the deck number to it.
So, you the user type "play_pause" but the program understands "deck 3 play_pause"

That's how 99,9% of mapping works.
Now on the rare occasion that you want different actions between same controls for different decks (e.g. deck 3 eq_low behave differently than deck 1 eq_low) you have to "split" the controls by using the formula locoDog gave above.

In a nutshell, you ask VirtualDJ to do different things based on the deck that caused the action be triggered.
So, action_deck X ? is the key factor. It "asks" the button/knob if deck "X" caused it to appear on monitor activity window. If the answer is true, VirtualDJ performs the FIRST part of the code (deck 1 eq_high) else it performs the second (eq_low)
Remember, that asking if a knob's movement was initiated from a deck doesn't actually change how VirtualDJ still passes the deck number to the action.
That's why we had to type deck 1 eq_high and not just eq_high.
For the rest decks we opted to leave the default behavior unchanges, and thus we didn't use "deck Y" in front of eq_low.

If it sounds too complicated, then include deck on every action and use the following template:

action_deck 1 ? deck X action : action_deck 2 ? deck Y action : action_deck 3 ? deck Z action : action_deck 4 ? deck H action
 

Locodog and Phantomdeejay, thank you so much!!

This is really exciting information. I'll be sure to share some of the stuff I'm making once I get it to a certain point!