My ultimate guide to the Raspberry pi audio server I wanted — Multiroom support with Snapcast

Published: 2025-12-10

Part 9 — MultiRoom (Snapcast)

Snapcast is one of the most reliable and elegant ways to build a perfectly synchronized multi-room audio system. Snapcast guarantees sample-accurate playback, scales to many rooms, and is extremely lightweight on the client side, making it ideal for old Raspberry Pis (Pi B+, Pi Zero, Pi 2).

This guide walks you through how to make Snapcast fits into a NAS + Raspberry Pi architecture, and how to set it up ith MPD, Spotify, AirPlay, and PipeWire, with all differences between Debian 12 (Bookworm) and recently published Debian 13 (Trixie).

1. Why Snapcast?

I initially tried to do everything directly on the Raspberry Pi with MPD, Spotifyd and PipeWire, but I kept getting random audio cracks — especially every time Spotifyd loaded the next track. Old ARMv6 boards just can’t seem to keep up with modern audio stacks.

That’s the moment I decided to stop fighting the hardware and move the heavy work to my NAS, keeping the Raspberry Pi B+ as an ultra-light Snapclient endpoints.

Snapcast solves all of these at once:

Here are main Snapcast main components :

2. Installing Snapserver on Debian 12 & 13

Debian 12 (Bookworm)

Debian 12 ships Snapcast 0.30 in backports, or 0.26, which are too old because they lack AddStream / RemoveStream features which are mandatory for PipeWire source auto-management (7).

You need at least Snapcast 0.31 from GitHub, current version is 0.34:

$ wget https://github.com/snapcast/snapcast/releases/download/v0.34.0/snapserver_0.34.0-1_amd64_bookworm.deb  
$ sudo dpkg -i snapserver_0.34.0-1_amd64_bookworm.deb

Debian 13 (Trixie)

Debian 13 ships Snapcast 0.31 natively, just install it.

$ sudo apt install snapserver

We’ll also install Snapweb to control our streams:

$ wget https://github.com/snapcast/snapweb/releases/download/v0.9.3/snapweb_0.9.3-1_all.deb  
$ sudo dpkg -i snapweb_0.9.3-1_all.deb

Edit /etc/snapserver.conf:

[server]  
  
[http]  
enabled = true  
bind_to_address = 0.0.0.0  
doc_root = /usr/share/snapweb  

[tcp]  
enabled = true  
bind_to_address = 0.0.0.0

This enables:

3. Adding MPD as a Snapcast Stream

Configure MPD FIFO Output

FIFO output is the classic and most reliable way to feed MPD into Snapcast. It’s simple and low-overhead.

Edit /etc/mpd.conf:

audio_output {  
    type            "fifo"  
    name            "SnapMPD"  
    path            "/tmp/mpdfifo"  
    format          "48000:16:2"  
    mixer_type      "software"  
}

And restart MPD

$ sudo systemctl restart mpd.service

Snapserver Stream

In /etc/snapserver.conf under [stream], add:

[stream]  
# ...  
source = pipe:///tmp/mpdfifo?name=MPD&devicename=SnapMPD

And restart snapserver:

$ sudo systemctl restart snapserver

Done — your NAS can now stream its MPD audio to all rooms.

For now, I don’t have any way to stream the Rasperry Pi’s MPD (handling audio CDs and USB sticks) to stream to snapcast, but that may be possible in the future.

4. Adding Spotify (via Librespot)

Install Librespot from source

Debian repositories are too old, so we need to install Rust and Librespot manually:

$ apt-get install build-essential libasound2-dev  
$ curl https://sh.rustup.rs -sSf | sh  
$ cargo install librespot  
$ sudo mv .cargo/bin/librespot /usr/local/bin

This gives you the latest Spotify Connect implementation.

Snapserver Stream

In /etc/snapserver.conf under [stream], add:

[stream]  
# ...  
source = librespot:///usr/local/bin/librespot?name=Spotify&devicename=SnapSpot&bitrate=320&volume=100&normalize=false

And restart snapserver:

$ sudo systemctl restart snapserver

Now Snapserver exposes a Spotify Connect endpoint in Snapweb.

5. Adding AirPlay (shairport-sync)

Install shairport-sync

Debian 12 → v3.3.8 (AirPlay 1 only)
Debian 13 → v4.3.7 (AirPlay 2 supported !)

$ sudo apt install shairport-sync  
$ sudo systemctl disable --now shairport-sync

Shairport will be started by Snapserver, by _snapserver user, so we have to disable the service startup and edit a few dbus policies and add our _snapserver user in the owners of shairport dbus services, as we did on the raspberry in our previous article about AirPlay.

Place the following directives in the <busconfig> section

Edit shairport-sync-dbus-policy.conf:

Debian 12: /etc/dbus-1/system.d/shairport-sync-dbus-policy.conf
Debian 13: /usr/share/dbus-1/system.d/shairport-sync-dbus-policy.conf

<policy user="_snapserver">  
    <allow own="org.gnome.ShairportSync"/>  
</policy>

Edit shairport-sync-mpris-policy.conf:

Debian 12: /etc/dbus-1/system.d/shairport-sync-mpris-policy.conf
Debian 13: /usr/share/dbus-1/system.d/shairport-sync-mpris-policy.conf

<policy user="_snapserver">  
    <allow own="org.mpris.MediaPlayer2.ShairportSync">
</policy>

Restart Dbus:

$ sudo systemctl restart dbus.service

Snapserver stream

In /etc/snapserver.conf under [stream], add:

[stream]  
# ...  
source = airplay:///usr/bin/shairport-sync?name=Airplay&devicename=SnapAir&port=5000

And restart snapserver:

$ sudo systemctl restart snapserver

You now have a fully integrated AirPlay endpoint (1 or 2 depending on Debian version).

6. Installing Snapclient on Raspberry Pi

Snapclient doesn’t really benefit from version 0.31 — only Snapserver does. On Debian 12, both Snapclient 0.26 (bookworm) and 0.30 (bookworm-backports) work perfectly fine.

The only real requirement is Snapserver ≥ 0.31 because it restores AddStream and RemoveStream.

Of course, for a multi room setup and the full Snapcast experience, you have to repeat this part on every raspberry behind speakers that you want.

$ sudo apt install snapclient

Use Pulse/PipeWire as backend

Edit /etc/default/snapclient:

SNAPCLIENT_OPTS="--player pulse"

Run Snapclient as a user service

Running Snapclient as a user service ensures PulseAudio/PipeWire is already running before Snapclient starts. The system service starts too early and can fail silently.

$ sudo systemctl disable --now snapclient.service  
$ systemctl --user enable --now snapclient.service

7. PipeWire Autodiscovery

PipeWire can automatically detect Snapcast servers and redirect audio streams to them. With this module, any audio played on this machine (browser, apps, system sounds, games, anything) automatically appears as a Snapcast stream on your network. Zero configuration. Very useful for PCs, laptops, HTPCs, etc.

Create ~/.config/pipewire/pipewire.conf.d/my-snapcast-discover.conf

context.modules = [  
{   name = libpipewire-module-snapcast-discover  
    args = {  
        stream.rules = [  
            {   matches = [  
                    { snapcast.ip = "~.*" }  
                ]  
                actions = {  
                    create-stream = {  
                      node.name = "Snapcast"  
                      node.description = "Snapcast Server"  
                    }  
                }  
            }  
        ]  
    }  
}  
]

And restart Pipewire

$ systemctl --user restart pipewire-pulse.service pipewire.service wireplumber.service

The Snapserver then appears as “Snapcast Server” in your audio outputs.

Image

8. Conclusion

After setting up Snapcast with MPD, Spotify (Librespot), AirPlay, and PipeWire, the results are exactly what I wanted. Old Raspberry Pis like the Pi B+ become stable, low-CPU multiroom endpoints. Audio is perfectly synchronized across rooms, without the cracks and stuttering I had when trying to run everything directly on the Pi.

Snapserver centralizes all sources on the NAS, and Snapclient handles playback reliably.

Management is straightforward: the web interface on http://:1780 provides full control over streams and clients, and the Snapcast Android app allows easy control from anywhere in the house. You get a list of all Snapclient on your network and can choose which source to play on it.

Image

Snapweb on http://:1780Image

Snapcast Android application

Combined with PipeWire Snapcast discovery, any desktop or laptop application can become a stream without manual configuration.

However for now, we cannot use our Pi and its special features (bluetooth, Audio CD, USB flash drives) as a stream for Snapcast, but we will get to that eventually.

Overall, this setup proves that you don’t need new hardware for true multiroom audio. With a the central hub such as a NAS and lightweight Raspberry Pi clients, even old ARM boards can deliver a rock-solid, fully controllable, multi-source audio system.

Part 10: Pipewire Server