MusicPi

A music playback device based on a Raspberry Pi 3

Features

  • PulseAudio network sink (Device will just appear as a audio sink in PulseAudio)

Setup

Install Arch Linux ARM

Installation instructions

Create the required users

useradd --home-dir /var/run/pulse pulse
gpasswd -a pulse audio

Install required packages:

Get root with su and password root, then install a system update and the required packages:

pacman -Syu alsa-firmware alsa-lib alsa-utils avahi pulseaudio pulseaudio-zeroconf

alsa-topology-conf alsa-ucm-conf

Adjust config files

/etc/pulse/system.pa

Append to the config file:

# Enable the native pulseaudio protocol, restrict to ip groups
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.2.0/24;10.0.0.0/23

# Publish the audio stream via zeroconf (so other pulseaudio instances can see it)
load-module module-zeroconf-publish

# Publish the first alsa card as "Stereoanlage"
load-module module-alsa-card device_id=0 sink_name="Stereoanlage"

/etc/systemd/system/pulseaudio.service

Create this file:

[Unit]
Description=pulseaudio System Service

[Service]
type=simple
ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disallow-module-loading
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Auxiliary commands

dry run:

/usr/bin/pulseaudio --system --disallow-exit --disallow-module-loading

Packages

debugging/testing:

pulsemixer

unchecked:

acl
archlinuxarm-keyring
argon2
attr
audit
base
bash
binutils
boost-libs
bzip2
ca-certificates
ca-certificates-mozilla
ca-certificates-utils
coreutils
cracklib
crda
cryptsetup
curl
db
dbus
device-mapper
dhcpcd
dialog
diffutils
dnssec-anchors
e2fsprogs
elfutils
expat
file
filesystem
findutils
firmware-raspberrypi
flac
gawk
gcc
gcc-libs
gdbm
gdk-pixbuf2
gettext
git
glib2
glibc
gmp
gnupg
gnutls
gpgme
gpm
grep
gzip
haveged
hwids
iana-etc
icu
iproute2
iptables
iputils
iw
js60
json-c
kbd
keyutils
kmod
krb5
ldns
less
libarchive
libassuan
libasyncns
libcap
libcap-ng
libcroco
libdaemon
libedit
libelf
libffi
libgcrypt
libgpg-error
libice
libidn2
libjpeg-turbo
libksba
libldap
libmicrohttpd
libmnl
libmpc
libnetfilter_conntrack
libnewt
libnfnetlink
libnftnl
libnghttp2
libnl
libnotify
libnsl
libogg
libp11-kit
libpcap
libpng
libpsl
libpulse
libsamplerate
libsasl
libseccomp
libsecret
libsm
libsndfile
libsoxr
libssh2
libtasn1
libtiff
libtirpc
libtool
libunistring
libusb
libutil-linux
libvorbis
libx11
libxau
libxcb
libxdmcp
libxext
libxfixes
libxi
libxml2
libxtst
licenses
linux-api-headers
linux-firmware
linux-raspberrypi
lz4
mkinitcpio
mkinitcpio-busybox
mpfr
nano
ncurses
net-tools
netctl
nettle
npth
openresolv
openssh
openssl
orc
p11-kit
pacman
pacman-mirrorlist
pam
pambase
pamixer
pciutils
pcre
pcre2
perl
perl-error
perl-mailtools
perl-timedate
pinentry
polkit
ponymix
popt
procps-ng
psmisc
pulseaudio
pulseaudio-zeroconf
pulsemixer
python
python-appdirs
python-cachecontrol
python-chardet
python-colorama
python-contextlib2
python-distlib
python-distro
python-html5lib
python-idna
python-msgpack
python-ordered-set
python-packaging
python-pep517
python-pip
python-progress
python-pyparsing
python-requests
python-resolvelib
python-retrying
python-setuptools
python-six
python-toml
python-urllib3
python-webencodings
raspberrypi-bootloader
raspberrypi-bootloader-x
raspberrypi-firmware
readline
rtkit
sed
shadow
shared-mime-info
slang
speexdsp
sqlite
systemd
systemd-libs
systemd-sysvcompat
tar
tdb
tzdata
util-linux
vi
webrtc-audio-processing
which
wireless-regdb
wireless_tools
wpa_supplicant
xcb-proto
xorgproto
xz
zlib
zstd