ALL CREDITS TO @badaix AND @BaReinhard
This will setup a raspberry-pi-3 as a snapcast-server and snapcast-client.
Possible music sources for the snapserver-component: Bluetooth, Airplay, Spotify, Line-In (more to come eg. RTP)
Music sinks (snapclients): usb soundcard connected to my stereo, another Pi
To Do:
- Energy saving by disabling onboard bluetooth, wifi and soundcard
SYSTEM ENVIRONMENT
- 2017-07-05-raspbian-jessie-lite.img
- rpi3, logilink-usb-bt-dongle, usb-soundcard
sudo raspi-config
PREPARE, INSTALL AND CONFIGURE BLUTOOTH AND AIRPLAY FUNCTIONALITY (SSRPARI)
sudo apt update
sudo apt upgrade
sudo apt install git
git clone https://github.com/BaReinhard/Super-Simple-Raspberry-Pi-Audio-Receiver-Install.git
cd Super-Simple-Raspberry-Pi-Audio-Receiver-Install/
sudo ./install.sh
# Do you want to install SnapCast? (y/n): n
# Do you want AirPlay Enabled? (y/n) : y
# Do you want Bluetooth A2DP Enabled? (y/n) : y
# Do you want to setup as an Access Point? (Necessary for AirPlay, in location without a Wireless Network) (y/n) : n
# Do you want Kodi installed? (y/n) : n
# Do you want to use infrared remotes? (y/n) : n
# Do you want to use a Sound Card? (y/n) : y
# Do you want to setup device as a UPnP Renderer? (y/n) : n
# Do you want all the Devices to use the same name? (y/n) : y
# Device name: MultiPi
# Do you want to use an AirPlay password? (y/n) : n
# (...)
# 9. USB Sound Card
# (...)
# Which Sound Card are you using? (0/1/2/3/4/5/6/7/8/9/10/11) : 9
wget https://github.com/badaix/snapcast/releases/download/v0.15.0/snapserver_0.15.0_armhf.deb
sudo dpkg -i snapserver_0.15.0_armhf.deb
sudo apt-get -f install
wget https://github.com/badaix/snapcast/releases/download/v0.15.0/snapclient_0.15.0_armhf.deb
sudo dpkg -i snapclient_0.15.0_armhf.deb
# LIST SOUNDCARDS
snapclient --list
# CONFIGURE SNAPCLIENT
sudo nano /etc/default/snapclient
# EDIT SNAPCLIENT_OPTS=""
# -h <HOST> -s <SOUNDCARD> -d <DAEMONIZE>
# SNAPCLIENT_OPTS="-h localhost -s 25 -d"
sudo systemctl restart snapclient.service
# CREATE SNAPCAST-STREAM = NEW PULSEAUDIO-SINK
sudo nano /etc/default/snapserver
# EDIT
# #SNAPSERVER_OPTS=""
# SNAPSERVER_OPTS="-d -b 250 --sampleformat 48000:16:2 -s pipe:///tmp/snap_blue?name=Bluetooth&sampleformat=44100:16:2&mode=read"
# CREATE SYSTEMWIDE PULSEAUDIO-PIPE-SINK
sudo nano /etc/pulse/system.pa
# APPEND
# load-module module-pipe-sink file=/tmp/snap_blue sink_name=bluetooth
# ASSIGN SINK TO [Bluetooth-Sources](https://github.com/BaReinhard/Super-Simple-Raspberry-Pi-Audio-Receiver-Install/issues/6#issuecomment-284573272)
sudo nano /usr/local/bin/bluez-udev
# EDIT
# #audio_sink=0
# audio_sink=1
sudo reboot
BUILD, CONFIGURE LIBRESPOT
sudo apt-get install build-essential portaudio19-dev git
curl https://sh.rustup.rs -sSf | sh
sudo reboot
git clone https://github.com/librespot-org/librespot.git
cd librespot/
cargo build --release
$PATH
sudo cp target/release/librespot /usr/bin
# CREATE SNAPCAST-STREAM
sudo nano /etc/default/snapserver
# APPEND
# SNAPSERVER_OPTS=" ... -s spotify:///librespot?name=Spotify&username=username&password=yourpassword&devicename=SpotiPI&bitrate=320 ... "
sudo systemctl restart snapserver.service
BUILD, EDIT AND ENABLE CPIPED FOR LINE-IN AUDIO
git clone https://github.com/b-fitzpatrick/cpiped.git
cd cpiped/
make
sudo cp cpiped /usr/local/bin/
# FIND CAPTURE DEVICE/LINE-IN
arecord -L
nano scripts/init.d/cpiped
# EDIT DAEMON-VARIABLES
# DAEMON=/usr/local/bin/cpiped # LOCATION OF THE BINARY
# DAEMON_ARGS="-D -d sysdefault:CARD=Set /tmp/snap_jack" # LOCATION OF THE PIPE
sudo cp cpiped /etc/init.d/
sudo chmod +x /etc/init.d/cpiped
sudo systemctl enable cpiped
sudo systemctl start cpiped
# CREATE SNAPCAST-STREAM
sudo nano /etc/default/snapserver
# EDIT
# #SNAPSERVER_OPTS=""
# SNAPSERVER_OPTS="-d -b 250 --sampleformat 44100:16:2 -s pipe:///tmp/snap_jack?name=Jack&sampleformat=44100:16:2 -s pipe:///tmp/snap_blue?name=Bluetooth&mode=read&sampleformat=44100:16:2 -s spotify:///librespot?name=Spotify&username=username&password=yourpassword&devicename=SpotiPI&bitrate=320"
CONFIGURE AIRPLAY
# CREATE SNAPCAST-STREAM
sudo nano /etc/default/snapserver
# APPEND
# SNAPSERVER_OPTS=" ... -s airplay:///shairport-sync?name=Airplay&devicename=MultiPi&port=5000 ... "
sudo systemctl disable shaiport-sync
sudo nano /etc/shairport-sync.conf
# EDIT
# //output_backend = "alsa";
# output_backend = "stdout";
I added a good deal of this to the new multi-exec brach of https://github.com/bareinhard/super-simple-raspberry-pi-audio-receiver-install
I have now switched to downloading the .deb files and dpkging them instead of a full compiling (saves a lot of time). Also used some of the configuration for the snapservers.
I found that changing the shairport-sync.service ExecStart to
ExecStart=/usr/local/bin/shairport-sync -o pipe -- /tmp/snap_blue
, allowed for reliable Shairport-sync streaming to the pipe. For whatever reason the config file just didn't work with pipe output. (Maybe user error). Although I didnt use librespot just because of the extended amount of time it took to configure, I will eventually add it as an option. (Possibly tonight). All in all good work, and thanks for the walkthrough. Ill be putting your name in the contrib file since you provided pretty much all of the work for this.