How to Make a DIY Multiroom Audio System
I like to have music playing in my house most of the time, and the idea of multiroom audio is a perfect fit in this context – speakers in every room, with the option of having them all synced, or playing different music in each room if required.
Moving Away From Sonos
Sonos is probably the best-known exponent of multiroom audio, and I have been a Sonos user for many years, but due to the ongoing degradation of the Sonos user experience and functionality (from the software side) I have decided to explore alternative options.
Fortunately, it turns out there are plenty such alternatives out there – from similar retail off-the-shelf solutions like Denon HEOS to more DIY solutions involving various levels of electronic or system administration expertise.
Last year, after Sonos removed the functionality of being able to play mp3s stored on my phone or tablet, I set up a NAS using a Raspberry Pi from which to stream my mp3 library. However, a recent app update since disabled Sonos’ ability to play mp3s from this source too – in fact, playing local mp3s seems to be impossible from any source now.
Getting in the Moode
However, as I had some initial experience with Raspberry Pi, this led to my first alternative home audio solution – based on a software package called Moode. This is a dedicated media player OS that can be accessed by default from the Raspberry Pi installer program. On your regular laptop, just open the Pi installer and select Moode as the OS, then burn it onto a microSD card.
Pop the microSD into your Pi, and power it on. Once it connects to your wifi or ethernet, you can then access the Moode interface simply by typing ‘moode.local’ into a web browser on your laptop or phone. By connecting the Pi to a set of speakers (either through the headphone socket, HDMI output or an optional add-on HAT) you immediately have a sound system you can control from your phone with basically all the features you might be used to from Sonos.
There is a multiroom audio feature in Moode where you set up one Pi as the ‘sender’ (which does not output audio) and other Pi units as ‘receivers’ attached to speakers that actually play the music. While I was able to set up a receiver in this mode, I encountered some issues with jitter and dropouts when adding more receivers – and I also didn’t like the way the ‘sender’ was unable to output audio itself.
Logitech Media Server FTW
After some further research and testing, I finally decided to base my system on a Lyrion/Logitech Media Server (LMS) and squeezeboxlite players.
Partly for my own reference, and partly in case anyone wants to try to setup something similar, I will outline the process I followed here.
Hardware – one Raspberry Pi 5, four Raspberry Pi 3As, power supply for each Pi (basically any micro-USB source will do for the Pi 3 in this use case).
Speakers to attach to each Pi with the appropriate connector (3.5mm audio cable, HDMI cable).
In my system, I am using the Pi 5 to run the LMS, one Pi3 connected to the back of a Denon AV receiver in a 5.2 multichannel speaker system, and three Pi3s connected to portable bluetooth speakers using 3.5mm audio cables.
Setting up Your Pi
The first step is to install a Raspberry Pi OS on a microSD card – you can use the official Pi installer to do this. I installed the latest 64-bit OS on my Pi5 (Debian Bookworm). The installer will let you preset some important configuration options, such as localhost name and Wi-Fi credentials – if you cannot use a wired ethernet connection, this will make setup a lot easier. It’s also useful to enable ssh for remote access.
Once you boot up for the first time, there may still be some updates to install – it is recommended to install these before continuing.
Installing Logitech Media Server
Once everything is ready, then you can go ahead and install the actual LMS software. I followed these steps (as found at scratchart.nl) and it worked perfectly first time. Open a terminal and enter the below:
• sudo apt-get install -y libsox-fmt-all libflac-dev libfaad2 libmad0 libio-socket-ssl-perl libcrypt-openssl-rsa-perl
• wget https://downloads.lms-community.org/LogitechMediaServer_v8.5.1/logitechmediaserver_8.5.1_arm.deb?
• sudo dpkg -i logitechmediaserver_8.5.1_*.deb?
• sudo chown -R squeezeboxserver:nogroup /usr/share/squeezeboxserver/?
• sudo usermod -G audio squeezeboxserver?
• sudo apt-get install -y lame?
Once you have completed the above steps, you should be able to open a browser connected to the same wifi network (either on the Pi you have just installed LMS on, or another phone/laptop) and visit the IP address of the LMS Pi at port 9000 – so for example, “http://192.168.0.122:9000”.
Here you will be able to configure some settings for the LMS, such as pointing to the folder where you have your mp3 collection. This could be on an external drive attached to your Pi, or even on the MicroSD that your Pi OS is installed on. You may need to set up a Samba share if you want to run a NAS, instructions for this are also on the page at scratchart.nl above.
In the settings tab of LMS, you will be able to choose a number of plugins – it is probably a good idea to enable the material plugin, which provides a neater interface for controlling your music, particularly if using from a phone. You can then access this by using your LMS URL as above, but with /material appended to the end.
Setting up Your Squeezebox Players
Once your music server is active, you will need to setup one or more squeezebox players – a Pi connected to a speaker.
Basically you first set up the Pi as usual, using the Pi Imager to install the appropriate OS – on my pi3 I found the latest 64-bit OS didn’t work, so I just used a legacy 32-bit image.
Once the SD card is finished, pop it into the Pi and boot up. When all is ready, open a terminal and type:
sudo apt-get install squeezelite
And that’s basically it! Your new pi should now appear as a player in LMS. You can choose to sync this to other players you have also set up, or let it operate independently.
For an even more lightweight squeezebox, you can simply download the picoreplayer image from picoreplayer.org and use the Pi imager to burn this to an SD card. Once you boot it up, it should appear in LMS automatically.