PiTunes
AirPlay for the Whole Home!
When we moved in a few years ago, one of the quirks we inherited was a built-in Nuvo Simplese home audio system. But we already had a bunch of Sonos speakers scattered around.
The goal was simple: AirPlay everything! Music, AppleTV audio and party playlists to all speakers at once, Sonos and Nuvo alike.
Why Not Just Buy the Sonos Amp?
Sonos sells an amp that would’ve solved this in, like, ten minutes. But… Sonos pricing. It would have sounded great, I’m sure, but the project wasn’t exactly didn’t demand the premium route.
So instead, I dug out a Raspberry Pi gathering dust, plus a 3.5 mm → RCA cable. This led me down a rabbit hole I now affectionately call PiTunes.
Shairport Sync
I stumbled on Shairport Sync, which is an open-source AirPlay audio player for Linux. Basically, it lets computers pretend to be AirPlay speakers. It supports:
AirPlay 1 & AirPlay 2
Sync’d multi-speaker playback
Various audio backends (ALSA, PulseAudio)
Metadata display and timing corrections
➡️ Full project: https://github.com/mikebrady/shairport-sync
I fired up Shairport Sync on the Pi and initially had it broadcasting as an AirPlay 1 device. Great, but that doesn’t support multi-speaker sync. The meant I couldn’t play the same audio in sync with my Sonos speakers.
I poked around and found out that multi-speaker playback is only available for AirPlay 2 devices. Luckily, Shairport Sync does have AirPlay 2 support, and once enabled, PiTunes showed up as an AirPlay 2 target. That meant I could:
✔️ Select PiTunes + all Sonos speakers
✔️ Play music everywhere in sync
✔️ Not have echos with timing mismatches
Magic!
Volume Woes... Because Why Would It Be Easy?
Turns out the Raspberry Pi’s built-in audio output is… modest. Probably giving the same power as a walkman, it needs to be fed into something that amps the signal. The Nuvo system does amplify it, but it wasn’t enough, especially to drown out my singing in the shower.
Solution: I added a small headphone preamp (20 dB gain) between the Pi and the Nuvo input. Audio became loud enough and the Pi’s output can be turned down for cleaner headroom.
But here’s the twist: over time, the volume started drifting lower, even with the preamp. Reboots would reset the Pi’s mixer, and ALSA settings wouldn’t always stick. After some wrestling with alsamixer and persistent config files, it’s mostly stable. Occasionally a reboot still requires a quick manual volume check.
Because the Pi is plugged into a UPS, reboots are rare. So I’ve let this one sit for now. That’s a problem for future me.
Is the Nuvo System Dying?
I have noticed the home speakers sound slightly quieter than before, even with the same PiTunes volume settings.
My current theory is that the Nuvo amp is maybe… fading? Aging electronics do that. I haven’t run any formal tests yet, but it’s on the to-do list after I finish ~30 other half-baked projects.
For now, the system works well enough, our place has synced audio throughout, and that’s good enough for us.
Future Adventures: Paging with SIP
At one point I was working on a SIP client on the Pi that would be used to auto-answering and auto-broadcasting into the system for paging.
That experiment deserves its own post. Stay tuned for another post that I will probably call.... PiPage!
TL;DR
Built a Raspberry Pi–powered AirPlay 2 target with Shairport Sync
Integrated it with an old Nuvo system via a preamp
Syncs with Sonos speakers for whole-home audio
Volume quirks solved (mostly)


