Broadcasting Vinyl: How I Stream Records to Sonos with a Raspberry Pi Zero 2W

Let’s be real: nothing hits like dropping the needle on a record. As a Dutch hip-hop fan, I’ve tracked down some serious vinyl: Kevin, Mula B, and other local legends. But after switching to a soundbar setup for my TV, my trusty stereo rig just sat there, unutilized.
That changed when I discovered IKEA’s Symfonisk speakers—Sonos-powered gear disguised as home decor. Clean design, solid sound. But I still missed that uninterrupted, full-album vinyl vibe.
So I hacked together a solution: stream my turntable live over Wi-Fi to any Sonos speaker or even groups using a Raspberry Pi Zero 2W, a Behringer UFO202 Soundcard, and two key tools—Icecast2 and DarkIce. Now, when I spin a record, it plays in every room. No skipping, no shuffling, just that musical goodness, end to end.
sequenceDiagram participant Turntable participant UFO202 as Behringer UFO202 participant Pi as Raspberry Pi Zero 2W participant Icecast as Icecast2 Server participant Sonos as Sonos Speaker Turntable->>UFO202: Analog audio (RCA) UFO202->>Pi: Digital audio (USB) Pi->>Icecast: Encoded audio stream (DarkIce) Sonos->>Icecast: HTTP request for stream Icecast-->>Sonos: Live audio stream (MP3)
What You’ll Need#
-
Turntable (RCA output)
-
Behringer UFO202 USB phono preamp (switch to Phono)
-
Raspberry Pi Zero 2W (plus micro-USB OTG cable and power)
-
MicroSD card (8 GB or larger with Raspberry Pi OS installed)
-
Software packages:
icecast2
– streaming serverdarkice
– live audio encoder
-
Preinstalled SSH user and WLAN/Network config
🔧 Tip: Give your Pi a static IP on your network. It makes everything easier when configuring Sonos or TuneIn later.
Step 1: Connect the Hardware#
-
Turntable → UFO202 Plug your RCA cables into the UFO202, and make sure the preamp switch is set to Phono.
-
UFO202 → Raspberry Pi Use a USB OTG adapter to connect the UFO202 to the Pi’s USB data port. Power the Pi via its micro-USB power port.
-
Check That It’s Detected SSH into your Pi and run:
arecord -l
You should see something like
card 1: USB-Audio
.
Step 2: Install Icecast2#
Update your system and install the streaming server:
sudo apt update && sudo apt upgrade -y
sudo apt install icecast2 -y
During install, you’ll be prompted to set an admin password and a source password—you’ll need the latter for DarkIce.
Configure Icecast2#
Edit the main config file:
sudo nano /etc/icecast2/icecast.xml
Change or verify the following:
-
Set the (static) IP of your raspberry pi:
<hostname>YOUR_PI_IP</hostname>
-
Make sure the
<port>
is8000
. -
Keep note of the
<source-password>
and<admin-password>
values. -
You can add or edit the
<mount>
section later if you want custom metadata.
Enable and start Icecast:
sudo systemctl enable icecast2
sudo systemctl start icecast2
Now visit http://<your_pi_ip>:8000
in your browser to verify it’s running.
Step 3: Install & Configure DarkIce#
Install DarkIce:
sudo apt install darkice -y
Create the Config File#
Edit (or create) /etc/darkice.cfg
:
[general]
duration = 0 # duration of encoding, in seconds.
bufferSecs = 5 # size of internal slip buffer, in seconds
reconnect = yes # reconnect to the server(s) if disconnected
realtime = yes # run the encoder with POSIX realtime priority
rtprio = 3 # scheduling priority for the realtime threads
[input]
device = default
sampleRate = 44100 # sample rate in Hz. try 11025, 22050 or 44100
bitsPerSample = 16 # bits per sample. try 16
channel = 2 # channels. 1 = mono, 2 = stereo
[icecast2-0]
bitrateMode = cbr # average bit rate
format = mp3 # format of the stream
bitrate = 320 # bitrate of the stream sent to the server
server = <your_pi_ip> # host name of the server
port = 8000 # port of the IceCast2 server, usually 8000
password = <your_source_password> # source password to the IceCast2 server
mountPoint = stream # mount point of this stream on the IceCast2 server
name = stream # name of the stream
description = This is a stream
Replace YOUR_SOURCE_PASSWORD
with the password you set during Icecast2 setup.
Make DarkIce Run at Boot#
Create a new systemd service file:
sudo nano /etc/systemd/system/darkice.service
Paste the following:
[Unit]
Description=DarkIce Live Streamer
After=network.target icecast2.service
[Service]
ExecStart=/usr/bin/darkice -c /etc/darkice.cfg
Restart=always
User=pi
[Install]
WantedBy=multi-user.target
Enable and start it:
sudo systemctl daemon-reload
sudo systemctl enable darkice
sudo systemctl start darkice
Step 4: Add Your Vinyl Stream to Sonos#
- Add the stream url
http://<your_pi_ip>:8000/stream
to the Tunein Radio App - Open the Sonos app
- Play your radio station using TuneIn
You can now spin records in any room with a Sonos speaker—including Symfonisk units.
The Symfonisk Obsession Is Real#
I fell hard for IKEA’s Symfonisk line—clean, functional, and surprisingly rich sound. When early 2025 rumors hit that they might get discontinued, I grabbed extras like they were vinyl grails. No shame.
Even if they vanish, this Pi-powered setup means I’m streaming my own collection, on my terms—from needle drop to speaker. No overly expensive hardware, subscriptions, no cloud, no compromises.
Wrap-Up#
Spin your record, power up the Pi, and let the music flow.
There’s a certain joy in hearing a vinyl album play start to finish—no skips, no shuffle, just full analog warmth. This project brought that back for me, but made it wireless, effortless, and whole-home capable.
Build it. Spin it. And keep collecting.