First, install Raspbian.
This configuration works with HiFiBerry DACs and the Sabre ES9023 chip.
If you are using WiFi, turn off WiFi Power Management.
$ sudo iwconfig wlan0 power offConfigure the device tree overlay by editing boot config.
$ sudo nano /boot/config.txtRemove the following line if it exists. This will disable the onboard sound card.
dtparam=audio=onAdd the following line to the end of the file.
dtoverlay=hifiberry-dacReboot your Pi and make sure device shows up.
$ sudo reboot now
$ aplay -lLook for card 0: sndrpihifiberry. Your card ID may be different from 0.
Create /etc/asound.conf with the following content. Replace 0 with your card ID from above.
pcm.!default {
type hw
card 0
}
ctl.!default {
type hw
card 0
}Reboot your Pi and make sure the ALSA settings have taken effect.
$ sudo reboot now
$ alsamixerYou should see Card: snd_rpi_hifiberry_dac displayed in the top left corner.
Install https://github.com/librespot-org/librespot using the commands below.
First, install Rust and Cargo using rustup.
$ curl https://sh.rustup.rs -sSf | shLog out of your account and log back in to add the cargo binary into your PATH.
Now, install git and build dependencies.
$ sudo apt install git build-essential portaudio19-devClone the repo and navigate to the directory.
$ git clone https://github.com/librespot-org/librespot.git
$ cd librespotOptional step: Change the number of volume steps from 64 to 16. I prefer this because it matches the iPhone's volume control. 🙂
$ nano connect/src/spirc.rsLook for
repeated.push(64)and change it torepeated.push(16).
Build librespot. This step will take a very long time on a Raspberry Pi - most likely 30 minutes or more.
$ cargo build --releaseNow, let's create a system service for librespot.
sudo nano /etc/systemd/system/librespot.serviceCopy the following into the service configuration file.
[Unit]
Description=Spotify Connect daemon
After=network.target
StartLimitIntervalSec=0
Documentation=https://github.com/librespot-org/librespot
[Service]
Type=simple
Restart=always
RestartSec=1
User=pi
ExecStart=/home/pi/librespot/target/release/librespot -u [spotify_username] -p [spotify_password] -n "Librespot" -b 320 -c /home/pi/librespot/cache --enable-volume-normalisation
[Install]
WantedBy=multi-user.targetNow we can start the service.
$ sudo systemctl start librespotAnd set it to start automatically on every boot.
$ sudo systemctl enable librespotYou can check the status of the service at any time by running the following command.
$ systemctl status librespotThe following is taken from the install instructions located at https://github.com/mikebrady/shairport-sync/tree/development.
$ git clone https://github.com/mikebrady/shairport-sync.git
$ git checkout development
$ autoreconf -i -f
$ ./configure --sysconfdir=/etc --with-alsa --with-pa --with-avahi --with-ssl=openssl --with-soxr --with-systemd
$ make
$ sudo make install
$ sudo systemctl enable shairport-syncNow, edit this file:
sudo nano /etc/shairport-sync.confChange these values:
general = {
name = "whatever you want!";
};
alsa = {
output_device = "hw:1,0"; // (or whatever number card,device "sndrpihifiberry" is above)
interpolation = "soxr";
};If audio is underflowing, set audio_backend_buffer_desired_length to 22050.
Restart Shairport-sync to apply the new settings.
$ sudo service shairport-sync restart