Digital Music Player with Raspberry Pi and Volumio

This standalone Digital Music player is the successor to my first Raspberry Pi-based digital audio project, and it was intended as some kind of evolution. Player #1 was running Squeezelite (later already Volumio, but merely as a test setup), so it needed a server or NAS to be running in order to play music. I’m not interested in playing music over the network –  instead I wanted a standalone digital audio solution without the need to start/shutdown additional network devices each time I want to listen to music.

Player #2 will be implemented in two stages: The first stage will contain the fully functional player with local usb storage and an I2S DAC. The second stage will add a Tube CD filter based on a circuit published in the german DIY Hifi magazine „Klang & Ton“ in 1994 ( modern player tech meets oldschool tube circuitry). The Tube CD filter is intended to filter out high frequency noise leftovers from the DAC. I rather consider the filter to be some kind of additional/optional sound „flavour“, I’m not too strict regarding „sense“ or straightforward design. BTW, the circuit design of the filter ist very, very similar to this one. Honi soit qui mal y pense…

These were my requirements when designing the concept:

  • High quality playback of audio files
  • Volumio as software/OS, Raspberry Pi as hardware
  • Flac files stored on local usb medium
  • Inbuilt power supply with linear regulation
  • A display showing basic info about the currently playing song/artist
  • Basic remote control functions (play, pause, next, etc.) incl. shutdown option; all enhanced control functions like artist/playlist selection will be performed using the volumio web interface, or maybe by using mpd-compatible apps like „mpdroid
  • Appealing, living room compatible appearance

I did some web reading and (to cut it short) finally dicovered, some french guys designing/selling DIY Hifi components, with an emphasis on digital products. I chose the I-Sabre DAC ES9023 TCXO for the Raspberry 2 (read about USB vs. I2S on the Raspberry Pi here); the sound quality of the ES9023 is reported to be very good, and the DAC board offers GPIO passthrough, so further periphery devices (ir receiver, dot matrix display) can be easily connected.

Audiophonics offers other nice components, like power supply regulators and aluminium chassis. To save some time and have a cleaner layout, I ordered some  LT1083 regulator boards; these deliver power for the Raspi, the usb storage, the display and –  later on – for the tube heaters (my design has a minor flaw concerning the heater voltage; more on that later). The regulators get their AC supply from a 50VA torrodial transformer with two secondary wirings.

I also opted for a chassis that suited my needs – there is quite some space required for all these components. Furthermore, I wanted a chassis that already had a suitable cutout for the display. The two knobs will control power on/off and the tube output volume. On the back, there are suitable cutouts for power and audio connections (2 x stereo, DAC direct and tube output). I only had to drill adequate cutouts for the Neutrik USB and LAN connectors, this can be seen on one of the pictures.

The dot matrix VFD has been recycled from a very old project. It is a very nice diplay (much sharper than LCDs, also with a greater viewing angle) with 24×2 chars/lines and a HD44780 compatible controller. The display is connected to the Raspberry in 4bit parallel mode.

The IR receiver is a TSOP38238. This device can be directly connected to the GPIO port. LIRC ist installed as software; I had to fiddle around with the correct GPIO ports and LIRC instructions – there are a lot of instructions on the web that show you how to setup and configure LIRC (which is a nice support), but you have to read 3 or 4 of them to get a complete picture… Find one of the nicer ones here. The RD5860 remote is from an old Philips CD player, you can even find a pre-configured lirc config file for this remote; the chassis feet have also been recycled from this player.

All hardware components have been mounted on an additional 2mm aluminium board. I did not want to drill that many holes directly into the chassis. I ordered two boards (one spare), and later on decided to use both boards, which resulted in a very solid 4mm base. This base also serves as a heatsink for the voltage regulators. You can see that in stage 1 there is quite some space left in the back – this is where the Tube CD filter will fit in in stage 2.

The Volumio OS is currently installed in version 1.55. A newer version with major modifications is already available on, but I decided to stay with the older version, get everything up and running (lots of things to be figured out) and then later on try the stable 2.x release. On top of Volumio there is (as already mentioned) LIRC for IR remote control and the Adafruit LCD library (Adafruit_Python_CharLCD) written in python for display control. You also need the GPIO library to access the GPIO port in python.

My python script for reading song/artist info from mpc (mpc ist the command line application which is used to control the Music Player Daemon [mpd]) and writing this info to the VFD display is a heavy modification of a script taken from this page. I stripped it down to a very basic version (song/artist/track number/total play time/some status info) in order to reduce cpu load and because I wanted a preferably calm and simple presentation of the basic data on the VFD display in addition to the complete info on the Volumio web interface. I also implemented some optimizations in the code, e.g. introduce sigterm handling (when shutting down the script), allow german special chars on the display („umlaute“, considering the custom character table of the Futaba display) , center text on the display, etc. My version will be available here when the code has reached a clean state… 😉

There is also a small modification to the Adafruit LCD library: I added brightness control for the VFD display. This is a special feature of some VFDs, you can adjust brightness in four degrees; this is done by setting additional bits during display initialization.

The Flac files are stored on an SSD USB disk connected to the Raspi. The disk has its own power supply. The USB2SATA controller is taken from an external USB drive; this controller is my second shot – the first controller had been recycled form a very old external USB drive, and it resulted in stuttering music playback; it took me some time and nerves to figure out the cause of this problem! With the SSD, there are no moving parts in the player, so it is absoutely silent.