String Theory for DJs
Don’t run off! We’re not actually going to give you a physics lecture. That said, you might need to put your thinking caps on, because I’ve been working on a concept that’s designed to sidestep some of the limitations of DJ software and open up a whole new world of power, but it’s a little bit complicated.
Why string theory? Well, to really accomplish magical things in DJ software, some events need to happen in a string, one after another.
One of the biggest limitations in DJ software is that certain actions, despite in theory being able to be part of the mapping of your dreams, just don’t play well together. Whether it’s wanting to skip forward a certain amount of beats, lay cues and loops separately, or maybe activate an effect and change its function all in one press, some things just don’t play fair. The solution I’ve been working on – perhaps workaround is more accurate –involves using some intermediary software to catch our MIDI commands and transform them from single messages into strings of sequential messages, so that the software recognises a single press as two or three separate commands inputted in quick succession. Clever, huh?
In this guide I’m going to be focusing on Traktor Pro, as it’s no secret that the Traktor mapping engine creates massive possibilities. I’m also going to be using the free OSX application MidiPipe, but you can also achieve results with Bome’s Midi Translator (Pro edition only, unfortunately) – and you may also be able to work something else with MidiOX, the free MIDI translator for Windows. I’m also using a Midi Fighter, so you should be able to just load up the example .tsi below and go if you have a Midi Fighter – if not a quick look at the commands to remap to your controller should be simple.
The practical example I’m going to use is a way to get track slicing, like that seen in Novation’s Twitch controller, into Traktor Pro. I’m not going to focus on totally aping the functionality, as the special function in Itch has quite a lot going on, but the general premise – eight buttons that correspond to 8th notes in the track for instant remixing – is surprisingly easy to knock up with a little outside-the-box thinking.
The issue we need to sidestep is Traktor’s unwillingness to do two things at exactly the same time; in this case we need to jump to a reference cue and then jump to another beat from it, and so to make that happen we need to use a string.
In Midi Pipe, we need to define the Midi In, and for our first output we can just go straight out with a Midi Out. Doing this doesn’t really do anything to the MIDI message we send, and Traktor will receive it as if nothing ever happened. The key, though, is to select ‘pass through’ in the Midi Out. This will allow the MIDI message to continue through our string as well as being sent out, allowing us to morph it into something else – but first we need to delay the signal slightly.
It seems that three really is the magic number, as in order to get 100% accuracy with no dropped hits, we need to set a delay of at least 3ms between the two MIDI messages being sent. We’ve spoken about latency a few times in the past here at DJ TechTools, and whilst no latency is better than any latency 3ms is acceptable in most setups – if you’re already pushing the boundaries in other areas and planning on creating strings with three or four steps it may start to become noticeable though, so bear in mind your mileage may vary. You may also want to consider bumping up the delay on some of the strings to make sure that all of your buttons have the same feel; if you need two delay commands in one string but only one in another, setting the latter to 6ms will ensure the feel is consistent.
Once we’ve set up the delay, we can then set up a Key Mapper. This will take our note message and change it into another one, and using another Midi Out afterwards will send that message to Traktor a mere 3ms after the first. This process can be repeated as many times as you like, but as mentioned earlier beware of the latency creep.
When we’re in Traktor, all we now need to do is set up our commands. In this basic example, I have used the top left button on the Midi Fighter to drop a cue and loop, and the one next to it to simply drop a cue. To get our track to jump around on beat, all we need to do is set up eight buttons – the bottom two rows in the case of the example – to all jump to the active cue when they’re pressed by the first message in the string. The second message can then be set to a beat jump which corresponds to the different note lengths. In order to get some of the beats you will need to combine two messages; to get the third 8th you will need one beat jump of +1/4 and another of +1/8. You’ll see in the screen shot and example file there’s a third set of commands in Midi Pipe, and they’re for this exact reason.
As if to make matters a bit more difficult to follow, I came across a bizarre issue in Traktor whereby the beat jump values needed to be doubled for the second half of the bar… I’ve no idea why this happens, but at least the example works.
This may sound a bit complicated, and that’s because it is, really – but once you get your head around it and the switching between two pieces of software to create your mapping, you’ll start to realise there are a ton of new possibilities. Here’s a zip file which contains both the Traktor Pro .tsi and a Midi Pipe file that I created for this guide, so that you can open them up and see the functionality in action: hopefully this will make things a little clearer.
There are huge possibilities for this method, and we’re beavering away behind the scenes to bring you something special but we’d also love to see what you can come up with, so have at you!