Ubuntu Core Smart Speaker

by Alan Pope on 20 December 2018

With the holidays coming up, many of us can expect to spend time with our friends and families, often listening to seasonal music, or indeed escaping the seasonal music! Whether you’re joining in or getting away from the crowd, this simple project can help.

This is part one of a series of posts where I build up my own ‘smart’ speaker using a Raspberry Pi, some Open Source software, and a few other inexpensive components. In this part I’ve built a simple music player which shows up as a Spotify Connect device on the network. That means it can be controlled via the official Spotify app on any computer or mobile device.

Once setup, the device can have headphones, speakers, TV or a full sound system attached to stream music and podcasts from my favourite Spotify playlists. All I needed for this project was a network-connected Raspberry Pi 2 and some headphones or speakers. The Spotifyd software used requires a premium Spotify account. Many thanks to Simon Persson who created Spotifyd and published it in the Snap Store.

I used a Raspberry Pi 2 which is more than capable, but this project will also work on newer, faster, Raspberry Pi 3. The software I’m using is Spotifyd which registers as a ‘Spotify Connect’ device and can play audio on demand, when instructed by other devices running the official Spotify app.

Get The Party Started

In a previous blog post – Secure VPN Connection with Ubuntu Core I selected Ubuntu Core for the OS on the Pi. I’m following the same path with this project, using the latest download of Ubuntu Core to get started.

Ubuntu Core is a lean, secure, automatically updated OS designed for devices like the Raspberry Pi. It’s perfect for an appliance you want to setup and leave somewhere, safe in the knowledge it’s kept up to date

The steps for grabbing the Ubuntu Core image and flashing to a microSD card are quick and straightforward. Much like installing any other OS on a Pi. There is a setup process on first boot which walks you through connecting to wired or WiFi network (if available).

If you already have a Raspberry Pi 2 or better running a recent install Raspbian, you can use that instead of Ubuntu Core. You just need to sudo apt install snapd before continuing with the rest of these steps.

Refractions in the Plastic Pulse

Next up I needed to install PulseAudio which the Spotifyd daemon will connect to later. It’s a good idea to also install PulseMixer, which enables us to control the volume and check everything is working. Installing both is simple as they’re both available as snaps.

snap install pulseaudio
snap install pulsemixer

PulseAudio will run as root in the background and listen out for incoming connections. We can check the audio levels by running sudo pulsemixer on the Pi in an SSH session. Here’s what that looks like. Note the bcm2835 device which is the sound ‘card’ in the Raspberry Pi. We can adjust the volume with the arrow keys.

Red Chip Installation

Now we’re ready to install Spotifyd. This is as simple as:

snap install spotifyd

Once installed, Spotifyd will automatically start without any configuration. However, it defaults to using ALSA, but we’d like to use PulseAudio as the backend. Spotifyd is built with the PulseAudio backend, so we need to make sure it’s used. That’s pretty easily done with a configuration file. On the Pi, issue the following commands:

$ sudo mkdir -p /root/snap/spotifyd/current/.config/spotifyd

Once created, we can add a configuration file:

$ sudo vi /root/snap/spotifyd/current/.config/spotifyd/spotifyd.conf

Add the following lines to the file, and save it.

[global]
backend = pulseaudio
device_name = pi

Note I’ve also added a device_name which is what you’ll see in the official Spotify client under ‘Connect to device’. If you setup more than one device, you could name each differently, perhaps based on what room they’re in. There are some limits such as name cannot contain spaces. For more details on the options in the configuration file, check out the upstream Spotifyd project on GitHub.

For the changes to take effect, restart Spotifyd.

sudo snap restart spotifyd

That’s it! Plug in some headphones, open up the Spotify client on a mobile device or PC and start playing on the Pi!

Buggin’ Out

If things aren’t playing nicely, there’s a couple of things we can do to debug. On the Pi we can use sudo pulsemixer to see what the volume is set to, adjust it, and confirm whether Spotifyd is connected to PulseAudio.

Sometimes the daemon needs restarting, which can be done with a simple sudo snap restart spotifyd. We can also get to the logs of Spotifyd with snap logs spotifyd. If you uncover interesting bugs, I’d recommend filing them on the upstream Spotifyd issue tracker.

End Game

There’s a few things I can imagine doing to improve this. It might be cool to have some audio visualization output on the HDMI port while music is playing. That would be great if used as a jukebox as a party, with a big screen on. It could also potentially display track information on the display too.

The audio circuitry in the Raspberry Pi isn’t what you might call ‘Studio’ quality. So another option might be to add a 3rd party USB sound card with a higher quality Digital to Analog Converter.

In a further update I will add the ability to voice control the device via Alexa, but that can wait until after the Christmas holidays. If you setup an Ubuntu Core Smart Speaker, do let us know over on the snapcraft forums!

Happy holidays everyone! 🎄


Newsletter Signup

Related posts

Snapcraft now auto-detects missing dependencies

When you build snaps, the process of composing a complete snapcraft.yaml file will usually revolve around three main activities: parts, build requirements and runtime components. Sometimes, you may discover that you’re missing certain libraries in the compilation stage, or that they are required for your application to run. In most cases, […]

Productivity corner: free, versatile office suites in the Snap Store

For the past few decades, the digital office formula has not changed much. It still revolves around three main components – text documents, data spreadsheets and visual slide decks, designed to convey a powerful business message. While simple in essence, this model is quite complex in practice, and choosing the best tools for the job […]