Playing records on Symfonisk

4 Jun 2025
Joshua Moerman

At home, we have a IKEA Symfonisk bookshelf speaker. We are really happy with it. It has great sound, looks great and is easy in use. However, it has one big ommission: it has no physical inputs. It can only work with WiFi or Bluetooth. This sucks, because it means I cannot connect my records player to it.

Of course, this is by design. The IKEA Symfonisk is a really cheap way to get a Sonos system at home. And for Sonos, it is obviously a way to get people to buy their more expensive units. They have a unit with all kinds of inputs which can connect to the system. However, this unit is way too big for my taste (and too expensive).

So can I DIY this problem? Yes of course!

Record player and the Symfonisk bookshelf speaker.

Overview

Here is my current set-up:

Open-source software

The Raspberry Pi is flashed with a very standard debian os. I have no screen and keyboard attached, everything is set up remotely via ssh.

For the radio stream I am using icecast. I have used this before when streaming live DJ-sets to friends. The icecast provides a server to which clients can stream music, and then broadcasts it to whoever wants to listen. It is a bit overkill for the set-up at home, but it’s a tool I already knew how to use.

As the client which streams music to the icecast server, I am using darkice. This was new for me. In the past, I used GUI applications for this. But that won’t fit the bill here, since I want to only use the record player and the Sonos system. I don’t want to bother starting some app on a computer. As I will explain below, we want a new version of darkice.

Add

deb https://deb.debian.org/debian experimental main

to the file

/etc/apt/sources.list

Then install the tools we need:

sudo apt install icecast2
sudo apt -t experimental install darkice

Configuration

The two files which are important here are:

/etc/icecast2/icecast.xml
/etc/darkice.cfg

These configuration files are well documented, and you can figure this out yourself.

For darkice, you have to tell it where the sound is coming from (in this case a USB-port).

[input]
device        = plughw:CARD=Device,DEV=0
sampleRate    = 48000
bitsPerSample = 16
channel       = 2

[icecast2-0]
bitrateMode   = abr
format        = mp3
bitrate       = 320
server        = localhost
port          = 8000 # or whatever configured for icecast
# etc ...

When running icecast and darkice, it should now work. It is a bit of a struggle to listen to a radio stream url on the Sonos app. It’s easier on the desktop app, as there is a menu option to add a radio stream. Even easier is to use the SoCo in python, but that is for another time.

Running everything at boot

Next, we have to make sure everything starts a boot. This is important, because I also want other to be able to start the system and play records. The radio stream will always be active, and you can connect to it via the Sonos app whenever you want.

Starting icecast at boot is no problem, it enables itself when installing (if I remember correctly). Darkice was a bit more effort.

The old version of darkice (which is in debian stable), has init.d scripts which do not work at all (trust me, I tried). The newer version of darkice acknowledged this and removed them completely. So how should we do it instead?

The new way to do this is with systemd. This was new to me, but it is actually quite easy. Create the file:

/etc/systemd/system/darkice.service

with content:

[Unit]
Description=Darkice
Requires=icecast2.service
After=icecast2.service

[Service]
ExecStart=/usr/bin/darkice

[Install]
WantedBy=multi-user.target

The enable it:

sudo systemctl daemon-reload
sudo systemctl enable darkice

Further thoughts

This set-up works well for me now. Here are some more thoughts / alternative solutions:

Record player with QR code.