I have a few audio setups scattered around the house. The main ones I use are in my office, living room and kitchen. They’re all set up differently (e.g. my office has seperate amp and DAC, the living room is a sound-bar and the kitchen is a bluetooth speaker) but it would be nice to stream my digital music collection to each of them.
My music collection is all on Plex and I’ve happily used Plexamp on my phone when I’m out and about. I wanted the ability to play music on my office system so I gave a Wiim Mini a try. It’s an inexpensive little streaming box but it only really supports big subscription based streaming services like Spotify and Amazon Music. It did have the ability to act as a uPnP/DLNA endpoint though. The only problem, Plexamp does not support casting to uPnP/DLNA and does not have any plans to support this.
Enter Symfonium, a nifty Android app that can connect to plex on the backend and cast to the Wiim mini via uPnp/DLNA. It even syncs playlists back and forth and works really well with gapless playback. I was just missing some of the nicer features provided by PLexamp - better playlist management and the DJ features at the top of my list. I would also really like to take the AI based playlist generation for a spin.
The Plexamp Way
The easiest way forward for me would have been for Plexamp to support uPnP/DLNA casting and I could just use the standard app to connect to a bunch of Wiim minis scattered around my house. This however is not the Plexamp way:
Plexamp is on the Fediverse (Awesome!) so I had a brief exchange with them about my set up and was told that the focus of the product is through their headless plexamp application. I’m fine with that, they can’t be expected to support every setup out there but they have a roadmap and that’s their focus, either I get on board or use something different.
The Plan
I decided to fire up a raspberry pi and see if I could build a streamer to replace the Wiim. The build list is:
- Raspberry Pi 4b with 4gb of ram (probably overkill but it’s what I had)
- SD card for the OS
- Official raspberry pi case (again, had it lying around)
- USB-A to USB-B cable (I don’t need a USB DAC or DAC-hat as I have a Topping DX3 Pro+ in my system which takes a USB input for the DAC)
- USB-A to USB-C cable for the power to the pi (I have a USB hub that can deliver the power needed)
As you can see it’s not an overly complex or expensive build.
OS Choices
The easiest way forward would be to flash raspbian lite onto the SD card, boot it up and install headless plexamp but where would the fun be? That setup would lose me alot of the functionality from Wiim such as airplay, bluetooth, radio stations and more. The great thing about the FOSS world is that we have choices for a specialised OS:
- raspbian lite - Boring and lacks features
- Volumio - This is the default choice for alot of people setting up streamers. It’s feature rich, supports many of the major streaming services (as well as local files and NAS) and seems pretty easy to set up. However, it’s starting to paywall a bunch of features with a subscription which is usually a death-knell of a project for me. Also, may of those paywalled features are provided with plaxamp and my lifetime plexpass.
- Moode Audio - The FOSS choice. Supports airplay, bluetooth, radio, a couple of the major streamers (as well as local files and NAS) and lets you tweak the audio to your audiophile heart’s content.
- Mopidy - The tinkerer’s choice. It has much of the same features as Moode but alot of the functionality is in the form of extensions that you would need to install. This means that new features can be added much faster, but there’s more to keep track of from a maintenance point of view.
I installed both Moode and Mopidy and the whole process felt more smooth with Moode so that’s what I went for.
The Build
The build process it’s pretty straight forward:
- Use the raspberry pi imager to put the moode audio player OS image onto an SD card (Choose OS - Media PLayer OS - Moode Audio OS). Make sure to customise the image with host name, wifi details and enable ssh.
- Boot the pi and plug it into you dac
- I followed these setup instructions to finish configuring moode
- I followed these setup instructions and made sure to start it as a service (details also in the link)
- At this point you should be able to go to the web interfaces of both moode audio and plexamp. I set each of these applications to use my dac as the audio output (you can have a look at the configuration guides for each applications to do this)
- Play audio!
Niggling Issues
- There seems to be a problem at boot where moode and plexamp step on each other’s toes. Moode seems to hang until I stop plexamp, restart the moode server and restart plexamp. I’ve tried to change the /lib/systemd/system/plexamp.service to delay plexamp’s boot process with:
ExecStartPre=/bin/sleep 30
ExecStart=/home/pi/.nvm/versions/node/v16.18.1/bin/node /home/pi/plexamp/js/index.js
It hasn’t resolved the issue so I’ll need to continue investigating
- Podcasts! I currently have no way of streaming podcasts. The most important past of a podcast manager is to manage podcasts. I need a service to download the latest episodes, keep my listening synch’d over the devices I use to listen and delete them when I listen to them. Ideally any client I sue should be able to download copies of the podcast locally and it would be great to have some smart playlist features to allow me to set up a custom order to listening to the podcasts. I’ve looked at Gpodder, podgrab, podfetch and audiobookshelf and none of them let me do that while being able to stream to the pi. I guess I’ll have to keep podcasts on my phone and connect via bluetooth.