Long story short: This is an application which receives Midi clock data and converts them to Ableton Link. Target scenario is using it to enable Track Decks in Native Instrument’s Traktor being the Tempo Master in an Ableton Link Timeline. You can download it here (Github repo with compiled binary for macOS ).
[Update 13.07.2020] Version 0.9 now supports sending START and STOP messages into Ableton Link[/Update]
[Update 06.07.2020] Some people told me that the downloaded binary instantly crashes on their computer. Seems that’s more a feature than a bug. Details can be found over here. However, there’s an easy fix.
First, try to open the binary via right click and make sure you want to open it even though it’s not from a verified developer. However, the app will crash anyways. Next open the Terminal, enter xattr -dr com.apple.quarantine (followed by a space) and drag ‘n drop the binary into the terminal window. This will autocomplete the command. Hit <Enter>. If no error message is displayed you are fine. Try running the app via double-click.[/Update]
[Update 03.12.2019] I added a link to the corresponding GitHub Repo at the end of this article. Feel free to clone, fork and mess around. #fcksbt [/Update]
I am one proud owner of Native Instruments Traktor and Maschine. And I dream of being musically creative and running both products synchronized with each other … and add other apps to this scenario like Resolume, VDMX, … anything that creates music or visuals. Just because I think it might lead to beautiful (or at least interesting) results.
While there is a multitude of tutorials explaining how to successfully sync Maschine and Traktor most of them have in common that they rely on MIDI as well as Maschine and Traktor running on the same computer. Something that might not always be the preferred solution. Just think of basic load-balancing (Maschine as well as Traktor can cause quite some CPU load. Add Resolume or VDMX and your Computer will probably … experience some kind of lag every now and then). Or maybe you want to run both programs on fullscreen. Or you want multiple people to work together. I think I made my point.
You could, of course, use MIDI to connect different hosts to each other but you would have to deal with all the struggle that comes along with MIDI: You need an appropriate interface on each host, you need MIDI cables and you need a way to make your application react to MIDI clock. Then there’s clock drift, latency, etc… If you ever tried to syc more than two computers via MIDI you probably ran into at least one of these issues. If not: Have fun trying to not lose your temper while setting up a working scenario on-stage.
Fortunately, there’s Ableton Link which allows you to simply run software in sync. It just works. Locally and over a network connection. It incorporates latency compensation, runs on all major operating systems (including mobile) and …. it just works (really: try it). Furthermore there’s a growing number of ‘creative’ software products which natively support Ableton Link. And even more: it’s open source.
Good thing: Maschine supports Ableton Link. Traktor supports Ableton Link.
Bad thing: You can not provide tempo information for an Ableton Link timeline from a running Track Deck in Traktor.
Though by the protocol’s specs every host can set/ suggest a session’s tempo (there is no dedicated clock master like in a MIDI scenario) Traktor’s implementation of Ableton Link more or less makes it a ‘semi-passive’ member: You can sync Traktor’s master clock to Ableton Link like a charm. You can also sync Traktor’s Track Decks to its master clock. Making them adapt the master clock’s tempo. But you can not take a deck’s tempo information and feed it into the Ableton Link Timeline. It’s a one-way scenario. Decks can only be set to a tempo but cannot set a tempo themselves.
This might be okay for when you play some flavour of electronic music where (maybe) you stick to one tempo throughout your (preplanned? *cough*) set. But if you want to incorporate different tempos (because you play different sorts of music) and want to provide your song’s tempo information to Ableton Link you are technically running into some dead end.
That is unless you use the software I provided here. As described in the beginning it receives MIDI clock data and converts them into Ableton Link data. This way you can set a Link Timeline’s tempo from your actively playing Track-Deck within Traktor (or basically any other piece of software or hardware that sends out Midi Clock). I drew a little sketch to show the basic principle behind this.
Here is a video of Maschine and Traktor running on separate computers which are synced via Ableton Link within a WLAN. The audible metronome click is coming from Maschine on the left. Notice how Maschine automatically syncs to the tempo changes on the Track Deck.
Up next is a more visual approach. This example shows Traktor being the Tempo Master for some visuals run by VDMX. And it clearly shows that timing and syncing are things that you have to prepare. VDMX is always a little early on the beat. The Clock is near perfect but it’s somewhat extra tight while Traktor’s implementation might not be that precise (which is just an assumption). However, this is simply a matter a fine-tuning. If you look closely you might identify an LFO running in VDMX on the left screen. That’s where you could easily compensate minor (or even major) misalignments between audio and video. Please don’t quote me on aesthetics. This is just an impromptu demo with the first reactive shader I found. I am using either VDMX or Maschine simply because I don’t have enough CPU power at hand; technically they could all be run simultaneously and in sync. Theoretically THIS could then be your setup for your next art-exhibition performance.
Setting up the software is as easy as … setting up something very easy. First you need a MIDI port that accepts incoming Midi Timecode. I Added a virtual Midi Port since I am running Traktor (the Midi Clock’s source) on the same computer. The port is called it ‘MidiAbletonLink’.
This port receives MIDI Clock from Traktor
The software features a drop down menu at the top (and it might be easy to overlook) where you select the MIDI port where the Timecode is being derived from. And that’s basically it. The ‘Retrigger wait’ slider makes the software wait x milliseconds after incoming Midi Clock data are detected and after Midi Clock is being retriggered. Theoretically this doesn’t need to be – practically a delay of ~50ms simply led to better results.
Feel free to contact me if anything is left unclear or if you have suggestions to further improve it. The software is built with openFrameworks and can
be downloaded here. I’ll happily provide the sources as well: simply contact me via mail. (Sorry for that extra effort but this tweak is necessary because there are people who repeatedly tried to take my work and blatantly sell it as their own. I just want to make sure they are not getting the sources too easily. #fcksbt)
[Update 03.12.2019] A few people contacted me because the software crashes on their system. I tidied up the sourcecode a little bit and uploaded everything to my GitHub so you can give it a go yourself. [/Update]
unfortunately this app immediately crashes after starting
Hi, there’s a folder within the archive. It needs to be present next to the app.
sorry i’m still not getting this run without crashing instantly
i have this data folder next to the app …
Sorry to hear that. I think you might have to build it yourself. I added the link to the Github repo a few weeks ago. As written before it’s all based on OpenFrameworks which is quite well documented. As soon as I know how to compile stuff in a portable manner I’ll update this post.
There is an update on top of the post on how to get the app running without crashing.
I take it this requires OSX Mojave?
Hi Will, I built in on Mojave. don’t think openFrameworks is very picky considering the OS but that’s just a rough guess.
Downloaded your Link tool to try and use. I take it this was built for OSX 10.14?
I am running 10.13 and I can get the application to run by executing from a terminal, but not from the app package – any ideas?
Hey Will, thanks a lot for the feedback. At this moment I cannot say very much about it since it’s my first openFrameworks app. I will have a look at it and will post updates as soon as possible.
ah cool .. that way i got it to run as well … if it works like this, i can totally live with it
Nice idea and kudo for making this app.
I’m searching since a long time the opposite, creating a Midi-Clock from Ableton Link. Is it a great effort for you, to implement this function (opposite direction) for your program? Would be really nice to have a solid solution for that..!
Hey Stefan, thx for the feedback! At first I thought about Link to Midi but it seems to be mobile-only. The idea, however, doesn’t sound too bad =). I will put this on my to-do-stack (which doesn’t guarantee anything happening soon…sry for that).
Thanks so much for this. Solves a great problem for non-link-enabled DAWs.
FYI: Works perfectly with Logic generating clock. With Studio One generating clock, tempo alignment works, beat/phase alignment does not. As if MIDI clock start has no effect.
Hey the link is dead, could anyone please email it to me? (I don’t know how to compile etc.) also if anyone has a windows version too that’d be amazing 😀
Hey Torben, I updated the download-link. However, the binaries are still Mac-only since I don’t have the chance to build it on a Windows-machine.
hey Andy, it would be great if you could fix it so app doesnt crash. there is a real need for this app! im on 10.13 High Sierra.
Matt Black, Coldcut
Hey Matt, I am currently on vacation for a few days but I will take care of this as soon as I’m back home (because I am more than thrilled ’cause I totally love your stuff).
Hey everybody, just wanted to let you know there’s a new version (0.9) which supports sending START and STOP messages into Ableton Link
Would be amazing if you could provide a mini “how to” install for those of us who don’t have any coding experience.
I downloaded all the files from Github & etc, and I’m throwing in the towel after an hour of tinkering.
*note… I’m currently given to trying the debug app…. is that what we’re supposed to do?
Hey Tim, with the file ‘ofxMidiClockAbletonLinkDebug’ at hand please follow the instructions on top of the post (dated 06.07.2020). In short: Open a Terminal window and enter the command xattr -dr com.apple.quarantine (followed by a space) and drag ‘n drop the binary into the terminal window. Hit Enter and now you can open the program by double-clicking and it won’t crash.
I’ve been looking for a program to do EXACTLY this, amazing work, but please do you have any more detailed instructions on how to get the program running? I’ve followed the current instructions, download Open Framework and ofx. files, but I’m just not a coder and can’t grasp it after spending a few hours trying to learn
as long as you are on a Mac (I am assuming this since you came here via the VDMX forum) there is no need to compile the software yourself since the binary is included in the repository. Just download/ clone the repository and go to the “bin” folder there you’l find the binary (somethingsomthingDebug). In order to execute it you have to set the quarintine-thing like it’s written on top of the post or as an answer to Timothy (16.10.20). Feel free to contact me if anything is left unclear.
It works perfect between Traktor Pro 3.5 and LichtRider on the iPad. Now the light flashes on the bpm from the traktor deck.
It only thing I see is that the link button in Licht Rider not flashes every beat. It’s always on. When I use the link function from traktor. The link flashes on the bpm tick. Any idea is this important?
Big thanks for sharing this.
I am trying to link a Monome 64 grid controller to an app called Din (Din is Noise). Din accepts MIDI but does not have support for OSC. What would I need to do to make this Monome device which is OSC (connected through serialosc) to be recognized as a MIDI device by another app? I tried setting “MIDI OUT FROM OSC: TO MONOMESERIAL 1” but no luck. Thanks!
It’s crashing for me on macOS 12.0.1 (Monterey). I tried running xattr -dr com.apple.quarantine … but it did not solve it.
How would I go about building this for Windows?