Today I’d like to talk about how I’ve set up my apartment’s homegrown, multi-room, auto synced speaker system.
When I discovered Sonos a few years ago, I was amazed at it’s multi-room sound syncing speakers… I was also disappointed by the cost. So, I set out to build (or, at least, assemble) my own system for a fraction of the cost.
To do that, I needed three things: some speakers (obvi), a media aggregator, and an audio sync-er.
This was the easiest part. All non-bluetooth speakers have an AUX connection readily available, so all I needed was to connect that to a Raspberry Pi. One speaker set was attached to my television, and I’d already attached a Raspberry Pi to a port on that; in my office I have a pair of speakers for my computer, which I could switch over to a Rpi when I wanted; I had an extra pair of speakers I could use in the living room; and I ordered a pair of cheap speakers I could tear apart and make into a mobile speaker system for anywhere else in my house I wanted sound (the balcony? my bedroom? etc.).
I needed something that would run on a Raspberry Pi and would connect to my Spotify. I found what I was looking for in MPD, and a wrapper for it called MusicBox. There was even an API, so I could incorporate it into my smart home app, and there were existing apps to control it (which I used until I’d built it into Roost Remote).
Multi-room audio syncing
This part was the hardest to find. After much handwringing, frustration, and scouring the internet, I happened across SnapCast. Wow was it cool! It was a little tricky to install, since I had to choose the right build for my Raspberry Pi, but once I had, it was a breeze. All I did was install the server on the pi with the media aggregator, point the snapserver at the audio output, and then install snapclients on all the speaker pis. Easy peasy!
It turned out pretty well! By and large it’s pretty easy to use and works exactly how I want. Using Roost Remote, I’ve schedule my wake up playlist to go off every morning, and it plays all through my apartment throughout my morning routine. It really feels magical.
I will say that sometimes I have to reboot the media aggregator pi. And whenever Spotify changes its API I have to update that integration, which is a pain. And very rarely the syncing will get into a loop where one room will pause to let the other room catch up, then the other room will pause and the first will start playing, and then pause, and play, etc etc. But none of these things happen often enough for them to really be a problem.