Giter Club home page Giter Club logo

traktor-live-v1's Introduction

Traktor Live v1

GitHub release GitHub issues

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.


Purpose

The purpose of this setup is to replace Traktor Pro’s Remix Decks and Loop Recorder with Ableton Live.

Replace Traktor Pro’s Remix Decks

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.

Replace Traktor Pro’s Loop Recorder

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.


Components

  1. Physical Sound Card:
    • Macbook Pro (15-inch, 2018 / macOS v10.15.7)
    • External Headphones (headphones or Minirig plugged into headphone jack)
  2. Virtual Sound Card:
  3. DJ Decks and MIDI Clock:
  4. Mixer and Sampler:
  5. Controller Mapping:
  6. Controller Overlay:
  7. Mix Recorder:
  8. Launch Script:
  9. Further Reading

1. Physical Sound Card

MacBook Pro

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.


2. Virtual Sound Card

Rogue Amoeba Loopback

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.

Project file
  • loopback/Devices.plist

Automatically loaded by the AppleScript app.


3. DJ Application and MIDI Clock

Native Instruments Traktor Pro


4. Mixer and Sampler

Ableton Live

Project file
  1. 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.

Audio

Screenshot of Ableton Live's Audio Device window

Screenshot of Ableton Live's Input Config window

Screenshot of Ableton Live's Output Config window

  1. Driver Type: CoreAudio
  2. Audio Input Device: Traktor Live v1 (6 In, 6 Out)
  3. Audio Output Device: Traktor Live v1 (6 In, 6 Out)
  4. Channel Configuration
    1. Input Config:
      • 3/4: Traktor Pro Deck A
      • 5/6: Traktor Pro Deck B
    2. Output Config:
      • 1/2: Live Out
UI (top left)
  1. 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
  2. Global launch quantisation: None (punching in exactly when you want seems most reliable)
Plugins
  1. A1TriggerGate (v1.4)

5. Controller Mapping

Bome MIDI Translator Pro

Bome MIDI Translator Pro is used to filter the MIDI messages sent by controllers, before they reach Ableton Live.

  1. Channels 1-8: Split encoder value range across 3 channels
  2. Channels 1-4 SELECT: Focus Traktor Pro
  3. Channels 5-8 SELECT: Focus Ableton Live
Project files
  1. MIDI filters:
    1. bome-midi-translator-pro/nanoKONTROL Studio.bmtp
  2. Application settings:
    1. bome-midi-translator-pro/settings.bmts

The .bmtp file is Automatically loaded by the AppleScript app, otherwise double-click to load.

Ableton Live MIDI setup
  • Control Surface: ClyphX Pro XTA
  • Input: Bome MIDI Translator 1
    • Track: Off
    • Sync: Off
    • Remote: Off
  • Output: None
nativeKONTROL ClyphX Pro configuration files
  1. X-Controls.txt
    • Source: clyphx-pro/ClyphX_Pro/XTA/X-Controls.txt
    • Target: /Users/You/NativeKONTROL/ClyphX_Pro/XTA/X-Controls.txt

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.


KORG KONTROL Editor

Control surface editor.


KORG nanoKEY Studio

Ableton Live MIDI setup
  • Control Surface: ClyphX Pro XTC
  • Input: nanoKEY Studio
    • Track: On
    • Sync: Off
    • Remote: On
  • Output: nanoKEY Studio
    • Track: On
    • Sync: Off
    • Remote: On
KORG KONTROL Editor configuration files
  1. The scene's data: korg-kontrol-editor/traktor-live-v1.nanokey_st_data
  2. 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.

nativeKONTROL ClyphX Pro configuration files
  1. Encoder Bindings.txt
    • Source: clyphx-pro/ClyphX_Pro/XTC/Encoder Bindings.txt
    • Target: /Users/You/NativeKONTROL/ClyphX_Pro/XTC/Encoder Bindings.txt

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.


KORG nanoKONTROL Studio

Ableton Live MIDI setup
  • Control Surface: ClyphX Pro XTB
  • Input: nanoKONTROL Studio
    • Track: On
    • Sync: Off
    • Remote: On
  • Output: nanoKONTROL Studio
    • Track: On
    • Sync: Off
    • Remote: On
KORG KONTROL Editor configuration files
  1. Set: korg-kontrol-editor/traktor-live-v1.nktrl_st_data
  2. Data: korg-kontrol-editor/traktor-live-v1.nktrl_st_data

Double-click to open the set files, then select Communication > Write Scene Data.

nativeKONTROL ClyphX Pro configuration files
  1. Button Bindings.txt
    • Source: clyphx-pro/ClyphX_Pro/XTB/Button Bindings.txt
    • Target: /Users/You/NativeKONTROL/ClyphX_Pro/XTB/Button Bindings.txt
  2. Encoder Bindings.txt
    • Source: clyphx-pro/ClyphX_Pro/XTB/Encoder Bindings.txt
    • Target: /Users/You/NativeKONTROL/ClyphX_Pro/XTB/Encoder Bindings.txt
  3. G-Controls.txt
    • Source: clyphx-pro/ClyphX_Pro/XTB/G-Controls.txt
    • Target: /Users/You/NativeKONTROL/ClyphX_Pro/XTB/G-Controls.txt
  4. X-Controls.txt
    • Source: clyphx-pro/ClyphX_Pro/XTB/X-Controls.txt
    • Target: /Users/You/NativeKONTROL/ClyphX_Pro/XTB/X-Controls.txt

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:

  1. 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
  2. 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

nativeKONTROL ClyphX Pro

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.

ClyphX Pro terminology
  • 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
Ableton Live MIDI setup

Screenshot of Ableton Live's MIDI configuration

  • Control Surface: ClyphX Pro
  • Input: Traktor Pro Virtual Output
    • Track: Off
    • Sync: On
    • Remote: Off
  • Output: Traktor Pro Virtual Input
    • Track: Off
    • Sync: Off
    • Remote: Off
  • Takeover Mode: Value Scaling
nativeKONTROL ClyphX Pro configuration files
  1. Macros.txt
    • Source: clyphx-pro/ClyphX_Pro/Macros.txt
    • Target: /Users/You/NativeKONTROL/ClyphX_Pro/Macros.txt
  2. Preferences.txt
    • Source: clyphx-pro/ClyphX_Pro/Preferences.txt
    • Target: /Users/You/NativeKONTROL/ClyphX_Pro/Preferences.txt
  3. Variables.txt
    • Source: clyphx-pro/ClyphX_Pro/Variables.txt
    • Target: /Users/You/NativeKONTROL/ClyphX_Pro/Variables.txt

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.


Native Instruments Traktor Pro Controller Manager

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.

Project file
  1. Preferences > Import > traktor-pro/traktor-live-v1.tsi
Miscellaneous settings
  • Offset: 0 Ms (top of mixer section)

6. Controller Overlay

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).

Process overview

The process to generate an overlay is as follows:

  1. Extract SVG files from owner manuals (bundled Inkscape SVGs)
  2. Load the SVGs into cutting machine software
  3. Identify the 'pen' versus 'cut' lines
  4. Precision draw/cut the file using a cutting machine
  5. Peel the cut card off the cutting mat and the cut sections will separate
  6. Handwrite text labels describing what each control does
  7. Remove any blocking controls (e.g. fader handles) from the controller
  8. Slide the overlay over the top of the controller
  9. I also cut a plastic sheet to protect the cut card(s) below
  10. 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.

Inkscape

Inkscape is a cross-platform vector editor.

Project files
  1. KORG nanoKEY Studio
  2. KORG nanoKONTROL Studio
Process to create the bundled SVG

After locating and downloading the owner manuals, I optimised the vector graphics to create reliable cut files:

  1. File > Import
    1. Select page
    2. Internal import
    3. Uncheck 'replace fonts & embed images'
    4. Precision: 2.0 (default)
  2. Fix dimensions
    1. Select objects on page
    2. COMMAND + G to group
    3. Transform > Scale
    4. Set width and height to the dimensions in the owner manual
    5. Scale proportionally
  3. Outline the physical controls
    1. View > Display mode > Outline
    2. Double-click parts to edit them directly
    3. Use +/- to zoom in/out
    4. Click near letters, click inside shapes
    5. Use delete to delete lines that won't be cut
    6. Use node editing tools to ensure that cut paths are unbroken
  4. Edit objects
    1. Object > Objects...
    2. Maximise the panel (close other panels)
    3. Click 3D rectangle layer icon to select that object
    4. Select all g... objects and ungroup them
    5. Delete all g... layers (empty groups)
    6. Optimise one of each individual control (e.g. channel strip)
    7. Group each individual control
    8. Use guides to position copies of these in their original positions
  5. Export SVG

Cricut

The Cricut Maker is a consumer level cutting machine.

Cricut Design Space is the companion software for the Cricut range.

Process to cut the SVG
  1. Launch Cricut Design Space
  2. Import bundled SVG
  3. Mark each object as 'pen' (draw) or 'cut' (cut)
  4. Select top level group > Attach (to print the layout as you intended)
  5. Select top level group > Set dimensions to match Inkscape file
  6. Wait a long time for the project to load
  7. Load the mat and cardboard into the machine
  8. Draw the 'pen' lines
  9. Cut the 'cut' lines

7. Mix Recorder

Rogue Amoeba Audio Hijack

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:

  1. record directly from an application (e.g. Ableton Live)
  2. 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.

Project file
  1. audio-hijack/traktor-live-v1.ahsession

Automatically loaded by the AppleScript app, otherwise double-click to load.


8. Launch Script

Apple Script Editor

Project file
  1. 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

9. Further Reading

FAQs

How do I use the sampler?
  1. Press Select on Channel 1 or 4 (this sets the recording source to Traktor Pro's Deck A or B)
  2. Press Select on Channel 5, 6, 7, 8 (this sets the target Ableton Live channel for sampling)
  3. Press the Record button to start recording immediately
  4. 4 bars of audio will be recorded
Why can't I hear recording clips in Ableton Live?

Press the sync button to sync playback with Traktor Pro.

System Events: 'send keystrokes' error message

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: 'assistive access' error message

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)

References

  1. How to Sync Ableton Live and Traktor Pro - The Right Way | DJ Endo
  2. Ableton Live Looping Setup - Hands Free! Ableton and ClyphX-Pro
  3. etc..

traktor-live-v1's People

Contributors

dotherightthing avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

traktor-live-v1's Issues

Cannot clone repo

Cloning into '/Users/dan/Websites/traktor-live-v1'...
warning: templates not found in /usr/local/git/share/git-core/templates
/usr/local/bin/osagitfilter smudge --log 'applescripts/Traktor_Live_v1.app/Contents/Resources/Scripts/main.scpt': /usr/local/bin/osagitfilter: No such file or directory
error: external filter '/usr/local/bin/osagitfilter smudge --log %f' failed 127
error: external filter '/usr/local/bin/osagitfilter smudge --log %f' failed
fatal: applescripts/Traktor_Live_v1.app/Contents/Resources/Scripts/main.scpt: smudge filter osa failed
warning: Clone succeeded, but checkout failed.
You can inspect what was checked out with 'git status'
and retry with 'git restore --source=HEAD :/'

Completed with errors, see above

  • File: .gitattributes
  • Description: Use osagitfilter to improve git support for AppleScript files
  • Contents: *.scpt filter=osa

Send Traktor song name to Live

This might allow recorded clips to contain the source song name.

Harvester API

Instructions

  1. Download Traktor Metadata Harvester 0.5
  2. Unzip to traktor-template-nk/packages
  3. In Terminal, run: /path/to/traktor-template-nk/packages/5-beta/metadata-osx64 --port=9000
  4. System Preferences > Security Privacy > {this app} > Open anyway
  5. Traktor > Preferences > Broadcasting
    • Proxy Settings: None
    • Server Settings:
      • Address: 127.0.0.1
      • Port: 8080
      • Format: Ogg Vorbis, 11025 Hz, 32 kBit/s
  6. Open the Audio Recorder tab at the top right of Traktor's UI
  7. Click the Broadcast icon
  8. Open a browser and navigate to 127.0.0.1:8080

Not working:

  • Broadcast light flashing rather than solid, no output on webpage
  • Tried with 'internal' output routing, so that the Audio Recorder has something to record. This didn't help.
  • Tried restarting Traktor. This didn't help.

Traktor API Client

https://github.com/ErikMinekus/traktor-api-client

Not working:

Selecting Live track as record destination impacts playability of source sample

Scenario:

  1. Select track 5 (Live track 1), press record to start recording
  2. Pitch input on nanoKEY keyboard - nothing happens as input track should be selected
  3. Select track 1 (input source)
  4. Pitch input on nanoKEY keyboard
  5. Finish recording
  6. Adjust loop region to capture pitched portion of sample

One solution could be to have a count-in.

deselect_traktor_deck causes the loop/play/rec LEDs to reflect Traktor rather than Live

https://github.com/dotherightthing/traktor-template-nk/blob/a8e81952c0daed44bbcefa6624619ac51d56b07d/korg-nanokontrol-studio/clyphx-pro/ClyphX_Pro/Macros.txt#L188

  • Could update Traktor to only show LED states if Deck A or B.
  • Or could implement programmatic update of selected Live track state by reinstating user actions on_selected_track_changed
  • Or could set a variable to the current track then run actions according to this7
  • Or could use a modifier in Traktor to determine whether track should select / LEDs should update (but this could have the same effect)

Record button does not light up during recording

Button Bindings.txt

# Track clip record

# 'SRECFIX 4' is in X-Controls.txt
# when the command below is commented out, the record action works, but the LED feedback does not
# see https://forum.nativekontrol.com/thread/4416/button-binding-control-trigger-action
#
CLIP_REC = CC, 1, 81, 0, 127, SEL/ARM

X-Controls.txt

# 'arm' is also in Button Bindings.txt
# when the command below is commented out, the LED feedback works, but the record action does not
# see https://forum.nativekontrol.com/thread/4416/button-binding-control-trigger-action
#
X_CLIP_REC = CC, 1, 81, 0, 127,
 MSG "Recording new clip";
 ALL/ARM OFF;
 SEL/ARM ON;
 SEL/SEL EMPTY;
 SRECFIX 4;
 WAITS 5B;
 SEL/ARM OFF;
 MSG "Recorded new clip"

Add momentary EQ kills

These will need a user_clip user action, so that state independent commands can be added to G-Controls.txt

UX improvements

  • Reinstate separate Deck A and B FX tracks on tracks 2 & 3, as the FX are actually independent (and reduce Live tracks from 5 to 4)
  • Use the select buttons on tracks 2 & 3 to select those tracks rather than the FX buttons, to get LED feedback of which channel is selected (currently there's no channel visibly selected when FX are being adjusted)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.