Building Mixxx 2.1.1 on a Raspberry Pi

For an upcoming holiday with a few of my friends I needed a Midi-controllable software which allows me to play different audio-samples – some might call this a ‘soundboard’. On top of my wishlist were things like

-open source

-runs on Linux (Raspberry)

-fully customizable

Fortunately, before starting a new project myself I came across Mixxx. It’s an open source DJ-Software with a completely customizable user-interface that also includes a multi-cell sample-player. Mixxx version 1.10 is readily available for various platforms (“sudo apt-gt install mixxx” on a Raspberry PI) but has been superseded by version 2.1.1 (as time of writing). There are no precompiled binaries for Mixxx 2.1 on a Raspberry PI yet so the first step was to build a version myself. The necessary steps are documented in Mixxx’s own Wiki but it’s partially outdated and not everything is located in one place.

Building Mixxx 2.1 on a Raspberry PI is not that complicated but if you are like me and not knee-deep into Mixxx’s development it might be a little hard to get it all together. This is mostly copy-pasted from here and a little bit from here:

 

First set your Raspberry’s memory split to 256MB. Then issue the following commands:

 

sudo apt-get update

sudo apt-get upgrade

(reboot)

sudo apt-get remove libtag1-vanilla

sudo apt-get install g++ git scons libqt4-dev libqt4-sql-sqlite 
libportmidi-dev libopusfile-dev libshout3-dev libtag1-dev libprotobuf-dev protobuf-compiler 
libusb-1.0-0-dev libfftw3-dev libmad0-dev
portaudio19-dev libchromaprint-dev librubberband-dev libsqlite3-dev
libid3tag0-dev libflac-dev libsndfile1-dev libupower-glib-dev liblilv-dev

sudo apt-get install libjack-dev libjack0 portaudio19-dev # because of Bug #1464120

sudo apt-get install libfaad-dev libmp4v2-dev # required for M4A support

sudo apt-get install libmp3lame-dev 
sudo apt-get remove g++ g++-4.7 
sudo apt-get autoremove 
sudo apt-get install g++-5 
sudo ln /usr/bin/g++-5 /usr/bin/g++ 

For Version 2.1:

sudo apt-get install libqt4-dev libqt4-sql-sqlite libqt4-opengl-dev libqt4-svg libqt4-xmlpatterns libqt4-sql
git clone -b 2.1 https://github.com/mixxxdj/mixxx.git

Or when pulling from the master branch:

sudo apt-get install qt5-default libqt5opengl5-dev qtscript5-dev libqt5svg5-dev
git clone https://github.com/mixxxdj/mixxx.git
cd mixxx
sudo scons -c && sudo scons -j 3 opengles=1 staticlibs=1 optimize=native # -j 3 is okay, if you keep your RPI well ventilated

Now wait for ~1.5 hours . If everything went fine you are granted with a shiny new version of a Mixxx executable in your ~/mixxx – folder. To install it systemwide run

sudo scons install

Improving the stability of the TCPSClient

This script is quite helpful when you want to run the TCPSClient (beta 3) somewhat completely unattended.

If the program hangs up, fails or anything doesn’t work as expected the CPU load increased drastically. This is taken as an indicator and the TCPSClient will be terminated and restarted.

!/bin/bash
PROCESSNAME=TCPSClient.bin
CPU_USAGE_THRESHOLD=1010
declare -i MULTIPLIER=10

killall -v $PROCESSNAME
sleep 3
while true; do
	if ps ax | grep -v grep | grep TCPSClient > /dev/null 
	then
		CPU_TEMP_USAGE=$(top -bn1 |grep TCPSClient | awk -F' ' '{print $9}')
		CPU_USAGE=$(echo "scale=2;$CPU_TEMP_USAGE*$MULTIPLIER"|bc)
		CPU_INT=${CPU_USAGE%.*}
		if [ $CPU_INT -gt $CPU_USAGE_THRESHOLD ] ; then
			echo KILLING
			killall -v $PROCESSNAME
			sleep 3
		fi
	else
		/home/pi/TCPSClient/TCPSClient.bin &
		sleep 3
	fi
done

 

This is one of the very few Linux scripts I did. Be gentle. Feel free to contact me if there are questions, suggestions, etc.

Thekenmeldesystem

Im Auftrag eines Kunden habe ich ein Thekenmeldesystem entwickelt und gebaut.

Ziel ist es, in einer Diskothek von mehreren (bis zu 10) Theken aus an zentraler Stelle Meldungen absetzen zu können (Ruf nach Security, Geschäftsführung, etc). Meldungen sollen durch einen Text und farblich entsprechendes Blinken auf einem Bildschirm dargestellt werden. Zum Beispiel: Rotes Blinken + Name der Theke, wenn es darum geht, die Security zu informieren. Für den Fall, dass von keiner Theke eine Meldung kommt, sollen Animationen abgespielt werden (Veranstaltungshinweise etc). Die Texte, Farben und Videos sollen vom Kunden angepasst werden können. Das Ganze soll Luft nach oben haben: Erweiterung um den Anschluss an ein Bussystem, mehrere Monitore, Ethernet, etc .. .

Continue reading

TCPSyphon

<TL; DR> I’ve built a TCPSyphon Server myself in Java and tried to circumvent some of the flaws of the original Version </TL; DR>

 

Maybe you heard about Syphon. “Syphon is an open source Mac OS X technology that allows applications to share frames – full frame rate video or stills – with one another in realtime” (Link). It was originally intended to only work locally and not be shared between different Hosts on a Network. Fortunately someone took care of this and built a set of applications to share “Syphon data” between multiple Computers. Actually it doesn’t: It renders local Syphon data into single images (jpeg, for example), applies a compression and sends them over the network. Anyways, this is one of the applications you don’t get around as a VJ. You just HAVE to have it: TCPSyphon.

The person behind the TCPSyphon-apps also built a client for the Raspberry Pi. The TCPSClient. Now things become really interesting.

Continue reading