I want to have speakers in every room of my house, and I want them to be able to play the same stations, or different ones. Basically I want to have digital FM radio across the whole house, so that as I walk from the living room, to the back yard the music doesn’t skip a beat. This is currently offered by Sonos at a ridiculous price, and was offered until 2012 by Logitech, with Squeezebox at a less ridiculous price. Squeezebox being discontinued, I’m not willing to sink my money or time into that, and Sonos is too expensive.
Shockingly, there is no non-proprietary commercial way to do this. Not even Apple’s airplay supports synced playback across multiple endpoints natively. What is a man to do?
Fortunately, there’s MPD and PulseAudio’s RTP streaming as talked about here. That solves the basic backend that I need, something that’s capable of broadcasting to multiple devices on my LAN in sync. Unfortunately, that’s only one of my concerns.
I also want to be able to have friends control the streams without needing to install some mpd client on their whatever. But I don’t want to have stereo Nazis fucking shit up for everyone that just wants to listen to music in the background without it changing every six seconds. So, this means some kind of web based control.
So, I’m going to be writing a frontend piece of software in Python that will calculate votes based on how many people are connected to the stream, and then democratically skip songs if the crowd demands it. If the crowd hates a band enough that they keep skipping everything played by them, we remove the band from the station. If people really love a song, others by that band get played sooner.
Plus I want to have a few stations to listen to, so that we can switch stations when bored.
Plus the speakers need to be able to function independently of the controllers so that I don’t have to pull out my phone to control the music when I’m the only one there and the speakers are right in front of me.
Plus the speakers have to be simple to use, no menus, no config, just pick a station, play. All the logic has to be done elsewhere, since the speakers will be first generation Model B Raspberry Pi’s, with the super limited amount of RAM.