Raspberrypi Music Streamer without Volumio

All-in-one streamer based on Raspberrypi supporting UPNP, Bluetooth and Spotify under 100$ without Volumio/Roon

Introduction

In my pursuit of "DIY Audio" conquest, I had a requirement where I wanted to stream music to my audio amplifier without hooking it up to my phone/laptop. At this point, I learned about so called "music streamers". But tbh, I didnt want to break my bank and it was time for another DIY project anyway.

One of the many usecases for a Raspberrypi is using it as a music streamer. Music can be streamed via bluetooth (Not really hifi), spotify (limited to 320kbps while writing this blog) and DLNA (Actual hifi with bit perfection). Pair it with a I2S DAC Hat and you got a very capable music streamer

There exists quite few out of the box options such as Volumio, Roon etc. I tried each of them and felt none checks all the boxes. The first being it requires quite powerful hardware, generally Raspberrypi 3 model onwards. So forget about running it on Model B+ or zero.

image2

Second being, they provides capability of music indexing which either requires music storage directly connected to raspberrypi or connecting it to network storage. Most of the people who keeps their own music collection (legally aquired, obviously) will also have one of the media organizer with them such as Jellyfin, Plex, Emby etc. Now these organizers have build it DLNA media server which already organize your music. Hence it doesnt make sense to index it again. The raspberrypi acts as a headless DLNA renderer which you can control with any UPNP controllers such as BubbleUpnp.

Hardware Requirement

A Raspberrypi(Duh) model B+ above or a zero w. It has to have a debian based OS such as Raspberry Pi OS Lite.There exist numberable tutorials on setting up a raspberrypi either with screens or headless hence we wont be diving deep into it.

A DAC. This can be an I2S Dac such as DAC hat provided by IQAudio, HiFiBerry etc or a USB DAC. For my streamer, I have used an IQAudio DAC Plus. It can support playback upto 24bits-192Khz. It uses I2S bus for audio data in PCM format. There is hardware volume control as well which allow us to send pure audio data to DAC without any software mixing. Along with line out, it also supports a headphone amplifer which can run challenging higher ohm headphones.

You can optionally add Oled display(SSD1306) to your pi to give vitals about the playback. This helps me in cross verifying the playback bitrate and bit depth. It work with I2C bus and there are number of libraries created for this module in python and C/C++. As said, this is an optional step and completely depends on your need.

Setup Raspberry Pi with I2S DAC

The first cousre of action is setting up pi with I2S Dac. As mentioned before, raspberry pi should have a running debian based OS for which you can refer to any tutorial available.

Start by mounting the I2S dac on pi using the standoffs provided.

The dongle which you see attached is a bluetooth 5.0 dongle.

If you dont have alsa available, you can install it using below command.

sudo apt-get install alsa-utils

Check if the pi is recognizing the IQAudio DAC by entering below command.

aplay -l

There should be bunch of cards showing up.If you don't see the DAC, try adding dtoverlay=iqaudio-dacplus to /boot/config.txt

There are two cards by default (card-0/1) which are 3.5mm headphone jack and HDMI audio. We won't be using them hence we will disable them by commenting below lines in /boot/config.txt.

#Disable Headphone

dtparam=audio=on

#Disable HDMI audio

dtoverlay=vc4-kms-v3d

max_framebuffers=2

After rebooting, only IQaudIODAC should be visible now.

You can check the PCM devices by using below command

aplay -L

There should be bunch of PCM devices. Remove /home/pi/.asoundrc since we wont be using any mixers. There can also exist a global config which is in /etc/asound.conf, remove that as well. This should set default PCM device to IQaudIODAC.

Now all our playback can use hw:0,0 which is hardware card-0, device-0.

If you open "alsamixer", volume can be controlled via “Digital” control.

alsamixer

Test the DAC by playing a stream by using below command. If you hear pink panther, congratulations.

curl https://www2.cs.uic.edu/~i101/SoundFiles/PinkPanther30.wav | aplay

Vivek Parashar