Guest Article: DJ on the fly with Mixxx and Raspberry Pi

Guest Article: DJ on the fly with Mixxx and Raspberry Pi

One of the things that make Mixxx special is that it works on more platforms that just Windows or macOS. Thanks to Mixxx being open-source, it's possible to create "unusual" setups that the developers didn't expect - for example by running it on a low-cost Raspberry Pi single board computer combined with a touchscreen. It's always great to see what cool stuff our users do with Mixxx, so when we discovered a video of it on Reddit, we asked Dennis to write a blog post about his project.

Going portable

Since the advent of small, portable netbook computers and single board computers I have been trying to downsize my DJ setup. Frustrated by power issues, lack of performance and audio quality I resorted to a bulky but solid Thinkpad, a cheap controller and my software of choice: Mixxx.

This is a small story on how developments in both open source hard- and software as well as a well-equipped parts bin ends up in a somewhat specific but useable portable DJ setup using Mixxx and a Raspberry Pi.

This was until I was commissioned to make a random sound file player for an exhibition by De Player. In a move that later proved to be somewhat overkill, I grabbed a Raspberry Pi 3 that had been collecting dust and wrote some scripts to play random audio files.

Up until then I had only worked with the original Raspberry Pi and I was quite shocked at the greatly improved performance of the Pi model 3. Out of curiosity, a quick search of the Rasbian software repository brought up a match for "Mixxx"... but wait, would it actually run?

Gaining power

To my surprise Mixxx did run fine! With new found hope of building a "laptop-less" portable DJ setup I connected my USB sound card and cheap controller only to find out the Raspberry Pi could not deliver enough current to the USB port of the controller - no surprise there.

Eager to keep the setup simple and portable, I did not want to deal with external powered USB hubs. To no avail I tried various cheap USB cards and after many more low power warnings and high latencies, my eye fell on a white label brand controller (Akiyama Pulsar) with build-in soundcard. This "Traktor ready" controller had been given to me over the previous owner's frustrations with the lack of mappings for any other software than Traktor.

Putting one and two together

Being both a controller and audio interface, the Akiyama Pulsar reduced the overhead created by multiple USB devices (?) allowing the Raspberry Pi to run Mixxx smoothly with less than 20ms latency and no underruns. Note, this is without any optimizations to the Raspbian OS (no realtime kernel, no JACK) so there is possibly room for improvement!

As there was no mapping for the controller I set out to create my own. Most buttons are easily mapped usng the GUI, but the jogwheels can be problematic. Starting from an existing community contributed mapping script that did not intimidate me (Icon iDJ) and by launching Mixxx with the --controllerDebug argument I was able to at least get the jogwheels to be somewhat reactive.

Skinning the fat

To make the setup extra portable I dressed my Raspberry Pi in a 2.8" Touch Screen that is long out of production. Being rather impractical, I would suggest getting a larger screen. Nevertheless, you will need a skin that accomodates the data you are interested in, while being readable on a small screen.

Again I started off with an existing skin, an older "minimal" skin found on in an old Mixxx install (< 2.0.0) only to find out there is no scaling, only absolute values for size and position as well a different naming convention for buttons, making it incompatible with newer skins and mappings ("library" verus "playlist" for example).

The skins provided by the later Mixxx distributions seemed rather indimidating at first but soon made me realized they are far more flexible than they look. Next to dynamic scaling using (e,e) units the newer default skins are somewhat modular. Departing from LateNight i simply deleted the style xml files for the buttons/sections I did not need, ending up with a minimal two deck view of waveforms, track name, bpm and using a leftover key on my controller to show and hide the fullscreen library!

The paths where Mixxx stores its default skins and controller mappings are different on various operating systems. Working with both OSX and Raspbian this was somewhat confusing at times. To add to this, the directory of the built-in skins/mappings is not the same as the user skins/mappings. As soon as you edit a default mapping for example, it gets copied to your "user" settings directory. Keep this in mind (and just edit/copy your custom mapping directly to your "user" settings folder).

In short

  • Get a Raspberry Pi 3 Model B or newer
  • Find a USB DJ controller with built-in sound-card.
  • Get a powerbank that can deliver the right amount of current. The specifications advertised about most electronics don't seem to tell much, there is only one way to find out...try it out and let the community know!

What is next?

The current setup is far from perfect. While being portable, allowing for a quick session at a friends place or even outdoors, the controller mapping and skin still need work. So rather than sharing an end result I hope this post will encourage you to start tweaking your own settings and contributing to the Mixxx cause!

Read more

  • Check out the complete how-to guide on this git repo. You will also find the skin and controller mapping there.
  • A separate post for the skin I modified can be found here.


This is a companion discussion topic for the original entry at https://mixxx.org/news/2020-08-22-portable-mixxx-setup/
2 Likes

you have a very cool setup! congratulations! :slight_smile:

I tried using a raspberry Pi3b+ for a slightly bigger setup using record players and an external mixer and TraktorA6 usb soundcard. Unfortunately the raspberry was too weak to use Mixxx with digital vinyl; therefore I’ve upgraded to Odroid XU4 with a 1024x600 touchscreen. Now Mixxx runs much better with DVS (10ms latency). Currently on Ubuntu 20 and Mixxx 2.3 beta.

A problem is with the touchscreen - the standard UI skin doesn’t allow to click into the library manager. Also mixxx is not really made for non-mouse use, neither is Ubuntu Mate (e.g. I can’t do a rightMouseClick in UbuntuMate with my touchscreen). So instead of using touch, I’ve mapped most of the stuff I need to a small Midi pad. using external effects which are included in my external mixer.

I’ve had some success in building Mixxx 2.3 beta for the raspberry pi4 and creating an image for it - I’ve also included @dennisdebel’s skin that he’s demoed here as standard for smaller screens. Touchscreen is working great in 2.3 beta :slight_smile:

Just download the image and flash it to your SD card as you would any other OS for the pi:
https://fayaaz.github.io/mixxx-pi-gen/

1 Like

i read this article it was great and i’m submitting to have another article about the big 3 and the small 3 software serato, rekordbox, tracktor vs vdj, cross 4 pro W/VST!!!, and Mixxx, which I was sying that if Mixxx someday gets a VST implemented in the same user ability as cross has there will be nothing mixx can’t do within ableton as a vst, especially since Max for live and that whole community would be able to implement effects and apps and changes that were never before imagined, since Max devies are basically midi scripting there is no limits to the capapbilities od using a controller to run ablton along with custom effects and app modules, really though

btw my touchscreen issues (I mentioned above) are fixed now - there is another thread about it and commenting out a line in the source code and re-compiling fixed it, but I think it will be fixed in the official version as well