[HN Gopher] Mixxx: GPL DJ Software
       ___________________________________________________________________
        
       Mixxx: GPL DJ Software
        
       Author : brudgers
       Score  : 345 points
       Date   : 2025-01-20 15:53 UTC (7 hours ago)
        
 (HTM) web link (mixxx.org)
 (TXT) w3m dump (mixxx.org)
        
       | drdirk wrote:
       | What does GPL stand for?
        
         | frob wrote:
         | GNU General Public License:
         | https://en.wikipedia.org/wiki/GNU_General_Public_License
         | 
         | It's one of several options for software licenses a developer
         | or team can use when distributing a piece of software to help
         | ensure that it and its derivates stay free and open-source.
        
           | TeeMassive wrote:
           | I like your "no bad questions" attitude and your
           | straightforward answer!
        
         | asimovfan wrote:
         | Its like when Morpheus goes into the Matrix to free more
         | people.
        
           | BlueTemplar wrote:
           | Matrixxx (and Trinity, of course, wears a GIMP suit)
        
       | apt-get wrote:
       | Been using it for the past few years, nothing bad to say about
       | it, lovely piece of software. Vendor lock-in is very present in
       | this field, with different brands of controllers supported by a
       | myriad of proprietary DJ applications all more interested in
       | onboarding you to their music subscription services rather than
       | implement useful features or support open protocols.
       | 
       | Meanwhile, Mixxx allows you to write your own adapter scripts for
       | any controller you have (as long as it outputs MIDI), and there's
       | a built-in library featuring scripts for the most common
       | commercial controllers and MIDI devices out there.
        
         | noman-land wrote:
         | I tried it many years ago and this didn't work. Can Mixxx be
         | used with the Rane mixers used with Serato back in the day?
        
           | Mashimo wrote:
           | Does the mixer speak midi? In that case probably.
           | 
           | Is there already a mapping for you device? Check the manual
           | https://manual.mixxx.org/2.5/en/
        
             | crtasm wrote:
             | specifically:
             | https://manual.mixxx.org/2.5/en/hardware/manuals#hardware-
             | ma...
             | 
             | and if not there, the forum might have one:
             | https://mixxx.discourse.group/c/controller-mappings/10
             | 
             | I notice that HID is also supported: https://manual.mixxx.o
             | rg/2.5/en/chapters/controlling_mixxx#c...
        
             | SamWhited wrote:
             | Even if there's not a mapping Mixxx has a "MIDI Learning
             | Wizard" (I forget what they call it) where, assuming it
             | speaks MIDI, you can plug it up, choose an action, and then
             | move the control for that action and it will figure out how
             | to wire it up. For simple configurations that don't require
             | scripting (ie. no setting LEDs on the controller or what
             | not) you can get a fully functional setup for a controller
             | Mixxx has no knowledge of without writing any JavaScript or
             | XML at all!
        
         | input_sh wrote:
         | To be fair, every commercial competitor (like Rekordbox and
         | Traktor) also supports mapping MIDI devices that are not
         | officially supported.
         | 
         | But in my experience, you'll never be able to control the
         | jogwheel as precisely as in officially-supported hardware-
         | software combo.
        
           | shermantanktop wrote:
           | Is it latency? Or granularity? MIDI has upper limits on
           | both...or is it a more subtle quality like ballistics?
        
       | cies wrote:
       | I've been using this for the few DJ sets I do per year. Very
       | complete software, very stable also.
       | 
       | Sadly I have to use RekordBox now that I want to not bring the
       | laptop + DJ controller, but just a USB stick. And RekordBox does
       | not run well on Linux (tried VirtualBox and Wine, both failed
       | attempts).
       | 
       | Sadly there's no RecordBox clone, or "export to RekordBox USB"
       | feature on Mixxx.
        
         | diggan wrote:
         | > And RekordBox does not run well on Linux
         | 
         | RekordBox doesn't even run well on Windows, so hard to imagine
         | what worse looks like.
         | 
         | But yeah, if Mixxx (or other FOSS software) could offer writing
         | playlists into USB sticks, I'd get rid of RekordBox yesterday
         | because few software out there works as bad as RekordBox.
        
           | quesomaster9000 wrote:
           | I considered renting out some Pioneer equipment to add
           | RekordBox playlist writing support, mainly because I'm in a
           | similar situation. Mixxx does have support for reading USBs &
           | SD cards, but not writing ;_;
           | 
           | Unfortunately it's far down my priority list given the cost,
           | my unfamiliarity with Mixxx development and that I rarely do
           | anything without Mixx.
           | 
           | But this is absolutely what ecosystem grants/bounties should
           | be for.
        
             | phntxx wrote:
             | Could not agree more. I recently made the switch to
             | exclusively using Linux on Desktop machines, yet I now have
             | to have a Windows PC laying around for the sole purpose of
             | updating my USB using Rekordbox.
        
             | diggan wrote:
             | > But this is absolutely what ecosystem grants/bounties
             | should be for.
             | 
             | I'd be down to fund a bounty/grant for this (and I'm
             | clearly not alone), if anyone is looking for booty :)
        
               | Mashimo wrote:
               | See my other comment to parent, there are two libraries
               | who started, but did not finish. Maybe they can be
               | incentivized to start up again.
        
             | Mashimo wrote:
             | I think there are two projects who worked on it a bit:
             | 
             | * https://github.com/kimtore/rex
             | 
             | * https://github.com/Holzhaus/rekordcrate (Current status
             | of export: https://github.com/Holzhaus/rekordcrate/pull/103
             | )
        
               | hlzhs wrote:
               | Mixxx dev and main author of rekordcrate here. The issue
               | is that the format is an ancient proprietary format that
               | does not have been reverse-engineered to a degree that we
               | can properly write Rekordbox DBs yet (Rekordcrate is
               | based on the work done here: https://djl-
               | analysis.deepsymmetry.org/rekordbox-export-analy...)
        
             | copyleftdj wrote:
             | Would be cool if there is Foss firmware to install on
             | pioneer cdj. It just feels better for a lot DJs. Any
             | projects in this direction?
             | 
             | BTW, the DJ collective I'm with has Pioneer CDJ. If anyone
             | need use the hardware let me know. I'm trying to get them
             | to start using open FOSS software, but it is hard.
        
               | Mashimo wrote:
               | You could put a lot of time and effort into getting your
               | own firmware for CDJs .. or you could just connect them
               | via USB to an pi running mixxx.
        
               | nzoschke wrote:
               | Haven't tried it myself but CDJ-3000s have been rooted.
               | 
               | https://github.com/connorworley/cdj3k-root
        
             | fragmede wrote:
             | > RekordBox playlist writing support
             | 
             | Without the Rekordbox beat analysis, you'd only be getting
             | track names, and you can achieve similar functionality on
             | the Pioneer side by just putting the files for a each
             | playlist in a separate folder.
             | 
             | There's a kaitai bin format parser config file for the usb
             | db file but kaitai isn't expressive enough to read it
             | properly from that.
             | 
             | Pioneer (err Alphatheta)'s stranglehold on the industry is
             | a shame due to lack of interoperability, among other issues
             | with Rekordbox.
        
               | nzoschke wrote:
               | An export db with title, artist, album and rough BPM
               | could be useful to interoperate with the native browse
               | and search menus on a CDJ.
               | 
               | Without beat grids have to best match by ear but that's
               | par for the course for many DJ scenarios.
        
               | fragmede wrote:
               | https://djl-analysis.deepsymmetry.org/rekordbox-export-
               | analy... (and playlist entry rows) should have a complete
               | enough description if someone wants to give it a try
        
               | quesomaster9000 wrote:
               | The Rekordbox.xml format [1] is quite simple. Note the
               | `<TEMPO>` and `<POSITION_MARK>` tags.
               | 
               | But Pinoeer can be weird and there's a lot of old (even
               | ancient) equipment out there, so sometimes it's a case of
               | finding the lowest common denominator and sticking to
               | that.
               | 
               | [1]: https://cdn.rekordbox.com/files/20200410160904/xml_f
               | ormat_li...
        
       | helpfulContrib wrote:
       | >GPL DJ Software
       | 
       | Its kind of a nuisance that, as a requirement to build Mixxx on
       | MacOS, ones has to use foreign binaries, disable Gatekeeper, run
       | a 'first build', and from that point on .. can treat the project
       | as a regular CMake project. Re-enable Gatekeeper after the 'first
       | build'.
       | 
       | Hmm.
       | 
       | What are the custom binaries for? Surely not cmake. Not having -
       | yet - done this myself (until I can put it in a VM), I'm
       | nevertheless kind of curious about this necessity.
       | 
       | Any Mixxx/MacOs devs care to describe the contents?
        
         | bri3d wrote:
         | You can just read the source? mixxx-deps come from a build
         | process sourced from:
         | 
         | https://github.com/mixxxdj/vcpkg
         | 
         | The same binary-backed build process is present on Windows,
         | too, presumably to keep people from needing to go through
         | dependency hell to contribute to the project.
        
           | hlzhs wrote:
           | That is exactly the reason. Also, some libraries we are using
           | are not on homebrew (and we cannot easily pin a specific
           | version).
           | 
           | Another reason that we'd like to reduce the maintenance
           | burden by using a similar setup for windows and macOS deps.
           | Our dev team is small, and almost all of us use Linux. For
           | macOS in particular we don't have anyone on the core team
           | that uses it as their daily driver, which may also play a
           | role when talking about the DX in macOS.
        
       | djaychela wrote:
       | Used mixxx to do the djing for my wedding last year. Created a
       | collaborative music voting site for the guests, then got all the
       | music and made a mix which worked really well, even going between
       | genres. Had a lot of fun playing with it getting everything ready
       | and it worked with a couple of DJ controllers bought cheaply
       | without any issue.
       | 
       | I even made a little program to read the now playing track from
       | the sqlite database which then allowed the lights to follow the
       | music (for complex reasons I don't have time to explain).
       | 
       | Most importantly it worked on the night without missing a beat.
        
         | jesprenj wrote:
         | Can you share the program that reads the now playing track? We
         | use Mixxx at a student radio station and we could maybe try
         | using something like this to show the now-playing track on the
         | website.
        
           | djaychela wrote:
           | I will see... Not being evasive but I'm experiencing terminal
           | illness at the moment so I'm all over the place. It wasn't a
           | complex bit of code though, but I'll see what I can find.
        
             | corint wrote:
             | Wishing you well - sorry to hear that you're in ill health.
        
               | djaychela wrote:
               | Thank you. Sorry, I had a look but I didn't find the code
               | (it's not in the github repo for the rest of the system I
               | made, and I no longer own the laptop I wrote it on so
               | it's my bad).
               | 
               | Someone has posted something similar, but it was
               | literally just about 10 lines of python that read the
               | right key in the dictionary and then posted that to a
               | flask web page that another part of the system read to
               | know what track was being played. I'm not a great
               | programmer and it took me maybe 15 minutes to do, so it
               | should be easy enough!
        
             | tomcam wrote:
             | So sorry, brofus. My best to you and yours.
             | 
             | Also, your channel is fantastic. You're a good teacher and
             | your voice is excellent.
        
           | Mashimo wrote:
           | * https://github.com/erikrichardlarson/unbox
           | 
           | * https://github.com/ViktorNova/mixxx-now-playing
        
           | Sn0wCoder wrote:
           | I have not used Mixxx nor do I have it installed, but might
           | download to check it out.
           | 
           | But..... If its always in a SQLite DB you should be able to
           | use DB Browser for SQLite to inspect the DB Schema and then
           | write a bash/python (whatever) script to pull the info out.
           | 
           | RESULTS=$(sqlite-utils "data.db" " SELECT song, artist,
           | duration, FROM my_table WHERE song = 'CURRENT';")
           | 
           | RESULTS=$(sqlite3 data.db <<EOF SELECT song, artist,
           | duration, FROM my_table WHERE song = 'CURRENT'; EOF )
           | 
           | I have no idea what the schema looks like but those are just
           | some examples of how straightforward it might be. Run it on
           | CRON (whatever) update as needed.
           | https://cronitor.io/guides/python-cron-jobs
           | 
           | Once you have the Schema an LLM could most likely do the rest
           | if you are not a programmer, but still need someone to get it
           | added to the site.
        
           | raphman wrote:
           | Not sure whether that's the correct way but it seems to work.
           | AFAICT, there is no "now_playing" field in the sqlite db -
           | but tracks that start playing are added to the
           | `PlaylistTracks` table. That means that if you started two
           | tracks and then pause one or the other and restart it, no row
           | will be added. Only adding a track from the library and then
           | playing it will add to the PlaylistTracks list.
           | 
           | (Is there a simpler solution I missed?)
           | import sqlite3       import time       from pathlib import
           | Path       home = Path.home()              con =
           | sqlite3.connect(f"{home}/.mixxx/mixxxdb.sqlite")       cur =
           | con.cursor()              def get_track_name():
           | global cur           trackid = cur.execute("SELECT * FROM
           | PlaylistTracks WHERE id=(SELECT max(id) FROM
           | PlaylistTracks);").fetchall()[0][2]           trackname =
           | cur.execute(f"SELECT * FROM library WHERE
           | id={trackid};").fetchall()[0][2]           return trackname
           | now_playing = get_track_name()       print(now_playing)
           | while True:           if (np := get_track_name()) !=
           | now_playing:               now_playing = np
           | print(np)           time.sleep(1)
           | 
           | Edit: FWIW, unbox [1] uses the same approach. Edit 2: yes, I
           | should have cleaned up my SQL statements.
           | 
           | [1] https://github.com/erikrichardlarson/unbox/blob/2182f227a
           | 0fc...
        
         | btown wrote:
         | What did you use for the collaborative music voting - or did
         | you make something yourself? For different use cases, I've seen
         | everything used from collaborative Spotify playlists to Google
         | forms, to those "pay a dollar to bump your song request" kiosks
         | in bars! The parallels to ranked-choice voting in politics are
         | relevant too - as well as how you give people a feeling of
         | agency, even if you as the DJ inevitably have veto powers.
         | 
         | I'm not surprised that startups haven't tackled this, as you
         | inevitably run headfirst into licensing issues - but I'm
         | curious what exists in the open-source world for this!
        
           | djaychela wrote:
           | I made something custom. I can't share the code for it (see
           | my other reply for why), but here's the general deal:
           | 
           | Wedding website was a django site, with accounts for everyone
           | I invited. I had a separate part of it where the guests could
           | choose an RGB colour, and then choose tracks by searching. I
           | used a spotify API for this, so when they chose a track, if
           | someone chose a similar one (say a specific mix) then they
           | could see this and vote for that. Each guest could choose 10
           | tracks. I used some HTMX for this as well (first time) and it
           | generally worked pretty well. Database stored the spotify
           | ID/UUID/whatever for each track
           | 
           | Once everyone had voted, I then bought all the tracks which
           | we were going to play - reason being that I couldn't rely on
           | WiFi on the day, and wanted to be 100% sure it would work,
           | plus I couldn't "DJ" from spotify tracks.
           | 
           | All of the tracks were then renamed including their spotify
           | ID/UUID/whatever, so the system knew who had voted for a
           | specific track.
           | 
           | I then made the playlist up in Mixxx, and trimmed tracks to
           | fit better, and made it work musically (my wife is excellent
           | at this, she made it really work, mix wise). Made sure it all
           | played OK.
           | 
           | The other part of the system was a custom light setup, with
           | sound-reactive LED bars I made up (using ESP8266 and WLED
           | firmware with 150 LEDs per 'stick') with them all being
           | controlled by a custom controller. This system read the track
           | from the Mixxx system (via HTTP request to a flask app I
           | wrote that read the sqlite dB from mixxx to know what track
           | was playing), and then coloured the lights with the colours
           | of the people who had voted for the tracks. Also if you went
           | onto the dancefloor you could 'swipe in' via an RFID label
           | which was in the wristbands, which also reacted to lights and
           | were colour-controlled over DMX.
           | 
           | The light patterns were sometimes random, or if one was good
           | for a specific track then I programmed that into the system.
           | 
           | It was all spaghetti code, and the first time I used FastAPI.
           | The code is terrible, and I'm only making it public as I
           | thought it might be useful to someone.
           | 
           | https://github.com/djaychela/wedding_controller
           | 
           | I've just had a terminal cancer diagnosis and am no longer
           | doing anything other than trying to stay alive. So please, no
           | grief about the code! I'm sharing this to try to help someone
           | else if they ever want to do something like this...
        
             | ustad wrote:
             | Thanks for sharing this - it's a really cool project! I
             | love the creativity and thought you put into combining
             | music, lights, and interactivity in such a unique way.
             | 
             | Wishing you all the best, and thank you for contributing to
             | the community with this, especially under such difficult
             | circumstances.
        
       | quesomaster9000 wrote:
       | I'm really happy that 2.5 added 'beats until next marker', which
       | together with a USB controller from Numark I have pretty much
       | feature complete DJ setup for under $500 (including cost of
       | laptop & controller) without having to rely on Windows, Mac,
       | subscription licenses or feature-crippled 'lite' versions.
       | 
       | And it's surprising how quickly people adapt to it when they're
       | used to other setups, within an hour a few people have gone from
       | 'oooh, can I have a go' to showing me their own tips, tricks and
       | different styles.
       | 
       | Especially combined with a youtube & soundcloud downloader
       | running on a different workspace, I can get pretty much any track
       | into the library within a minute or two.
        
       | starkparker wrote:
       | Mixx is sneaky good as a TTRPG soundscape mixer. You can queue
       | layer multiple ambiance tracks over tempo-matched music, build
       | soundboards, and hook it all to hardware controls.
       | 
       | It's overkill, but a lot of similar tools either lock you into a
       | media ecosystem, lack some power-user functionality, have a
       | subscription, or don't work at all on Linux or macOS.
        
       | iammrpayments wrote:
       | I thought this was Donald's Knuth Mix computer at first
        
         | brudgers wrote:
         | If only he had wanted to DJ organ music.
        
       | treve wrote:
       | Also works great with my Traktor mixer. Traktor doesn't have
       | linux support for their software, so I was glad my mixer didn't
       | brick after the switch
        
         | sim7c00 wrote:
         | thanks for commenting this. all i needed to know :D
        
       | tmountain wrote:
       | I've been using this to make mix tapes at home (bought a vintage
       | tape player). It has awesome cross fading capabilities, and it
       | does volume normalization out of the box, so it's a very nice
       | piece of software for those features alone. Playlist and library
       | management is also solid. My only complaint is that the UI isn't
       | very intuitive for a non-DJ, and it took me some time to figure
       | out how to do basic stuff, but it's all there in the docs, so you
       | can certainly figure it out.
        
         | ThatMedicIsASpy wrote:
         | I've been setting up a few radio stations with playlists for
         | azuracast for home use. The auto DJ with auto cue is amazing.
         | Next stop is create a radio with a raspberry pi maybe with an
         | amp hat as well.
        
           | radley wrote:
           | How does the auto DJ compare to something like Pacemaker?
        
       | bramgn wrote:
       | What does GPL actually do?
        
         | sho_hn wrote:
         | In this space, probably the biggest effect might be that HW
         | vendors of DJ kit cannot fork this software to bundle with
         | their HW and avoid sharing their improvements back, so people
         | using other HW can still benefit.
        
       | weinzierl wrote:
       | I use it simply as an audio player. I like the way I can queue up
       | songs and then let the Auto DJ play. I know other audio players
       | can in principle do that but in Mixx it is very explicit. I also
       | like to see key and BPM just to satisfy my curiosity.
        
       | profsummergig wrote:
       | I want to do scratching by pushing a button on my laptop keyboard
       | (instead of dragging the spinning record with my mouse-cursor).
       | 
       | Can Mixxx do this?
        
       | ericzawo wrote:
       | RekordBox is a well known piece of s** and it's great to see
       | someone try to enter the arena. Now we need a legit competitor to
       | the DJM / CDJ's which cost, all told, >$10k for a standard, club-
       | ready setup.
        
       | HelloUsername wrote:
       | I very much like the website itself, built to work without
       | Javascript, and doesn't make any external calls as far as I can
       | tell
        
         | hlzhs wrote:
         | Thanks, we wanted to honor our user's privacy when we
         | redesigned the website.
        
       | officeplant wrote:
       | Been using Mixxx since 2015, I haven't liked every update they
       | put out, but its always been solid software.
        
       | msephton wrote:
       | I currently use DJ.Studio so I'm interested how Mixxx compares.
        
         | hlzhs wrote:
         | Just try it, it's completely free:
         | https://mixxx.org/download/#stable
         | 
         | Mixxx is entirely community driven: There is no company behind
         | it, everything is done by unpaid volunteers.
        
       | mjsir911 wrote:
       | I've had a lot of fun setting mixxx up for DJing on my steam
       | deck, with fully scriptable (in javascript) USB hid bindings,
       | I've been able to reverse engineer the steam deck's control
       | schemes to be able to mix quite portably.
        
       | kristopolous wrote:
       | Been using it since ~2006 ... it's pretty great software. Hooking
       | it up to a cheap sub-$100 MIDI controller is amazing.
       | 
       | Just looked it up - I had no idea it's from 2001 - this puts it
       | in a small group of long-active FLOSS
        
       | cpach wrote:
       | What are good controllers for using together with Mixxx?
        
         | suranyami wrote:
         | I dunno whether "good" really applies to this, but I've gotta
         | say I've been loving the cost, portability and reliability of
         | the Numark DJ2Go Touch ($AU120):
         | 
         | https://www.numark.com/product/dj2go2-touch
         | 
         | I've got a cute little portable setup using it, a Raspberry Pi
         | 5 with a 1TB m.2 SSD, 15" portable USB-C monitor and a Keychron
         | low-profile keyboard and bluetooth mouse. Works amazingly well.
         | 
         | I'm betting that just about any controller would be worth a
         | shot.
        
         | hlzhs wrote:
         | Check the https://manual.mixxx.org/2.5/de/hardware/manuals for
         | a list of built-in mappings shipped with Mixxx. There are also
         | additional user mappings on the discourse forum:
         | https://mixxx.discourse.group/c/controller-mappings/10
         | 
         | Personally, I use the Roland DJ-505:
         | https://manual.mixxx.org/2.5/de/hardware/controllers/roland_...
        
       | poopsmithe wrote:
       | I used mixxx to DJ my brother's wedding. I think it was 2013 or
       | 2014. The moment I got the signal to switch to a specific track
       | for the bride's first dance with her Father, mixxx locked up my
       | laptop. Guests were staring at me, one offered a hushed, "they're
       | waiting!" Completely unresponsive, I had to hard reboot my locked
       | up computer and boot back into Ubuntu. Then I opened VLC where I
       | played the tracks for the rest of the evening. Probably not
       | mixxx's fault, but I will never forget that moment.
        
         | mixmastamyk wrote:
         | Yep, that can happen when computers are involved, and why one
         | needs to practice with a new setup beforehand. Goes for
         | performances or rocket launches.
         | 
         | During my DJ sessions (and while dabbling in digital audio
         | files from a computer), I usually brought an old Sony Discman
         | loaded with my best tracks on a burnt CD. Kept ready at moments
         | notice in case disaster struck. Sadly crashes weren't uncommon
         | at all in the bad old late 90s when consumer OSs were unstable
         | crap.
         | 
         | I guess a smart phone could do that duty today, but you'll
         | still need to have an adapter plugged into the mixer
         | beforehand/ready to go to minimize disruption.
        
         | hlzhs wrote:
         | Mixxx dev here. I'm sorry you had a bad experience. We are
         | spending a lot of effort on making Mixxx rock stable.
         | 
         | Considering that this was more than a decade ago, I'm pretty
         | sure that this bug has been fixed by now.
        
       | ghomem wrote:
       | Mix is absolutely awesome. One of the most carefully organized
       | open source projects that I've seen.
       | 
       | Some years ago I made a Mixxx demo video with a DYI "integrated
       | controller". It demos Linux boot to Mixxx, touch screen,
       | beatmatching and some modest effects:
       | 
       | https://www.youtube.com/watch?v=DjHvW4OsQ2Y
       | 
       | Mixxx devs: if you are reading this... cheers :-)
        
       | joemi wrote:
       | I used to use Mixxx a lot about a decade ago when I was DJing
       | weekly in some bars and also had a weekly radio show. It was
       | great. I'm glad to see it's still around and going strong.
        
       | igor47 wrote:
       | Love mixxx! I use it regular for DJing with an ancient ddj sb2
       | controller
        
       ___________________________________________________________________
       (page generated 2025-01-20 23:00 UTC)