Controller support for the Pioneer DDJ-SX3

Hello everyone!

I recently picked up a used Pioneer DDJ-SX3 for a good price, and have been having a blast with it. I was sad to see no ready-made controller script.

Just wanted everyone to know that I began modifying a DDJ-SX2 controller script I found online. It was marked DDJ-SX3, but it didn’t work with the SX3, and appeared to be only SX2, so it was either a work-in-progress, or mistyped, and it appears to have been abandoned.

The script I found came from here: GitHub - ardje/Mixxx-Pioneer-DDJ-SX3: Pioneer DDJ-SX2 MIDI Mapping for Mixxx

I haven’t forked/cloned the project yet, but I am considering it. I haven’t much experience with git, but I will learn, then I can enter all my changes, and hope someone can help collaborate to fix the remaining issues with me.

So far it’s working pretty well for me, but the slicer is still not working.

Would anyone like to try what I’ve done so far, and offer feedback?

PIONEER-DDJ-SX3 Controller (19.2 KB)

Don’t laugh at the comments in the script. Some were done by someone else, and the obviously-mine ones will not remain like that, I wanted a quick way to find the changes I made.

I’ve managed to get a lot of the issues fixed up.

Changelog 07/03/2021

  • Fixed the vu meter. It was not working, and the scaling algorithm wasn’t right. I came up with reasonable vu meter code, which does the trick, but would love to see if anyone has a better solution.
  • Fixed a problem with the jog wheel. There was an annoying delay introduced that would occur when one releases the jog wheel before audio would resume playing.
  • Fixed the quantize LED
  • Fixed the keylock LED
  • Fixed the FX buttons and related LEDs
  • Added the ability to set defaults for which features are enabled upon startup (eg: quantize, keylock, FX assignment) to one of: Off, On, Last Used
  • Added the ability to set defaults for the master volume, headphone and headphone mix. For my particular setup, the defaults weren’t ideal, and changing them upon execution was annoying.
  • Fixed various controller mapping issues.

Cool. I remember there were already requests for supporting the SX3.

Would you mind opening as PR for the mapping? When finished new mappings could be added to one of the next 2.3.x releases. If mappings are included it will be much easier for users to discover and use them.

Are you familiar with the Git workflows? Please fork the Mixxx repo on GitHub, create a feature branch from 2.3 (not main), add your commits, and finally publish a draft PR.

Thanks for working on this! Why did you start from an unofficial DDJ-SR mapping instead of the DDJ-SX mapping included in Mixxx which has been thoroughly reviewed? I don’t want to tell you that you have to start all over from the DDJ-SX mapping to get this merged if you’re already (almost) done, but it would make reviewing the mapping considerably easier for us. I anticipate the changes needed to get the DDJ-SX mapping working with the DDJ-SX3 would be pretty small.

Using an already reviewed mapping as the base would indeed be the preferred approach. You could then adopt everything you need from the custom SR/SX2 mapping. Did you consider this?

I had started with that unofficial one simply because it had the title of being for the SX3 on git, so I thought it might have been more complete, but I’m ok with working with an already-reviewed SR/SX2 mapping.

I really just wanted to get something, anything working so I could start using the controller. Will be easy to migrate my changes to the other source.

I’ll get working on it.

1 Like

I just installed GitHub Desktop.

No, I’m not familiar with git workflows.

I think I already made my first two mistakes. LOL.

First, I cloned the repo. I’m thinking I shouldn’t have done that, since cloning != forking.

Second, I was hovering over the fork button on the git website to see if it could provide any tooltip info, my finger twitched and accidentally clicked fork, and the main branch was still selected. Now I’m not sure what I should do.

I’m usually not apprehensive about digging into something unfamiliar, but I have to admit, I think I could use a quick lesson in git before going any further.

Forking the upstream repo mixxxdj/mixxx is the first step. Then clone your forked repo (which will be referred to as origin) locally.

Thank you.

I think I understand it. Fork. Clone. Create a branch. Edit code. Push. Compare & Pull request, then create pull request.

If I have any issues, I’ll come a knocking.

1 Like

Sounds good, Just make sure to create your branch from the 2.3 branch, not main.

The biggest difference from the original DDJ-SX I think is the colored hotcue buttons.

The vuMeter is also different:

  • SX3 has 9 segments, where-as the SX has 10 segments.
  • SX3 seems to invert the meter, so as the output decreases, the number of illuminated segments increases using the original SX script.
  • SX3 doesn’t seem to use all the level values that the SX does, in that:
    • top-most red peak segment = 0x00 through 0x06
    • second red segment = 0x07 through 0x09
    • top-most yellow segment = 0x0a through 0x03
    • and so on, till all segments are off at 0x2e

And the hex range that affects each segment are:
(from top-most segment to bottom-most) 7 ,3, 3, 3, 6, 6, 6, 6, 6, 1+

Since there are only 9 segments, I would have thought that there would be only one hex value for each segment, or that the additional values were there to change the way the segments behave, but I observed no behaviour other than steady-on.

I tried to scale the values from Mixxx to the vuMeter, but it looked terrible. Perhaps my scaling math was to blame.

I came up with a simple algorithm to work around this, but I’m not sure if it’s elegant enough. Sometimes simple is better, more efficient.

Don’t worry about it too much. If it matches the meters on screen, it works well enough.

1 Like

If anyone wants a quick and dirty DDJ-SX3 controller map that mostly works, please see my initial post. It’ll get the job done until I can finish a proper controller map.

If anyone wants to track the development progress for a proper clean controller map that’s based on the existing DDJ-SX controller map, please visit: Tristan’s Pioneer DDJ-SX3 Controller Mapping (not ready for use)

I’d like to thank everyone who helped me get started with git. I think I’m getting the hang of it.

I decided to begin with the vu meter, and was able to make it work correctly, in spite of its quirky use of values.


When I modify the input map in Mixxx, and then copy the resulting xml file to origin, the entire file shows up as having changes throughout it. It looks like the export order changes.

Question: What is the best way to approach this, so that it doesn’t look like I have a gazillion changes when I’ve only modified the value of perhaps 8 entries?

Reordering of the XML elements is an unresolved issue. I recommend to edit the XML manually and leave the mapping in Mixxx untouched.


The conversation is so intriguing, I’d really like to get started like you guys on all these. Anyone with materials and directions to what I can start with for just a dummy project?

Yes, @TristanYoung posted the link to his GitHub fork above. If you would like to work together on that, it would be great if you branched off from that and made pull requests for @TristanYoung’s fork until the mapping is ready to be submitted upstream.

Hello TyraNoah,

You want to help with the DDJ-SX3 mapping? That would be great.

Sorry, I don’t have much time,
But I am using this for a long time:

it’s a fast copy of what is in my .config directory.

The SX3 is beautiful, so I was already thinking about finishing my hardware usb sniffer to get the most out of it.
I succeeded into getting mic 2 routed to the PC as PCM 7&8 for instance (channel 4 input) instead of it going straight to master out. I succeeded twice even.
But the 3rd time, no :-(.

anyway, lack of time :-(. Please take a look. It mostly is a fork of someone else’s sx2, merged with yet another one’s sx2 and fixes for the sx3.

Ah, I see you did find it. I had a tiny improvement from zulip chat, or maybe major, I dunno. But it made my spinners go spin. And I really love that.
I think most important thing for that is the heartbeat somewhere.