What if Pioneer DJ’s proprietary Pro Link data stream wasn’t hidden, but instead accessible to any device connected to it? In today’s article, guest contributor Jon Feldman takes a closer look at a new project that allows DJs to use the data passed between your CDJs to sync with an Ableton Link Clock or trigger MIDI/OSC messages. Keep reading to start cracking open Pro Link!
What’s The Deal With Pioneer DJ’s Pro Link?
Introduced in 2009, the ethernet-based Pioneer Pro DJ Link streams information between CDJs and Pioneer mixers. A simple ethernet connection allows tempo synchronization and USB/SD card sharing between machines.
It’s easy to share this data within the Pioneer ecosystem, it’s been nearly impossible to use it with other software. This is especially frustrating as Traktor and Serato have added native Ableton Link support, making integrating software solutions a breeze compared with the Pioneer hardware system.
beat-link-trigger: Masquerade Your Computer As A CDJ
The closed ecosystem is totally changed with beat-link-trigger, a small java program written by James Elliott of Deep Symmetry. Beat-link-trigger registers your computer as a CDJ on the Pro Link network, getting access to all the data shared between the players. And just like that, you have access to everything a CDJ sees:
What Can You Do With beat-link-trigger?
You can do all kinds of wonderful things with the data. Beat-link-trigger watches for events happening on the network:
- a player going ‘on air’
- a tempo change
- even the name of a song
The app can then trigger events to other devices via MIDI or OSC, opening up a wide range of light and environment based synchronization possibilities. Beat-link-trigger allows you to use a java-derived programming language to trigger on very specific Pro Link events. You can also use the data to synchronize an Ableton Link session (note: the ‘real’ CDJs are always the master) – and coordinate other instruments or drum machines, up to the bar.
As an example, here’s a CDJ controlling the tempo of Novation Launchpad, via Ableton Link:
I’ve had success generating MIDI messages which I can translate with Lightkey Pro on my Mac, allowing me to create instant beat-synchronized lighting effects!
Requirements + Setup
Setting beat-link-trigger requires that you have Java 8 installed on your machine, and that your computer is on the same ethernet network as your CDJs. Download the latest version here and double-click it to run. The software logs onto your Pro Link network as a CDJ and starts listening for events, and triggering responses over Midi or OSC.
To send Ableton Link clock data, you’ll need a second piece of software, Carabiner, which is also available from Deep Symmetry and takes the clock output from beat-link-trigger and allows it to be set as the Link master. The software has a compiled version for MacOS, but only source code for other platforms. Once running, beat-link-trigger sends timing data to Carabiner, which shares the timing data to anything which supports Ableton Link.
Best of all, development on the project is very active, and there new features are being added all the time. It’s never been easier to add external hardware to your set!
[…] is more description and a video in a DJ TechTools article, […]
Rocks like HELL!!!!
Almost perfect working, I can make everything but control Ableton Link BPM. I have been testing beat-link trigger this morning with a pair of XDJ-700 and a macbook, it detects correctly the players and I can generate midi clock and midi messages. The problem comes with Carabiner, it seems to detect beat-link trigger and also all the Link enabled apps in the network of the computer (tried with ableton live in the same computer, and also with an iPad in the same network with Korg Gadget), but I can’t control the BPM. In Carabiner the BPM of Link apps it’s correctly detected, it also appears in Carabiner’s window of beat-link trigger, but when I change the BPM of the players nothing happens. In the Carabiner window of beta-link trigger the field “Target BPM” appears in blank, just “–“, ¿does it have any relation? Any help will be welcome.
Amazing! This is the way forward for live remixing!!
Is there anyway to use this with rekordbox dj with a pioneer rx linking it to ableton? Rekordbox does not currently have ableton link, which is a pain, I’d love to get these 2 programs synced up, with rekordbox being the master and ableton the slave
Thanks for all your work!
I would recommend reading the documentation carefully, and trying it. Because of the nature of a free, open-source project like this, there are far more combinations than I will have the resources to try myself. That is why I have provided so many levels of careful documentation and explanations, right down to a detailed analysis of how the protocol works. I don’t personally own a rekordbox dj license (I use physical CDJs), so I cannot test this for you. But if you can test it and get it working, we can document that for others in the future.
rekordbox DJ comes with a trial for 30 days if thats any use? 🙂
Although when you say “rx” if you mean an XDJ-RX, currently those cannot be used with any of these projects; as noted on the main project page, they crash when the library starts up. If you are willing to dive into network captures and coding to try and help resolve that, you could make a big contribution to the project.
There is a Pro Link port on the back of XDJ-RX’s I believe – someone would have to try it to find out!
There is indeed a Link port on the XDJ-RX, however it cannot be used with Beat Link Trigger, as noted in the Compatibility section of the main project page: https://github.com/brunchboy/beat-link-trigger#compatibility
Unfortunately that won’t change until someone who owns one can learn enough about taking network packet captures (and the protocol minutiae) to help solve the problem, or I can find someone local to loan me one long enough to figure it it out myself.
By RX, i meant the DDJ-RX, a rekordbox dj controller,
So I assume that you could connect Traktor to via the Ableton Link too then!
Yes, now that Traktor supports Link, you can certainly do that. Before that was possible, I created a special Traktor MIDI mapping which could be used to achieve beat-level synchronization with CDJs, on top of MIDI clock for tempo sync. But Link is so much easier that I removed that from the user guide.
Thanks James. I would like to trial one CDJ with Traktor to see if it is for me.
Cool, have fun experimenting. But do keep in mind that an approach like this can’t give you nearly the level of tight integration that using the CDJ in HID mode offers.
“There’s also always a chance that Pioneer DJ could close the loopholes
that allow this to work in a future firmware update to CDJs” … I hope goddamn Pioneer wakes up and sees this as the opportunity it could be to react on Denon’s offensive.
The idea is just awesome and I’ll try it ASAP with my CDJs as well. Sorry if already asked, but when you say the software registers as CDJ in the ecosystem, do you know if it still works using a 4-CDJ-Setup? ‘Cause I read that ProDJ-Link allows interconnecting UP TO 4 CDJs with a mixer. Therefore, the maximum of CDJs to use with the software would be 3?!?!
If you don’t need to request track metadata, you can use beat-link-trigger together with 4 CDJs. There seems to be a limitation with requesting track metadata where the player numbers must be between 1 and 4, so then you can only use 3 CDJs. You’ll see a warning about this when choosing Request Metadata in beat-link-trigger.
As for the “loophole” as the editor calls it, the chances are very slim that Pioneer will change the PRO DJ LINK protocol, as that would mean updating every CDJ and XDJ. So far it seems that newer players just send more information in their status updates.
Erik is mostly right. It’s quite complicated, I tried to explain it in the user guide, but here is another attempt. If there are fewer than four real players on the network, beat-link-trigger can use a player number between 1 and 4, and everything works in all circumstances. If there are four real players, then beat-link-trigger has to use player number 5. It can still, under some circumstances, request metadata, but to do so it has to “borrow” one of the other players’ numbers for the duration of the request. It is able to do that *unless* the other three players are linked to the media in the one it needs to talk to. Under that circumstance, it is unable to ask for metadata, so you need to either do without metadata, or use a metadata cache file that you created from the media while requests were possible.
Yeah, but what’s the deal with that? Release a new firmware update and gotcha… I just meant, that opening the door for a CDJ/controller interoperability (which I’m pretty sure ProDJ Link could do when just implemented) that would be a big deal for nowadays DJing demands. But referring to Pioneer’s strategy in the past it seems more likely that they would close such a loophole instead of seeing the potential to come out with a pretty neat improvement on hardware that is still considered as industry standard. Imagine having the ability to also control 8 hot cues on a regular 2000 nexus. The nexus 2 players are capable of being controlled by an SP1 externally which is such a nice feature. But not being able to spend 7000 bucks on nexus 2 and boom, you’re fu**ed and feel like thrown back in the stone age and all because they won’t being this functionality to the hardware which is still most likely to find in a club and other locations. Maybe it’s just the disappointment speaking out of me, since I think we didn’t see a real answer to the newly introduced Denon hardware since they released it. Does really anybody give a damn about this TORIAZ SP-16 thing? We need improvements on the CDJ market! And when saying improvements I’m not talking about controlling 8 hot cues using 2 switchable (!!!! it’s 2017 guys) banks of buttons or being able to see your waveform in colors and price out over 2k a piece -.-
That would be lovely. I can’t influence what Pioneer does, though; I can only make the most of what does exist and work. I am afraid you are likely right not to hold your breath.
ohhh man!!! you are so rude!! 1-st VERY BIG THANKS to @brunchboy for a great job! 2-nd @Stan Hyke you are watching from dj side only! but to understand what is it and what to do with this great software you need to think different! if you are dj just play music, don’t ask too many questions! are you happy with rekordbox, serato, traktor or virtual dj?? no?! go play vinyl records! if you can’t?! change your job. this software will be interesting for djs 10%, other 90% for engineers who takes care for all other staff! tell me one thing! imagine you are top 10 dj in the world, and you have your light, video etc team, and you are performing your show live on the big stage. how you can send smpte to foh with NXS2 setup???? (tip: there is no fader start feature). please don’t say some bullsh**t like pioneer will make new firmware and change everything)))) its like microsoft going to change windows nt core in next version of their os)))) read more about how it works. this software not for controlling 8 cue points on the old cdjs, the target of beat link trigger is to get tech info from pro dj link and monitor/deliver/convert/make automation where you need it!!! oh sorry not you!!))) haha some who need it! done
Hi, would it also be possible to control functions of the player with lets say a midi controller? As you can control a second player using just one main player there is a protocol for several functions of the players incorporated. I just switched from traktor and feel really limited as I used to jump in between two tracks at the same time using just one hand with a x1 from native instruments. I am really missing this possibillity. My dream was a raspberry pi which is in between the controller and the player usb network to translate my midi messages to Pioneer link signals. Is something like this possible?
The DJ Link protocol is not designed to do that, so I doubt it will ever be able to help you much. The only kinds of “remote control” we are aware of are three kinds of operation. You can tell a player to load a particular track (to support the feature in rekordbox where you can drag a track to a player). And in order to support nexus mixers’ “Fader Start” feature, you can tell a player that is paused at a cue point to start playing, or you can tell a player that is playing to stop and return to the cue point. That is all, though.
AFAIK it is possible to plug a DDJ-SP1 into the USB port of a CDJ-2000NXS2 or XDJ-1000 MK2. It can then be used control other CDJs (maybe even non-newest-generation devices?) over Ethernet. Thus there have to be some more commands for looping, beatjumps etc. Am I right?
There is no evidence of such commands. That does not mean you are wrong, it just means I have never heard that or seen it, nor does the protocol support that kind of thing in my experience. But I don’t work for Pioneer; I have just done a year or two of research and experimentation and published my discoveries. If you can prove this true, and figure out and share the details, I’d be happy to incorporate them into the documents and programs.
I just noticed that the article only links to the download site, which may be leaving some readers mystified about the details of how to use the program. There are a lot of instructions if you start at the project main page: https://github.com/brunchboy/beat-link-trigger#beat-link-trigger
So this will work for the toraiz too?
Until you asked this, I had never herd of a Toraiz. Because of that, the chances are very slim that anything useful will happen if you try to use Beat Link Trigger with one. If you have access to one, and can try it, we would be interested to hear what you discover. If you can dig in and help analyze what it is sending and how to make it work, even better (check out the dysentery project which is where that kind of analysis takes place). Until someone does that, or can send me a Toraiz to work with, however, you’d best assume they are not supported.
It will be great to know if it could be possible to send “encoder data” from cdj into “playhead position” of ToRaiz to allow something like Remix decks with true scratch possibilities. NI did a good job keeping Maschine/Traktor isolated (being Remix decks/stems the step between them) butnit will be amazing to have an standalone solution out there. If someone ask me if I see it happening in the future… well I don’t expect it from Pioneer itself as this wonderful hacks show us.
can this work for the toraiz also then?
Being able to send beat trigger info to resolume will be amazing. 🙂
That was one of the early use cases for the producer I initially created it for. 😀
James you legend. Thank you. I will be testing this ASAP
Thanks for the great writeup! It is exciting to see so many people discovering this project which has devoured so much of my free time for the past year or so. 😀
You have created a tool that people will be using for more projects than they can currently think of. We salute you sir.
I’d love to see a interface between turntables and CDJs to use DVS without a notebook
With the info involved in this it could be possible but if you wait for Pioneer to release it mostly improbable.
Without going so deep there are another hacks transforming DVS input into hardware digital encoder that could be feeded into regular cdj and gain control over jog.
A finished product could be easy to develop nowadays but its impact on market sales will be near to 1% and revenue even less. Turntables seem forgotten…
[…] post Decoding Pioneer Pro Link: Connect CDJs To Ableton Link appeared first on DJ […]
Soooo the big question:
How would you implement this with a computer running traktor pro and another using rekordbox?
To link both? Idk if Rekordbox has Ableton link or midi clock but if has any of them this hack is unnecessary. ITOH if Pioneer implement this inside rekordbox and Ableton link could be a very interesting solution as center piece of dj setup.
Yes, it would be nice if Pioneer implemented Ableton Link support directly someday. Of course, Beat Link Trigger lets you bridge to far more kinds of things, by sending MIDI, OSC, or arbitrary network messages in response to activity on the CDJs. Think of it as a development platform for show integration.
I don’t want to sound “unnecessary = crap”… just answering the question. Of course you did a great job implementing things like OSC and so.
To see it as platform for show integration it should be standalone or platform agnostic with 3rd party implementation (like Alink) or curated multiplatform IMHO. I love the inverse engineer part of your work but being iOS-only “musician” it’s just a nice proof of concept but nothing I can use (if someday I will need to dare with Pioneer cdjs).
Did you considered ported it into Raspberry pi as standalone box? Do you know about bome bomebox? It could be a great project to implement on those…
No worries! I did not mean to sound defensive, and I know that not all pieces are of any relevance to all people. That’s why, as you noticed, I separated it into several layers: the paper containing the basic analysis of the protocol, which is independent of any language; the library, which can be used to build a variety of software inside the Java Virtual Machine; and Beat Link Trigger itself, which started as an example of how to use the library. And the great thing about open source is that, as you also saw, people are already experimenting with taking it in different directions. I don’t have a Raspberry Pi, nor time to explore that platform, but other people are doing so. I love it. 😀
I hope it keeps flowing and flourish in infinite marvels. 😉
If you are using rekordbox to serve tracks to CDJs, Beat Link Trigger works even better than just with CDJs, because there is no limitation on its ability to request metadata from rekordbox, whereas if you have four CDJs linked to each other, it can be impossible under some circumstances to get metadata about the media in the players.
If you are talking about using rekordbox dj to actually play the audio, I don’t have a license for that (I use physical CDJs), so I can’t be sure, but it may send out beat packets in a way that is compatible. You should just try it and see.
Great. Maybe Pioneer could implement some like this into Rekordbox or even release an standalone version with ALink…
Also Bomebox seems a perfect target for something like this.
A raspi… an iPhone… an android phone…
This is so cool.
Any chance of this becoming a non-java application some time in the future? Not sure I’d trust java with realtime applications.. maybe I’m just ignorant.
The source is available if you want to recompile it into a container
Java is incredibly stable, battle-tested, and high-performance. But in addition to my source code, I have also published a 50 page long (and growing) detailed research paper about the protocol (in my dysentery project, which is where the basic research takes place), to allow anyone to implement these discoveries in any language they like. There is already a parallel project using the Go language, and feel free to write your own. Take a look at the projects on GitHub for all the details.
where can i get this paper as PDF? cant find it 🙂 thx for your answer!
You’re welcome! And to save others from having to hunt for it as you did, here is a direct link: https://github.com/brunchboy/dysentery/blob/master/doc/Analysis.pdf
any findings about hid data transported via lan? there should be some.
I have not seen any evidence of that, but I have not looked. I thought the HID was implemented only over USB. If that turns out not to be the case, it would be the domain of a different research project.
at least the nxs2 models are able to send/receive hid via Ethernet since it is possible to use them in hid mode via the djm900nxs2 connected via one single usb to rb (in Performance mode) and distribute this via lan. would be very interesting to hack this 🙂
Ah, very interesting indeed! I don’t have access to any nxs2 gear, I bought my players too long ago, but perhaps others can contribute these details.
This is the way Traktor Pro should work.. I use Traktor with 2Cdj’s 2000 and a Xone 4D. I’m also using Maschine 2 and Ableton for productions. I love the idea to Link several apps together via the Link option. But you can’t use it because Traktor don’t allow the Cdj’s to be the master. It needs to be the Traktor’s internal master clock to be the tempo master. So it’s a problem for me because I can’t adjust that on my Cdj’s. This could probably solve the problem.. I don’t know. Any ideas ?
Traktor has ALink? In ALink sessions there is no master/slave all are listening the transport and adjusting themselves to it allowing anyone to change it in any moment so… it isn’t at the example of the article what you want to do?
Well the thing I always wanted to do is deejaying on Traktor Pro using Machine 2 both linked together via the Link function in Traktor. But Traktor doesn’t allow you to set the Master on Decks (controlled via my 2 CDjs) while the Link function is turned on.. It automatically sets Traktor’s internal Master Clock instead. Or maybe I’m wrong ?
I don’t have Traktor (well directly any x86 machine atm) but the point is Master tempo (midi clock) let select which deck is the Master and so.
In link the first came set the Master, the laters initialize in sync with the “Master” and from that moment if you change tempo it should alter the Master Link itself. It’s easy to understand doing it than explain it (the video of the cdj is an example) so if Traktor doesn’t allow this with Link then you should tap the tempo into the Master to update Link.
In the help NI recomends set “Beatsync” in sync properties and set the “downbeat” manually. More details in the web.
I’m using Tempo Sync just because I want to be in charge of the Tempo of all Decks independently of each other.
In Traktor you have the Master Clock where all the 4 Decks “can” be synced with it which is not the way I play. For me, the Traktor Deck on Air must be the master (controlled by the Cdj’s), setting the global Tempo to the LINK “wire”, which is controlling my Maschine 2 Tempo because I opened Traktor first and then Maschine. This config (the way I’m dreaming about for months) doesn’t seem to work in Traktor for now.
So Traktor can’t set which Deck is affecting link or it’s due you want to work them without sync them to the Master? Since I haven’t Traktor atm I can do test by myself sorry…
The point is that you are asking for isn’t the mainly idea when Link born but totally doable of course. It’s only needs a engage/dissengage link buttons (or better linked to fader/xfader possition so if something goes Main then control the transport and if you wrecked then bpm should go nuts alongside and f**k yourself/oneself as part of the game… but under your choice of course).
The way Ableton imagined it was more to keep all parts playing straight to external/internal tic without latency between them so internal bpm adjusting of each part should be automatically corrected being human or machine like… human band.
Idk if there is any workaround but if it’s a lack featured probably it will be implemented in Traktor sooner than later (and Sdj/Pioneer too) since Ableton (and iOS) need Link and the actual “state of the Art” requires both.
If you ask me, maybe turntables are the only which could by bypassed since there are no more the center of setup but I hope (and wish) that demand goes implemented and keep the turntable part of the game. Dj808 points it, Remix decks step sequencer points it and Pioneer needs it (or open their own Pro-link syncro to third party)
I posted on native instruments testers forum about this exact issue.
with link enabled in Traktor, you have to use “sync” and the way I now DJ is to not go through each track and precisely set the beatgrid.
(I used to back before I got timecode vinyl)
now I just play the tracks and nudge the track to line the beats up, regardless of the grid positioning.
I cant use link with my method in Traktor.
I still manually set the BPM in Ableton to the same as the current track in Traktor and manually nudge Ableton live or a Traktor deck.
but do i need a proper mac or pc to get it working or will it work with cdjs and iPad with launchpad only?
I’d imagine it would be possible to use it with a cheap single board computer like a Raspberry Pi.
In fact I already ported it to RPI… Works flawless – the rpi creates an AP where you connect any wifi device… Check my fork of the beat-link-carabiner
Any chance to allow DVS input adding xwax/raspi library to control the waveforms like a “pro-linked” cdj? It seems some interesting based in comments…
hey, could this somehow allow me to send bpm data via link to a djm mixer from serato dj?
Currently, only the Pioneer gear can control the tempo of the Link session. I may someday implement the other direction, which would let you control the tempo of a Pioneer mixer or player from Link, but that requires more detailed emulation of the player behavior than is finished so far.