Notes
I’ve recently been using the Mixxx software for DJs. This page includes some personal notes on my own use cases, what’s good, what’s bad, etc. It is not really made for general consumption, but is thrown up here anyways. It will be a bit rambling and/or ranty at times, most likely.
Let’s get my overall impressions of the software out of the way up front: it’s absolutely great and I recommend it over the commercial alternatives for DJs of all stripes (except maybe Radio DJs, it’s not really for automatically scheduling radio programs, but people seem to love it for that use case anyways, but maybe that’s because it’s the closest thing that’s free?). This is one of the very few Open Source pieces of software that I can say is just good, and not just “yah, it’s not as good as commercial stuff, but for moral and ideological reasons I choose to make some sacrifices to use it”. No, Mixxx is actually just good, full stop.
My Use Case
My use case for Mixxx is two fold. The first is for DJing for social dances (Lindy Hop and Blues). This case is simple enough that I know DJs who just use two media players tied to different outputs (headphones and mains) and call that good enough: you preview tracks and build a potential playlist in the headphone software, then when a dance ends you drag the next one that you’ve cued up into the software playing on the mains and call it a day. The requirements for social dance DJing are such that this is perfectly fine, but having headphone cueing and waveform visualization is nice, so Mixxx adds what it can here even though something much less complicated than full DJ software would also be okay. I don’t even really need a controller here unless the dance doesn’t provide a sound board, in which case Mixxx also would let you use a small controller to provide software fade outs, which is a nice benefit.
My second use case is also for a social dance, but for one with slightly more complicated requirements. Contra dancing is traditionally always done with a live band, and the dance itself is more structured than improvisational dances like Lindy. A caller tells the dancers what moves to do in time with the music slightly ahead of the beat. They let the dance run as long as they like while the band plays a tune with a specific structure that fits the choreography of the dance. Bands traditionally switch tunes half way through a dance, and dances last until the caller signals when they should end (normally with 2 or 3 more times remaining through the dance).
There are contras that use recorded music, but they suffer from a few problems:
- Recorded music is often meant for a CD, so it is ~3 minutes instead of the 7–12 needed for a dance,
- the band needs to be able to respond to the caller and the caller needs to be able to respond to the band, this isn’t possible with recordings obviously,
- not being limited by dancers skill, bands sometimes make their recorded music much faster or slower than is appropriate for dancing,
- and recorded music is often “crooked”, meaning that it doesn’t strictly fit into the requirements for a contra dance (musicians often prefer to do something more interesting if they’re playing a tune for a recording and not for a dance).
Mixxx is perfect for this use case! Just like any DJ I can mix several tracks together (though the music does end so that people can find a new partner, this isn’t a full evenings set where music never stops like a club DJ would do), I can loop and play sections of the track over again to make it fit the contra structure (even if the original track didn’t), I can skip over between times through the dance that would break the timing, I can speed up or slow down a recorded tune to make it fit the dance better, and I can even keep a tune going until the caller signals how many more times through they want then mix in a nice ending for them.
Mixxx is absolutely perfect for this, and makes for a much more enjoyable dance than you’d get having the caller play music off their phone. It also means you can dance to the most well-known high-energy contra dance bands whenever you want instead of hiring the same handful of low-energy local bands every week (with apologies to those bands, it’s nice to have live music, but it’s also great to be able to get the big touring bands even if you can’t afford to hire them regularly)!
P.S. I don’t do “techno contra” (contra to pop music and rave lighting, it has nothing to do with actual techno music except that it might sometimes use that too), but Mixxx is good for that as well.
Good Stuff
- One of the best UI’s in any software (with the caveat that you probably have to be sighted to use it, as far as I can tell there are no accessibility features, see the problems section below).
- Absolutely rock solid audio handling (on Linux/Pipewire, can’t speak for other stuff)
- Great controller support. Keeping old controllers running that would otherwise
be relegated to the landfill is one of the best things about Mixxx.
That said, this one has some caveats:
- the quality of the built-in mappings varies greatly, to say nothing of the user-provided mappings on the forums,
- and the manual is very incomplete so it’s a bit hard to research what controllers work well and have solid mappings.
Bad Stuff
These are personal notes and while they are public, they are not meant to be an angry take-down of the developers or their process (who may have good reasons for doing the things they do that I disagree with). There’s a reason I’m not sending these on the forums.
I’m going to avoid “my favorite feature is missing”, even if it’s a major problem for me. Most of these are with the development process (plus one serious bug and the usual complaints about developers not taking accessibility seriously), but on the other hand, the software overall is very stable and good, so I suppose I shouldn’t critique a process that seems to be resulting in robust well-made software. If you are not a software developer, most of these probably won’t matter all that much and can be safely ignored.
I don’t contribute to the C++ side because I hate C++ and everything about developing with it, so be aware that most of this is me being hypocritical since it’s not like I’m helping (though also most of the complaints are about stuff they turn down anyways, so maybe it’s fine to complain while not doing it myself).
Anyways, this is all starting to sound defensive, so I’ll leave it at that and just get to the list. The point is: if you feel the need to reach out to me to tell me about how right/wrong/whatever this list is: don’t.
- The homepage is terrible (seriously, on the website you get what looks like a stock image of code on a terminal… there is literally not even a screenshot of the actual software, I imagine most people who aren’t developers see the website and never bother downloading the software; why would they?).
- Lack of accessibility features / disinterest from the developers. This seems like the kind of thing that we as software developers should always prioritize whether we like it or not. Their official response seems to be “we don’t use screen readers, therefore we shouldn’t have to try” and/or “maybe it will be easier with the Mixxx 3.0 interface”, which may very well be true but doesn’t help you if you use a screen reader now and it seems extremely problematic and unfair to ask users of accessibility software to wait for some nebulous future time to maybe be able to use the software. The best time to add accessibility features was yesterday, but if not, today will have to do. Stop putting it off until 3.0 (even if you have to re-write them all for 3.0). This is the closest I will come to demanding labor from developers doing this for free, I am aware of the vaguely problematic nature of that, but this really is the basics and everyone ignores it for ableism related reasons and it drives me up the wall (okay, rant over).
- As of 2.5.2 there is no hotplug for controllers, plus if it is unplugged it often results in a segfault which is pathologically bad behavior (see #14358)
- Development of a lot of new features that involve theming is stalled due to the maintainers wanting to write a new theme engine first which probably wont' be released until 3.0. Lots of small relatively easy fixes are put on the back burner for this reason (or at least, that’s what it looks like from reading through issues, I’m not sure what the reality of the situation is or if they’d accept PRs from other contributors).
- Extremely difficult to get code review if you do submit a contribution, plus they nitpick to death and every reviewer has their own criteria, one will tell you one thing, then one will demand you undo it. Asking for nits to be fixed is fine, we want to make good software, but what we don’t want is demanding that they be fixed immediately in a giant PR, or demanding that other semi-related features be fixed before your PR can be merged, etc. and then refusing to merge because of a small nit that could easily be fixed later and where it wouldn’t be a huge problem if it never did get fixed.
- There is talk of adding AI features. Absolutely fuck every single asshole who thinks this is okay. Hopefully these people never get their PRs merged, but it doesn’t sound like there’s a ton of pushback except from me, so I suspect I’m fighting a losing battle here and will at some point have to stop using their software. This really needs someone who can talk people around and explain why this will hurt the software, the planet, and the people utilizing it, but I’m not that person. I’m just angry at how dumb everything to do with AI is and that’s not a helpful way to bring people around to doing the right thing.