Remote control from one instance of Symfonium to another?

That’s surprisingly easy to achieve.

All you need to do is change the mpd audio output to a fifo file, install snapcast server to the pi and then install snapcast client on all other pis and point them to the IP of the server pi.

basically for 64bit debian bookworm pi clients:

wget https://github.com/badaix/snapcast/releases/download/v0.29.0/snapclient_0.29.0-1_arm64_bookworm.deb

sudo apt install ./snapclient_0.29.0-1_arm64_bookworm.deb

sudo nano /etc/default/snapclient
SNAPCLIENT_OPTS="-h IP-address here"

and for 64bit debian bookworm pi server:

wget https://github.com/badaix/snapcast/releases/download/v0.29.0/snapserver_0.29.0-1_arm64_bookworm.deb

sudo apt install ./snapserver_0.29.0-1_arm64_bookworm.deb

sudo nano /etc/mpd.conf
add this below the
# An example of an ALSA output:
line (and comment out preexisting audio_outputs):
audio_output {
    type            "fifo"
    name            "my pipe"
    path            "/tmp/snapfifo"
    format          "48000:16:2"
    mixer_type      "software"
}

if you want to name the audio source:
sudo nano /etc/default/snapserver

You can also still play on the pi that runs the server. Just install the client on it as well.
The only downside of this setup is that you cannot directly play via upmpdcli on the pi with the server any more. It will always write the audio to the fifo file, then it is read by the server and played by the client (all on the same device).
And since the fifo requires a fixed bitdepth/sample rate, this could lead to some upsampling/downsampling.

To avoid this, I installed a lightweight Debian lxc container on my proxmox host and installed mpd, upmpdcli and snapcast server there. The fact that the container has no audio device does not matter since only the fifo is used anyhow.
That way I can still cast to each of my individual pis without restrictions, or I cast to the debian container and all (selected) client pis play in sync.
Works very well.

That’s 2 pis + the debian container as cast targets in Symfonium:


Volume can be controlled individually or per group via the shipped webserver on port 1780 of the server IP or via one of the supported apps (snapdroid etc).

I also used my first waltz with corona to familiarize myself with ansible and wrote a playbook that turns any number of freshly installed pi zero Ws/pi zero 2Ws (should also work for pi 3b but haven’t tested that yet) + HiFiBerry DAC HAT into a fully configured (audio settings, configs, player name etc.) player with mpd, upmpdcli and snapclient in a couple of minutes (or many minutes in case of the pi zero W, that thing is slow as hell).

I can put that playbook + a guide on github if there’s interest. I’m extremely happy with the result.

1 Like