Mapping the Traktor Loop Recorder
The loop recorder section of the S4 controller mimics the loop recorder of the Traktor user interface one by one. The mapping commands Traktor provides make it quite easy to build a mapping for the loop recorder and use it either in a user mapping for the S4 or with any other controller.
However, there is a small problem with the Del/Undo/Redo functionality. The Traktor user interface and the S4 controller only offer one button for each of the three actions. But two different mapping commands are provided to map the functionality to the controller. The embedded mapping for the S4 controller allows access to all three actions by means of one button, without that
the SHIFT button needs to be pressed. Is it possible to recreate the same behaviour in an S4 user mapping or in a mapping for another controller? Unfortunately not.

The In Commands
The previous image shows the mapping for the In commands for the loop recorder. The mapping is quite straight forward and contains nothing special. In order to map the delete and the undo/redo functionality to the same button, you need to use a modifier. The assignment table shows that Modifier #6 is used. The modifier value can be set to 1 either with the left or right Shift button on the S4 controller. If M6 is 0, then pressing the Delete button on the S4 triggers the delete action; if M6 is 1 then the Undo/Redo action is triggered.
The embedded S4 mapping is able to check the condition even without using a Shift button. The embedded mapping can also access the status of the loop recorder as the Undo/Redo status. Both pieces of information are available in your own mapping, but only as an Out command and not as an extended modifier condition. If Native Instruments had provided both status values as modifier conditions (similar to the state values for the sample slots), we could have mapped one button like shown in the following table:
| Command | Button in User Interface | Loop Recorder Status | Undo Status |
| Loop Recorder Delete |  | Recorder State = 1 | Undo State = 0 |
| Loop Recorder Undo/Redo |  | | Undo State = 1 |
| Loop Recorder Undo/Redo |  | | Undo State = 2 |
It would then have been very easy to map all three actions to one button. I do not understand the reason why this status information is not available as modifier conditions. This would have made creating a user mapping for the S4 and for other controllers much more easy. The fact that the current implementation needs to use a Shift modifier should be known to Native Instruments, as the S4 user mapping included with Traktor Pro S4 uses the same approach.
Reflecting the current enabled/disabled Status of the Buttons
The second interesting question that arises with this mapping is, how to ensure that the current enabled/disabled status of the buttons in the user interface is reflected on the controller. This is easy for the buttons Record and Play as both buttons are always enabled in the Traktor user interface. However, for the Play button this makes no sense, as it should only be enabled if the loop recorder contains audio that can be played. To avoid confusion I’ll close my eyes and pretend that this bug does not exist: I map the out commands Loop Recorder Play/Pause and Loop Recorder Record to the corresponding LEDs on the S4 controller.
Let’s now have a look at the buttons Size and Del/Undo/Redo. Both buttons are only enabled if certain conditions are true.
The Size Button
The Size button can only be used if the loop recorder is empty. This information can be accessed with the Out command Loop Recorder State = 0. To ensure that the Size button is lit only if the loop recorder does not contain audio, add the out command Loop Recorder | State and select the S4 button Center.LoopRec.Size as target for this command. Then go to the Controller Range section and enter a zero for Min as well as for Max. This mapped command makes certain, that the LED button is lit only if Loop Recorder | State has a value of 0. The Controller Manager dialog for this command should look like this:

The Del and Undo/Redo Buttons
In a similar way we can control the On/Off status of the Del button. Because of the doubled functionality of the button for Del and Undo/Redo we need to output the Loop Recorder | State as well as the Loop Recorder | Undo State to this button:
- Whether Delete is currently possible or not depends if M6 has an output value of 0 (i.e. none of the Shift buttons is pressed). The on/off state of the LED depends on the value of the out command Loop Recorder | State.
- Whether Undo/Redo is currently possible or not depends if M6 has an output value of 1 (i.e. one of the Shift buttons is pressed). The on/off state of the LED depends on the value of the out command Loop Recorder | Undo State.
The following table summarizes the information needed to implement this mapping:
| LED Button | Functionality/ Button is active if | Corresponding State Values | Button mapped to | Modifier |
| Size | Set Loop Length Loop recorder is empty | Loop Recorder | State = 0 | Loop Recorder | State Controller Range Min = 0 Controller Range Max = 0 | - |
| Del | Delete Loop recorder is not empty and paused | Loop Recorder | State = 1 | Loop Recorder | State Controller Range Min = 1 Controller Range Max = 1 | M6=0 |
| Del | Undo Undo function allowed Redo Redo function allowed | Loop Recorder | Undo State = 1 Loop Recorder | Undo State = 2 | Loop Recorder | Undo State Controller Range Min = 1 Controller Range Max = 2 | M6=1 |
The mapping for the Out command Undo State looks like this in the Controller Manager dialog:

Written by Rainer G. Haselier
Taken from Traktor 2 Bible
Last update: April 16, 2011
3 Comments