Converting Old CDJ-800s Into Traktor MIDI Controllers

Last week we spotted a unique DIY project on the web where an enterprising DJ had taken old Pioneer CDJ-800s and using an Arduino board, converted them to be full-fledged MIDI jog wheel controllers for Traktor. We love the idea of taking old DJ equipment and turning it into useful modern tools, so we reached out to the man behind the project, Lee Smith. In today’s article, he shares how he made this advanced project happen – read on.

CDJ-800s + Teensy  = Traktor Controllers

Before we dive into the how and why of this incredible project, here’s the overview video showing two CDJ-800 MK1s converted into fully useable MIDI-controllers running into Traktor. The video is courtesy of the UK-based Lee Smith, who is an experienced CDJ repairman for the local Nottingham community:

This project is impressive because it takes CDJ-800 MK1s (made over ten years ago and which never had any way to directly control a digital software without timecode CDs) and makes them as useful as a jogwheel on a Kontrol S4. CDJ-800s are regularly available on eBay / Craigslist and other used gear markets for less than $250 each (sometimes closer to $100), making them very reasonably priced for this type of project. What’s especially interesting is that they can be broken units – Lee writes:

“The CDJ-800s do not have to work, [they] can have bad displays, not reading CDs, or even be dead. In theory a CDJ-1000 mk1-mk3 can also be converted too.”

Salvaged CDJ-800s: Behind The Project

We asked Lee what the genesis of this unique project was – and he wrote:

“I service and repair CDJs and turntables for local bars in Nottingham and had 3 CDJ-800s in very bad condition. I took all the best parts and made a good one for the manager at the bar I took these from.

[The other two] sat on a shelf for at least a year and this is something I always wanted to try, but never had the time and didn’t think I could actually do it. While working at The National Video Arcade repairing and converting old games, I worked with Alex, who is a very good Arduino programmer. She helped me out a few times and I picked up a few things and thought “I can use this to convert those CDJs!”, so after a few more questions I decided to give it a go. I chose the Teensy because of the number if I/O ports and the fact that it comes with HID MIDI as part of its default libraries.

It’s one thing to start gathering all the tools for a project and another one entirely to actually make it happen. Lee had a vision in mind already, so the main obstacle was just figuring out what controls from the CDJ’s boards did what. Being a repairman, he has access to a key resource: Pioneer’s service manuals:

I started with looking at the service manuals and learning how the buttons connect to the control chip. The jog wheel is just a very precise encoder and the pitch is a variable resistor. I found that the buttons work in 5 groups and each one has a resistor value that pulls down the voltage a set amount. I split the cue and play and put them on dedicated inputs, but left the others alone. My first attempt was using a bread board and looks like a spiders web. (This is the MK1, on the left in the below picture)

Each iteration of the Teensy board wired in the back of the CDJ-800. MK1, left; MK2, center; MK3, right.

I refined this with a vero board design and make sure I could remove connections (mk2). This was still a “design it as I go along” project, and the 3rd go looks a lot better (mk3).”

Beyond the connections, Lee also had to tackle programming the Teensy board to actually send out the output that would be useable and MIDI mappable in Traktor. He writes:

“The Teensy is so easy to work with. My biggest problem is latency and reading the jog wheel. I was using delays to change the speed when I pressed the jog wheel against not pressing it and wanting to nudge, but this made button presses less responsive, so with the help of Alex we looked at working out the velocity of the wheel per second as a way of speeding up and slowing down the MIDI commands sent to Traktor to move the track. I have the 14-bit pitch working and [just recently] figured out I was sending the wrong command for the jog wheel movement so it’s now working like a proper CDJ.

Traktor mapping was not too hard as for as inputs go, but turning LEDs on and off can get hard very quick. I can switch any LED on or off from Traktor and every button is mapped via MIDI.”

Build Guide + More Details

Lee Smith has been kind enough to provide all of his work to the DJTT community and the internet at large – including an Imgur gallery (embedded above) that allows anyone to see his solder points on the CDJ-800 circuit boards, specific connections, and more (it’s still an evolving work in progress, just like the project itself). Have questions about this conversion process? Speak up in the comments below and we’ll make sure he takes a peak at them!

Want more DIY projects like this for DJ gear? Check out our guide on building your own MIDI controller with a Teensy board

arduinoCDJ-800cdj-800mk1conversionDIYlee smithmidi controllerteensy++Traktor Tips
Comments (48)
Add Comment
  • Frankie Cruz Thatsmydeejay

    Greetings. Can this mod also be accomplished on Pioneer CDJ-700S players? I have three. One works perfect, one works well but display is dead; and the third has that God forsaken E-9101 code. Thanks!

  • Rykea

    I saw you have to break some connections on the mother boards (play / cue button). If some kind of switch was created instead, would it be possible for the cdj to still retain its original function as a cd player? My CDJ 1000 MK1 still work, and I wouldn’t want to lose the option of playing a CD.

    • Dzjaivnt

      No, thats inpossible because you need to cut connections and make connections on the CDJ, in normal operation you will kill the machine.

      I did buy soms broken one’s on second hand market to do this project. (I’d pay between 35 and 50euro for mk3 s 😉

  • Dzjaivnt

    We have managed to get 2 Broken CDJ 1000 MK3’s and 1 MK2 working with this software.

    We only need remove the code from jvol (its not on the CDJ 1000 Mk2/3)
    We disabled the code of average3

    The pitchfader on the mk2 works the same as the cdj 800
    But the pitchfader on the mk3 is swapped, if you go up the fader will go down in traktor.
    So i made a little code in front of the pitchbend code to manage that issue on the mk3.

    We have only some issues with the other buttons on the CDJ 1000’s, they wont work properly

  • Deksel

    This is awesome!!!
    Been looking for a great single jog wheel controller, never crossed my mind to actually build one from already great hardware.

  • DJ legion

    Have a look at the new video showing software.

  • blub

    no one will ever do this.


    Hi Guys,

    Very good post!!! Till some time inspired by I was thinking about tunning my Numark mixer by adapting him to guts even from very low budget controllers, but this idea is awesome and suprised me a lot!!!

    Can’t wait to see more of that! First time commenting here, but huge fan

  • blade

    you sir are what this site should be all about 😀 good job!

  • David Michael

    Wow, this is super cool! Will be keeping an eye on this, I have a pair of busted 800s myself…

  • Jordino Sierra Barron

    amazing… is there any chance as u have it done… to offer the “upgrade” service in Mexico? =) congrats!

  • DJ legion

    I have made quite a few improvements in the last week and how have a working lcd display so you can adjust various settings like midi channel. It can also work with the denon controller that sends track titles, but it didn’t look so good.

    • $gameOver

      Hi mate, will you be releasing the details/software in their entirety? I want to give this a go, I could do a lot based on your images but would fall short with the software, etc.. Excellent work by the way 🙂

      • DJ legion

        I am planning a new video – guide all about the software amd traktor mapping, but I have been busy with other things and the software needs a bit of work before I share. It’s the first time I did any programming in a long time so it’s all over the place and full of test stuff.

        • $gameOver

          Thats great, i’ll be sourcing a busted 800 in preparation 🙂

    • Dzjaivnt

      Will this project also work on an cdj 1000 mkx ?

      • DJ legion

        HI, Although I have not checked, I believe it will work on any of the 1000 series too. The basic components and circuits use the same designs, It’s just the processing that improves on each model.

  • thundercat

    Firstly cool idea to find a use for the old CDJs.

    That said, given how non-native (not made by NI communicating with HID) jogs function with Traktor i’m not so sure it would be worth all the effort. From my experience with the DN-SC2000’s the pitch bending is fine but the the jog scratch is at best a bit laggy. Didn’t matter what I did to tweak the midi mapping it would never perform like an S4 or any Serato controller with jogs.

    • DJ legion

      hi thundercat, The jog wheel has been the biggest challenge on the project. I dj 3-4 times a week on cdj 1000 mk3 using traktor scratch and my goal is to replicate how that feels. In the past week I realized I was using the wrong midi command while reading the jog wheel. I had 63 as dec and 65 as inc (3fh,41h), but this was on and off and I could not work out how to make it slow without big delays that added too much latency. So after a lot of time on google I found how the other command works. (7fh,01h) This one has 1 as slow dec and 63 as fast dec and 127 as slow inc and 65 as fast inc. Using a formula to workout the velocity of the jog wheel I can adjust the value to send slow or fast jog wheel movements with minimal delays and low latency. Since the video I also change the pitch command to send midi pitch bend that includes a 14bit resolution so the pitch is now as good as a cdj with 6% and as traktor can do 2% it’s even better.

      • Rich Moog

        Ssssssoooooo are you telling me that these are scratch worthy — no lag?

        (Oh dear lord, I’m a tad excited!)

        • DJ legion

          I think the lack of absolute position will make it creep out of position of you get carried away, but it does feel just like a cdj 2000 in hid mode when I ran them side by side.

          • Dubby Labby

            Has the encoder a reset position switch? Some of them have an extra gap over the regular ones to set a start endpoint to make possible error correction and other calculations (ticks for round and so)

          • DJ legion

            I would need to monitor the encoder routine and look for anything, ,but it does not have a reset line just the encoder 1 and encoder 2.

          • Dubby Labby

            The encoder wheel should be like the second and the sensor should have some kind of digital output for these trigger switch.

          • DJ legion

            I am sure it’s just a unencoded wheel like the first.

          • Dubby Labby

            I see… I can see some workarounds but drifting is a common issue. Teensy is fast enough to do the job. Why not to add a calibration routine including an external reset (plus sticker in the cdj “turntable”)?

          • DJ legion

            the teensy had encoder libs that work on interrupts and track the postilion with a counter. If I could pass this to traktor I could use absolute mode, but traktor does not accept a 14bit midi value for the jog move so it’s just move forwards and backwards with a value showing the velocity. Drifting will be a problem for serious scratch use 100%.

          • Dubby Labby

            Yes NI dropped the sysex suppor for the jog when stanton scs.1d was released. Also Dj Quartz manage to use ns7 with special version of Traktor but finally left the project due to the NI non collaboration to make it happen…
            Norbert made the cdx working with Traktor using a modified version of Rasteri code with interrupts and so but again the limitations of Traktor itself made us drop the idea. The common problem was also the “tick” setup. Djplayer has the possibility of setup the ticks per round to adapt to any encoder and sensibility but again I prefer use them (traktor and djplayer) with timecode and avoid all these drabacks.

            Do you think is possible nowadays to overpass these limitations for scratching?

          • DJ legion

            I am not a scratch dj, so it was never my intention to do that, but as I get more into this I want them to be as good as they can be. I would need to give them to a friend that is a very good turntablist and see what he thinks. Without some way to track the position and send it to traktor I don’t see how it could be 100%, but this will be very close thanks to the teensy speed. I have to slow traktor’s encoder reading to 20% otherwise it’s just too fast.

          • DJ legion

            Hi @dubbylabby:disqus
            I had a reply back from native about HID programming ect. They say they just adopt traktor to work with other peoples protocol, so the best option would be to emulate something else, but if they adopt other peoples protocols into traktor what if we could get enough people to get together with a set of commands that it would be worth them looking at it ? I did make sure to say absolute jog wheel tracking is essential in my reply.

          • Dubby Labby

            Then look at shanteacontrols as partner. It has some work already done as specific mainboard for deck controllers.

          • DJ legion

            great, I will take a look. I was also looking at the livid builder boards modules.

  • Dan Lawson

    Very impressed, what a great way to breathe life into a classic old product. This is what DJTechtools is all about! Thnaks to Lee for sharing this with the community.

    • DJ legion

      Thanks Dan. I hope to share my software once I am happy with it.

  • Ywe

    This is amazing! I love taking (midi-mappable) gear and push it to it’s limits within Traktor, but this….. this is far beyond anything I did. What a great project!