Traktor Pro mix template for the KORG nanoKEY/nanoKONTROL Studio MIDI controllers.
Includes Ableton Live starter file with mixer and 4 channel sampler.
I've documented this for my own benefit, but please help yourself to any part you find useful.
This project is no longer maintained - please see version 2.
The purpose of this setup is to replace Traktor Pro’s Remix Decks and Loop Recorder with Ableton Live.
Traktor Pro’s Remix Decks mostly work fine when resampling directly from a deck.
However when keylock pitching is used, the recorded pitch often does not match the source deck.
To capture global FX like reverb and gating, Traktor Pro’s Loop Recorder must be used.
The Loop Recorder is problematic because it records loops slightly too long. Samples glitch on repeat and drift out of sync with the source material.
- Physical Sound Card:
- Macbook Pro (15-inch, 2018 / macOS v10.15.7)
- External Headphones (headphones or Minirig plugged into headphone jack)
- Virtual Sound Card:
- DJ Decks and MIDI Clock:
- Mixer and Sampler:
- Controller Mapping:
- Controller Overlay:
- Mix Recorder:
- Launch Script:
- Further Reading
This setup is for the internal sound card on my Macbook Pro.
As my Native Instruments Z1 is in storage, the output goes directly to headphones and there is no separate output for cueing.
- Product: https://rogueamoeba.com/loopback/
- Version: 2
Loopback allows additional stereo pairs to be added to an existing sound card. These pairs can then be used for internal routing via input and output settings in Traktor Pro and Ableton Live.
Some web tutorials use Jack Audio instead. I prefer Loopback’s routing UI.
In order to be able to choose which Traktor Pro deck to sample from, both decks are routed to Ableton Live.
loopback/Devices.plist
Automatically loaded by the AppleScript app.
- Product: https://www.native-instruments.com/en/products/traktor/dj-software/traktor-pro-3/
- Version: 3.4.2
- Product: https://www.ableton.com/en/live/
- Version: 10
ableton-live/traktor-live Project/traktor-live.als
Contains a 4 channel mixer and a 4 channel sampler.
Automatically loaded by the AppleScript app, otherwise double-click to load.
- Driver Type:
CoreAudio
- Audio Input Device:
Traktor Live v1 (6 In, 6 Out)
- Audio Output Device:
Traktor Live v1 (6 In, 6 Out)
- Channel Configuration
- Input Config:
3/4: Traktor Pro Deck A
5/6: Traktor Pro Deck B
- Output Config:
1/2: Live Out
- Input Config:
- Click
Ext
so that it lights up - Ableton Live will now follow the Sync source (Traktor Pro Virtual Output) - the AppleScript app does this automatically - Global launch quantisation:
None
(punching in exactly when you want seems most reliable)
- A1TriggerGate (v1.4)
- Product: https://www.bome.com/products/miditranslator
- Version: 1.9.0
Bome MIDI Translator Pro is used to filter the MIDI messages sent by controllers, before they reach Ableton Live.
- Channels 1-8: Split encoder value range across 3 channels
- Channels 1-4
SELECT
: Focus Traktor Pro - Channels 5-8
SELECT
: Focus Ableton Live
- MIDI filters:
bome-midi-translator-pro/nanoKONTROL Studio.bmtp
- Application settings:
bome-midi-translator-pro/settings.bmts
The .bmtp
file is Automatically loaded by the AppleScript app, otherwise double-click to load.
- Control Surface:
ClyphX Pro XTA
- Input:
Bome MIDI Translator 1
- Track:
Off
- Sync:
Off
- Remote:
Off
- Track:
- Output:
None
X-Controls.txt
- Source:
clyphx-pro/ClyphX_Pro/XTA/X-Controls.txt
- Target:
/Users/You/NativeKONTROL/ClyphX_Pro/XTA/X-Controls.txt
- Source:
These map MIDI controls to Ableton Live's interface and provide LED feedback.
I symlink the target files to the source files, but you can simply copy them over the top.
Control surface editor.
- Product: https://www.korg.com/us/products/computergear/nanokey_studio/
- Version: 1.08
- Control Surface:
ClyphX Pro XTC
- Input:
nanoKEY Studio
- Track:
On
- Sync:
Off
- Remote:
On
- Track:
- Output:
nanoKEY Studio
- Track:
On
- Sync:
Off
- Remote:
On
- Track:
- The scene's data:
korg-kontrol-editor/traktor-live-v1.nanokey_st_data
- Set containing all scenes:
korg-kontrol-editor/traktor-live-v1.nanokey_st_set
Double-click to open the set files, then select Communication > Write Scene Data.
Encoder Bindings.txt
- Source:
clyphx-pro/ClyphX_Pro/XTC/Encoder Bindings.txt
- Target:
/Users/You/NativeKONTROL/ClyphX_Pro/XTC/Encoder Bindings.txt
- Source:
These map MIDI controls to Ableton Live's interface and provide LED feedback.
I symlink the target files to the source files, but you can simply copy them over the top.
- Product: https://www.korg.com/us/products/computergear/nanokontrol_studio/
- Version: 1.05
- Control Surface:
ClyphX Pro XTB
- Input:
nanoKONTROL Studio
- Track:
On
- Sync:
Off
- Remote:
On
- Track:
- Output:
nanoKONTROL Studio
- Track:
On
- Sync:
Off
- Remote:
On
- Track:
- Set:
korg-kontrol-editor/traktor-live-v1.nktrl_st_data
- Data:
korg-kontrol-editor/traktor-live-v1.nktrl_st_data
Double-click to open the set files, then select Communication > Write Scene Data.
Button Bindings.txt
- Source:
clyphx-pro/ClyphX_Pro/XTB/Button Bindings.txt
- Target:
/Users/You/NativeKONTROL/ClyphX_Pro/XTB/Button Bindings.txt
- Source:
Encoder Bindings.txt
- Source:
clyphx-pro/ClyphX_Pro/XTB/Encoder Bindings.txt
- Target:
/Users/You/NativeKONTROL/ClyphX_Pro/XTB/Encoder Bindings.txt
- Source:
G-Controls.txt
- Source:
clyphx-pro/ClyphX_Pro/XTB/G-Controls.txt
- Target:
/Users/You/NativeKONTROL/ClyphX_Pro/XTB/G-Controls.txt
- Source:
X-Controls.txt
- Source:
clyphx-pro/ClyphX_Pro/XTB/X-Controls.txt
- Target:
/Users/You/NativeKONTROL/ClyphX_Pro/XTB/X-Controls.txt
- Source:
These map MIDI controls to Ableton Live's interface and provide LED feedback.
I symlink the target files to the source files, but you can simply copy them over the top.
The following files cannot be symlinked and need to be manually copied over:
SelectedTrackLedStates.py
- Source:
traktor-live-v1/clyphx-pro/user_actions/SelectedTrackLedStates.py
- Target:
/Applications/Ableton Live 10 Standard.app/Contents/App-Resources/MIDI Remote Scripts/ClyphX_Pro/clyphx_pro/user_actions/SelectedTrackLedStates.py
- Source:
SelectTraktor ProDeck.py
- Source:
traktor-live-v1/clyphx-pro/user_actions/SelectTraktor ProDeck.py
- Target:
/Applications/Ableton Live 10 Standard.app/Contents/App-Resources/MIDI Remote Scripts/ClyphX_Pro/clyphx_pro/user_actions/SelectTraktor ProDeck.py
- Source:
- ClyphX Pro
- Product: https://isotonikstudios.com/product/clyphx-pro/
- Version: 1.2.0
- ClyphX Pro Ableton Live Hotfix:
- ClyphX Pro Bindings
- ClyphX Pro G-Controls
- ClyphX Pro Shift Action
The default ClyphX Pro 'controller' is primarily used to sync MIDI clock between Traktor Pro and Ableton Live.
Additionally, ClyphX Pro is sometimes used to send scripted MIDI messages to Traktor Pro. When this is done, channel 16
is used to make it clear that Traktor Pro is being targetted.
Note: MIDI Clock Sync Delay
was initially set using Traktor Pro's internal mixer, with Cue out used to sync Traktor Pro and Ableton Live's metronomes. Ableton Live now functions as the external mixer and syncing does not appear to be an issue anymore.
- Button Binding (Controller) - Defined in
Button Bindings.txt
, binds a MIDI control to a Live parameter (without specifying an Action List); supports LED feedback (which an X-Control doesn't) - Encoder Binding (Controller) - Defined in
Encoder Bindings.txt
, binds a continuous MIDI control to a continuous Live parameter (without specifying an Action List) - G-Control (Controller) - Defined in
G-Controls.txt
, similar to an X-Control, but supports additional gestures; doesn't support Variables - Macro (Global) - Defined in
Macros.txt
, shorthand for a list of actions; supports Variables - Startup Actions (Global) - X-Trigger defined in
Preferences.txt
, triggers actions when Live opens - User Actions (Global) - Custom Python scripts which allow for conditional creation and triggering of Actions / Action Lists based on the state of the LOM (Live Object Model); supports Variables
- Variable (Global) - Defined in
Variables.txt
, shorthand for a string value - X-Clip (Global) - X-Trigger in the form of a Live clip, triggers actions when launched
- X-Cue (Global?) - X-Trigger in the form of a Live locator, triggers actions when passed
- X-Scene (Global?) - X-Trigger in the form of a Live scene, triggers actions when launched
- X-Control (Controller) - X-Trigger defined in
X-Controls.txt
, targetting a MIDI control which triggers an actions when used - X-OSC (Controller?) - X-Trigger defined in
X-OSC.txt
, targetting an OSC address which triggers when receiving a value - X-Trigger - Event that triggers scripted Action Lists. These can include MIDI commands which affect Live (and Traktor, via the MIDI Channel set up to output to the Traktor Pro Virtual Input)
- XT Script - Adds support for an additional MIDI controller, defined in a sub folder containing ClyphX Pro scripts for that controller
- Control Surface:
ClyphX Pro
- Input:
Traktor Pro Virtual Output
- Track:
Off
- Sync:
On
- Remote:
Off
- Track:
- Output:
Traktor Pro Virtual Input
- Track:
Off
- Sync:
Off
- Remote:
Off
- Track:
- Takeover Mode: Value Scaling
Macros.txt
- Source:
clyphx-pro/ClyphX_Pro/Macros.txt
- Target:
/Users/You/NativeKONTROL/ClyphX_Pro/Macros.txt
- Source:
Preferences.txt
- Source:
clyphx-pro/ClyphX_Pro/Preferences.txt
- Target:
/Users/You/NativeKONTROL/ClyphX_Pro/Preferences.txt
- Source:
Variables.txt
- Source:
clyphx-pro/ClyphX_Pro/Variables.txt
- Target:
/Users/You/NativeKONTROL/ClyphX_Pro/Variables.txt
- Source:
These map MIDI controls to Ableton Live's interface and provide LED feedback.
I symlink the target files to the source files, but you can simply copy them over the top.
Part of Traktor Pro 3: https://support.native-instruments.com/hc/en-us/articles/209590569-How-to-Use-the-Controller-Manager-in-TRAKTOR
Various .tsi
templates map the control surfaces and supporting software to Traktor Pro's interface / API.
- Preferences > Import >
traktor-pro/traktor-live-v1.tsi
- Offset:
0 Ms
(top of mixer section)
The worst part about customising generic MIDI controllers is remembering what everything does.
This situation can easily be resolved with sticky labels, but these become incorrect if you switch to different software.
Another option is to use a dynamic interface on e.g. an iPad. But while this liberates you from the laptop screen, it leaves you staring at the iPad's screen instead - you don't want that finger to inadvertedly slide off the control in the middle of a mix!
So I created physical overlays for my physical controllers. These can be switched out quickly. They look nice and they are great for protoyping and memory retention.
Note: You can also buy physical overlays online, if they make them for your controller and if you are ok with the carbon footprint of getting small packages sent from the other side of the world (I live in New Zealand).
The process to generate an overlay is as follows:
- Extract SVG files from owner manuals (bundled Inkscape SVGs)
- Load the SVGs into cutting machine software
- Identify the 'pen' versus 'cut' lines
- Precision draw/cut the file using a cutting machine
- Peel the cut card off the cutting mat and the cut sections will separate
- Handwrite text labels describing what each control does
- Remove any blocking controls (e.g. fader handles) from the controller
- Slide the overlay over the top of the controller
- I also cut a plastic sheet to protect the cut card(s) below
- Reattach any blocking controls onto the controller
My cutting machine does have a pen attachment, but I use this sparingly as 'pen' lines for text labels add complexity to the file and dramatically increase loading times.
When I have nailed down the functionality, I'll do a 'print and cut' - printing the labels and patterns at a print shop, then cutting the holes for the controls.
- Product: https://inkscape.org/
- Version: 1.0.2
Inkscape is a cross-platform vector editor.
- KORG nanoKEY Studio
- Owner manual: https://www.korg.com/us/support/download/manual/0/551/2967/
- SVG:
svg-overlays/nanokey-inkscape.svg
- KORG nanoKONTROL Studio
- Owner manual: https://www.korg.com/us/support/download/manual/0/552/2911/
- SVG:
svg-overlays/nanokontrol-inkscape.svg
After locating and downloading the owner manuals, I optimised the vector graphics to create reliable cut files:
- File > Import
- Select page
- Internal import
- Uncheck 'replace fonts & embed images'
- Precision: 2.0 (default)
- Fix dimensions
- Select objects on page
COMMAND + G
to group- Transform > Scale
- Set width and height to the dimensions in the owner manual
- Scale proportionally
- Outline the physical controls
- View > Display mode > Outline
- Double-click parts to edit them directly
- Use
+
/-
to zoom in/out - Click near letters, click inside shapes
- Use
delete
to delete lines that won't be cut - Use node editing tools to ensure that cut paths are unbroken
- Edit objects
- Object > Objects...
- Maximise the panel (close other panels)
- Click 3D rectangle layer icon to select that object
- Select all g... objects and ungroup them
- Delete all g... layers (empty groups)
- Optimise one of each individual control (e.g. channel strip)
- Group each individual control
- Use guides to position copies of these in their original positions
- Export SVG
- Cricut Maker
- Product: https://cricut.com/en_us/machines/cricut-maker-machines/cricut-maker.html
- Version: 2017
- Cricut Design Space
- Product: https://design.cricut.com/
- Version: 6.12.227
The Cricut Maker is a consumer level cutting machine.
Cricut Design Space is the companion software for the Cricut range.
- Launch Cricut Design Space
- Import bundled SVG
- Mark each object as 'pen' (draw) or 'cut' (cut)
- Select top level group > Attach (to print the layout as you intended)
- Select top level group > Set dimensions to match Inkscape file
- Wait a long time for the project to load
- Load the mat and cardboard into the machine
- Draw the 'pen' lines
- Cut the 'cut' lines
- Product: https://rogueamoeba.com/audiohijack/
- Version: 3
While Ableton Live can be used to record the evolving mix and any automation, the playback head jumps to the beginning of the arrangement timeline when Traktor Pro is requested to send a Master Clock Sync message to Ableton Live.
This runs the risk of overwriting existing audio later in the mix.
One solution is to use an external recording app, however free macOS apps provide limited control over what can be recorded.
For example, Quicktime can't distinguish between the individual channels used by the Loopback device, while Audacity can only record all of them at once.
Audio Hijack offers two alternatives to this:
- record directly from an application (e.g. Ableton Live)
- record from specific virtual output channels (e.g. channels 1+2 of a Loopback device)
In addition Audio Hijack makes it clear when it is recording, by optionally displaying level meters in the macOS menu bar.
audio-hijack/traktor-live-v1.ahsession
Automatically loaded by the AppleScript app, otherwise double-click to load.
- Product: https://support.apple.com/guide/script-editor/welcome/mac
- Version: macOS Catalina
applescripts/Traktor_Live_v1.app
Double-click to run and:
- launch the applications used in this template
- load application configuration files
- send key strokes to trigger application menus
- Press
Select
on Channel1
or4
(this sets the recording source to Traktor Pro's DeckA
orB
) - Press
Select
on Channel5
,6
,7
,8
(this sets the target Ableton Live channel for sampling) - Press the
Record
button to start recording immediately - 4 bars of audio will be recorded
Press the sync button to sync playback with Traktor Pro.
System Events got an error: Traktor_Live_v1 is not allowed to send keystrokes.
System Events are used to send keystrokes to apps and find out how big to make windows when they are 'maximised'.
When prompted to allow Traktor_Live_v1 to access System Events.app, click 'OK'.
System Events got an error: Traktor_Live_v1 is not allowed assistive access.
The Accessibility screen in System Preferences allows apps to control your computer.
When prompted to give Traktor_Live_v1 assistive access:
System Preferences > Security & Privacy > Privacy > Accessibility > Traktor_Live_v1.app
(add and enable)