
HifiBerry er digital-til-analog converter (DAC) til Raspberry PI (RPI) som muliggjør avspilling av høykvalitetslyd til for eksempel et stereoanlegg. Flere forskjellige RPIer kan benyttes, samme med ulike DACer avhenging av hvilken type inngang du har på lydanlegget ditt.
Bakgrunn
Jeg har et vanlig Hifi-anlegg og lydtilkopling til denne gikk gjennom mini-jack. Jeg opplevde over tid at for det første ble mini-jack-ugangen på enhetene mine etter hvert fulle av støv og kontaktene fungerte dårligere og dårligere. Spesielt ved samtidig bruk av deksel på for eksempel mobiltelefonen min. Jeg ville derfor at det skulle være mulig å kople til hifi-anlegget jeg allerede har på andre måter. Jeg har gode erfaringer med Raspberry Pi til ulike andre prosjekter og kom over HiFiBerry DAC-moduler og ulike tjenester som muliggjør stasjonær tilkopling til hifi-anlegget gjennom bruk av ulike tjenester og kilder.
Følgende utstyr benytter jeg

- Raspberry Pi 4B 4GB RAM, Bluetooth, Wifi, ethernet.
- HiFiBerry DAC+ADC for Raspberry Pi3/4
- Steel case for HiFiBerry DAC+/ADC, Pi 4, V2 (Bestilt på HifiBerry.com)
RPI4 2GB skal være tilstrekkelig for å kjøre det følgende oppsettet.
Hva skal jeg sette opp på PI-en?
- Ubuntu server (minimal)
- HiFiBerry DAC
- Pulseaudio
- Lydkilder:
- Airplay
- Bluetooth
- TCP
- Mini-Jack
- Pulsemixer
Micro SD Minnekort
Sørg for å skaffe et minnekort med god hastighet. Jeg har med RPI opplevd flere problemer med dårlige minnekort. Jeg sverger til SanDisk Ultra 64GB.
Linux-distribusjon
Jeg valgte Ubuntu siden den har forhåndskompilert Shairport-sync gjennom APT. Med Centos eller Fedora måtte jeg ha kompilert denne fra bunnen av og funnet avhengighetene. Det finnes en tredjepartspakke, men den fungerte ikke på tidspunktet jeg trengte den.
Når du installerer Linux-distribusjon på en Raspberry Pi følger du bare instruksjoner gitt på ulike nettsider. F.eks denne lenken. Jeg anbefaler å benytte RPI 4B ved installasjon av nye distribusjoner som f.eks Ubuntu. Spesielt desktop-versjoner. Det er likevel mulig å benytte eldre versjoner.
Hvis du ønsker å kjøre RPI4 med grafisk grensesnitt (f.eks Ubuntu Desktop) anbefaler jeg å legge inn en distribusjon med desktop-versjon i dette trinnet. Med Ubuntu Desktop må man sette opp config.txt filen med innstillingene som vist lenger ned. Samtidig må du legge inn SSH for å kunne logge på RPIen fra nettverket ditt.
Konfigurasjon av Linux
Her får du grunnleggende innstillinger for at linux-systemet skal gjøres klart for å installere de øvrige tjenestene.
Lydkortdriver
På Raspberry pi ligger bios-innstillingene i en config.txt fil ytterst i roten på minnekortet. Her kan man sette opp innstillingene som man vanligvis ville gjort på en annen datamaskin under oppstarten på maskinen. I config.txt filen som følger med Ubuntu anbefales det å heller redigere usercfg.txt filen, siden config.txt filen kan bli overskrevet ved oppdateringer. HiFiBerry-drivere ligger allerede klare som overlays i nye distribusjoner og kan enkelt legges til ved å benytte «dtoverlay» funksjonen som vist under. Det enkleste er å gjøre dette på datamaskinen din rett etter at du har lagt inn linux-distribusjonen på minnekortet. Det kan gjøres i en vanlig tekstbehandler.
#usercfg.txt / dtoverlay=hifiberry-dacplusadc
Slå opp på Internett for andre HiFiBerry-modeller enn DAC+ADC.
Rediger også filen syscfg.txt i samme mappe og legge til # foran linjen:
Før: dtparam=audio=on
Etter: # dtparam=audio=on
Da deaktiverer du den innebygde PCM-lydutgangen i RPI. Samtidig slipper du å se denne senere i Pulsemixer.
Du får også tilgang til disse filene når du har startet RPIen. Da under mappen /boot/firmware.
Logge inn
Du kan logge inn på Raspberry pi første gangen ved å kople til USB-tastatur og benytte HDMI-kabel til en skjerm. Hvis du ønsker å benytte RPIen headless kan du benytte et verktøy for å finne IP-adressen din på VLANet den er tilkoplet. F.eks Angry IP eller tilsvarende. Du logger inn med følgende kommando:
ssh ubuntu@IP-ADRESSE
Passordet ved første gangs pålogging er «ubuntu».
Du blir bedt om å opprette nytt passord.
Sette root-passord
I de feste tilfeller bør du unngå å benytte root-bruker. Likevel kan det være hensiktsmessig å benytte root-brukeren under konfigurasjonen av RPIen. Benytt alltid et veldig sterkt passord på root-brukeren.sudo su passwd
Sette opp tilgang til SSH med root
Endre /etc/ssh/sshd_config.d med f.eks nano
Endre «permitrootlogin XXX» til
permitrootlogin yes
Lagre og avslutt nano.
systemctl restart sshd
Du skal nå logge på med rootbruker direkte. ssh root@ipdadresse.
Endre sudo-bruker
Brukeren «Ubuntu» har sudo-tilgang. Bruker-id/Gruppe-id er 1000. Jeg vil endre denne brukeren og dens hjemmekatalog til f.eks navnet mitt. Jeg har også et ID-management system i nettverket og ønsker å {{ :hifiberrykasse.jpg?nolink&300×225|hifiberrykasse.jpg}}endre UID/GID så sudo-brukeren får riktige rettigheter når RPIen meldes inn i domenet.
Du kan endre dette på flere måter. En måte er å redigere /etc/passwd og /etc/group, samt endre navn/eierskap på hjemmekatalog. En annen måte er å kjøre noen kommandoer med usermod. Hvis du velger å endre det manuelt, må du endre alle steder det står «ubuntu» til ditt navn.
usermod -l nyttbrukernavn gammeltbrukernavn
Sett eventuelt bruker-id med en numerisk verdi. Standard er løpenummer fra 1000 og oppover.
usermod -u NYBRUKERID brukernavn
Sett normalt samme gruppe-id som bruker-id
usermod -g NYGRUPPEID brukernavn
Endre så hjemmekatalog med følgende kommando. Normalen er å ha samme navn på hjemmekatalog som brukernavn.
usermod -d /home/nyhjemmekatalog -m brukernavn
Kontroller innstillingene ved å kjøre kommando
id brukernavn
Sette fast IP-adresse i netplan
Ubuntu kjører i nye distribusjoner for ubuntu-server «netplan» for å konfigurere nettverksinnstillinger. Standard «renderer» er «networkd». Hvis du bruker grafisk grensesnitt er normalen «NetworkManager». Jeg kjører ubuntu-server så vil beskrive netplan. \ Du kan redigere /etc/netplan/50-cloud-init.yaml. Kopier filen til din hjemmekatalog (f.eks /root) før du gjør endringer. Da har du en fallback-konfigurasjon hvis du ikke får det til.
cp /etc/netplan/50-cloud-init.yaml /root
Rediger deretter filen /etc/netplan/50-cloud-init.yaml med f.eks vi eller nano
network:
renderer: networkd
version: 2
ethernets: eth0:
dhcp4: no
addresses: - 192.168.1.X/24
gateway4: 192.168.1.1
nameservers:
addresses: [X.X.X.X, X.X.X.X]
Navnetjenere (nameservers) som anbefales er 1.1.1.1, 1.0.0.1 (Cloudflare) eller 8.8.8.8, 8.8.4.4 (Google). Cloudflare støtter også DNS over SSL hvis du har en lokal DNS-server som støtter dette (f.eks pi-hole).
Når du redigerer yaml-filer kan du ikke bruke TAB, men må bruke spacetasten for å få mellomrom.
Test innstillingene med
netplan try
Hvis det fungerte skriver du
netplan apply
Da må du logge på igjen med SSH til den nye ip-adressen. Hvis du har gjort feil må du kople på med skjerm og tastatur og kontrollere innstillingene dine.
Sette opp tidssynk
En rpi har i utgangspunktet ikke innebygd batteri for å holde orden på dato og tid. Det er derfor viktig at RPIen får riktig data og tid fra internett. Alternativt en lokal NTP-server. Når vi skal operere med synkronisering av f.eks digital lyd er vi avhengig av at tid ikke avviker nevneverdig. Dette kan skape problemer.apt install chrony
eller
apt install ntp
Sette hostname og endre /etc/hosts
Først setter vi hostname på klienten. Hvis du har et domene i nettverket setter du f.eks SERVERNAVN.SUBDOMENE.DOMENE.NO. I mange tilfeller kun SERVERNAVN.DOMENE.NO. Har du ikke domene så oppgir du kun klientnavn. Bruk små bokstaver.
hostnamectl set-hostname servernavn.subdomene.domene.no
Endre /etc/hosts. Legg til følgende informasjon:
IPADRESSE servernavn.subdomene.domene.no servernavn
Sette tidssone
Normalt er en RPI innstilt på UTC-tid (GMT). Dette kan endres til norsk tidssone ved å skrive følgende:
timedatectl set-timezone Europe/Oslo
Endre språk
Hvis du vil endre språk i CLI kan du kjøre følgende kommando.
sudo dpkg-reconfigure locales
Endre språk til nb-NO-UTF8 (tilsv) og sett dette som standardspråk.
Brannmur
Det er et greit prinsipp for alle nettverk å åpne porter på klienter og servere du ha behov for og lukke dem hvis du ikke benytter dem. Selv om du har tillit til ditt eget lokalnettverk vil brannmurer på alle klienter/servere gjøre at nettverket er enda sikrere.
Installer f.eks UFW. Denne er enkel å bruke og gir god oversikt for en som ikke vil rote seg inn i iptables og lignende.
apt install ufw ufw allow ssh ufw enable
For å finne ut hvilke porter som skal åpnes kan du når du har installert programmer kontrollere hvilke porter programmene lytter til. Du åpner porter med
ufw allow 1234/tcp eller utw allow 1234/udp
Du fjerner åpne porter med
ufw delete allow 1234/tcp eller utw delete allow 1234/udp
Dette kommer vi tilbake til.
Installasjon av Pulseaudio
apt install pulseaudio pulseaudio-module-zeroconf pulseaudio-module-bluetooth avahi-daemon
Merk deg at avahi-daemon er listet som programmer. Det er vi avhengige av for å kommunisere med Apple-produkter for f.eks AirPlay eller AirPrint. Avahi-daemon sender ut et mDNS-navn på nettverket som kaller Serveren for KLIENTNAVN.local.
Kjøre pulseaudio på systemnivå
Du kan kjøre pulseaudio på systemnivå. Dette er lurt hvis du kjører ubuntu-server i headlessmode og ikke har planer om å være innlogget. Først må du sette opp en systemd-service
nano /etc/systemd/system/pulseaudio.service
Lim inn følgende
[Unit]
Description=PulseAudio system server
[Service]
Type=notify
ExecStart=/usr/bin/pulseaudio --daemonize=no --system --realtime --disallow-exit --log-target=journal
Restart=on-failure
[Install]
WantedBy=multi-user.target
Innstillinger for å spille av mini-Jack og Bluetoothlyd kan feile i Pulseaudio hvis du følger rådet i systemctl status –server pulseaudio om –disallow-module-loading. Det er fordi den er avhengig for å starte loopback-modul.
Kjør så følgende kommandoer
systemctl --system enable pulseaudio.service systemctl --system start pulseaudio.service
Kontroller at tjenesten kjører ved å kjøre følgende kommando
systemctl --system status pulseaudio.service
Hvis du gjør endringer i systemd.service filer senere må du kjøre følgende kommando før du restarter tjenestene
systemctl daemon-reload
Deretter skal du deaktivere tjenester som kjøres på brukernivå. Legg til disse linjene til /etc/pulse/client.conf:
default-server = /var/run/pulse/native autospawn = no
Til slutt kjører du følgende kommandoer:
killall pulseaudio systemctl restart --system pulseaudio
Pulseaudio vi da starte opp igjen og oppdage DAC og kjøre pulseaudio på systemnivå.
Gi lokale brukere tilgang til pulseaudio
Rediger /etc/group og legg til sekundærbrukere i gruppen pulse-access
pulse-access:x:122:pulse,root,shairport-sync,evtandrebrukernavn
Innstillinger for TCP-lyd og Bluetoothlyd
Legg til følgende linjer til slutten i /etc/pulse/system.pa:
#Bluetooth
modules
load-module module-bluetooth-policy
load-module module-bluetooth-discover
autodetect_mtu=yes
#Sound over TCP
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16 auth-anonymous=1
load-module module-zeroconf-publish
Med 192.168.0.0/16 vil alle adresser i 192.168.X.X kunne nå pulseaudio-serveren. Dette er nyttig hvis du har flere VLAN med forskjellige adresser. Hvis du bare har ett VLAN eller en adresseserie i nettverket ditt kan du benytte f.eks 192.168.X.0/24.
Auth-anonymous=1 betyr at alle enheter på nettverket ditt kan benytte Pulseaudio på RPIen din uten ytterligere autorisering.
Lyd fra mini-Jack inngang til mixer
For å få lyd fra mini-Jack(3,5)-inngangen på DACen, gjennom mixer, og til lydutgang må du sette opp en overgang mellom inngang og utgang. Dette kan gjøres på flere måter.
Alternativ 1 (uten bluetooth)
En måte er å legge til følgende linje i slutten av /etc/pulse/system.pa som grunninnstilling:
load-module module-loopback latency_msec=1
Kjør så omstart av tjenesten for at pulseaudio skal kjøre som konfigurert med innstillingene som er utført:
systemctl restart --system pulseaudio
Dette kan skape utfordringer hvis du også benytter Bluetooth siden denne også benytter loopback-modulen og lyden kan bli dårlig og med ekko/delay.
Alternativ 2 (med bluetooth)
I dette alternativet skal vi omgå loopback-modulen. Først må du finne navn på inngangen, deretter navn på utgangen og sette opp et bash-script som kjøres ved oppstart av RPIen.
Finne navn på inngangen gjøres med følgende kommando
pactl list sources | grep -e 'Name:' -e 'index:' Name: alsa_output.platform-soc_sound.stereo-fallback.monitor Name: alsa_input.platform-soc_sound.stereo-fallback
Vi tar med oss navnet //alsa_input.platform-soc_sound.stereo-fallback//. Vi benytter ikke monitor-inngangen.
Finne navn på utgangen gjøres med følgende kommando:
pactl list sinks | grep -e 'Name:' -e 'index:' Name: alsa_output.platform-soc_sound.stereo-fallback
Vi tar med oss navnet //alsa_output.platform-soc_sound.stereo-fallback//.
Deretter skal vi opprette et bash-script. Opprett inputoutput i /usr/bin. Her benytter vi navnene på [input] og [output] fra resultatene over.
#!/bin/bash
# Sound from input to output without loopback-module
# Format: pacat -r --latency-msec=50 -d [input] --client-name=Inputsource | pacat -p --latency-msec=50 -d [output] --client-name=Inputsource
# Juster msec etter ditt behov. Ikke over 100msec, da dette vil skape delay hvis lyden skal i synk med video
pacat -r --latency-msec=50 -d alsa_input.platform-soc_sound.stereo-fallback --client-name=Inputsource | pacat -p --latency-msec=50 -d alsa_output.platform-soc_sound.stereo-fallback --client-name=Inputsource
Gjør filen kjørbar med: chmod x. Test scriptet med følgende kommando:
bash /usr/bin/inputoutput
Pacat vil bli synlig i volumkontroll til mixer som «Inputsource».
Opprett så en systemd-daemon for å kjøre scriptet som en tjeneste ved oppstart:
nano /etc/systemd/system/inputoutput.service
Lim inn følgende:
[Unit]
Description=HiFiBerry input to output with pacat
[Service]
ExecStart=/usr/bin/inputoutput Restart=on-failure
[Install]
WantedBy=multi-user.target
Start tjenesten med:
systemctl start inputoutput.service
Aktiver tjenesten ved oppstart med:
systemctl enable inputoutput.service
Sjekk at den fungerer med:
systemctl status inputoutput.service
Åpne porter i brannmur
Kjør følgende kommandoer for å se hvilke porter som benyttes av avahi og pulseaudio:
netstat -tulpn
Vi skal åpne de portene som avahi-daemon og pulseaudio lytter på
tcp 0 0 0.0.0.0:4713 0.0.0.0:* LISTEN XXXX/pulseaudio
udp 0 0 0.0.0.0:5353 0.0.0.0:* XXXX/avahi-daemon:
udp 0 0 0.0.0.0:50730 0.0.0.0:* XXXX/avahi-daemon:
Kjør kommandoene:
ufw allow 4713/tcp ufw allow 5353/udp ufw allow 50730/udp
Portene på avahi-daemon kan fravike i den siste kommandoen. Ser du flere porter i bruk i serie så sett alternativt opp en serie med ufw allow 50730:50739/udp. Normalt er dette ikke nødvendig, men kan være relativt uproblematisk på lokalnettverk.
Kontroller at UFW har åpnet portene ved å kjøre kommandoen
ufw status
Med disse innstillingene kan du oppdage pulseaudio som audio-sink gjennom avahi på øvrige pulseaudioenheter på nettverket.
Kontrollere på pulseaudioklienter at du har forbindelse
Jeg går ikke igjennom hvordan du setter dette opp på en klient. Det er ofte ganske enkle bruksanvisninger på dette på internett. Det er flere måter i GNOME/KDE som kan vise deg lydenhetene. Blandt annet Pavucontrol osv.
Sjekk tilkoplingen på klienter med pusleaudio i CLI med følgende kommando:
avahi-browse -a |grep Pulse
eller
pactl list sinks
Installasjon av Bluetooth
apt-get install pi-bluetooth bluez-tools
Rediger deretter filen /etc/bluetooth/main.conf:
[General] Name = HiFiBerry #(Evt annet navn) Class = 0x41C DiscoverableTimeout = 0 #Always discoverable [Policy] AutoEnable=true
Min erfaring er at Bluetooth likevel kan dukke opp på andre enheter som klientnavn.subdomene.domene.no så jeg anbefaler å kjøre følge kommando i tillegg:
hciconfig hci0 name 'HiFiBerry'
Sett så samme navn på følgende måte
bluetoothctl
[bluetooth]# power on Changing power on succeeded
[bluetooth]# discoverable on Changing discoverable on succeeded [CHG] Controller XX:XX:XX:XX:XX:XX Discoverable: yes [bluetooth]# pairable on Changing pairable on succeeded
[bluetooth]# agent on Agent registered
[bluetooth]# default-agent Default agent request successful
[blietooth]# system-alias HiFiBerry
quit
Alternativt kan du også senere og manuelt endre «alias=»-informasjon i /var/lib/bluetooth/XX:XX:XX:XX:XX:XX/settings til HiFiBerry eller navnet du har valgt.
Slik gjør du RPI synlig for andre enheter
hciconfig hci0 piscan
Slik gjør du RPI usynlig igjen (hvis du ikke vil andre skal se den). Dette anbefales ikke hvis du vil ha automatisk tilkopling.
hciconfig hci0 noscan
Automatisk sammenkopling
For å gjøre sammenkopling mellom mobil enhet og RPI ønsker vi å sette opp automatisk sammenkopling ved forespørsel. Opprett filen ///etc/bluetooth/pin.conf og legg inn en foretrukket pinkode//
* 1234
Endre så rettigheter for filen
chown root:root /etc/bluetooth/pin.conf chmod 600 /etc/bluetooth/pin.conf
Opprett en tjeneste som automatiserer sammenkoplingen gjennom bt-agent. Opprett filen ///etc/systemd/system/bt-agent.service og lim inn følgende://
[Unit] Description=Bluetooth Auth Agent After=bluetooth.service PartOf=bluetooth.service [Service] Type=simple ExecStart=/usr/bin/bt-agent -c NoInputNoOutput -p /etc/bluetooth/pin.conf ExecStartPost=/bin/sleep 1 ExecStartPost=/bin/hciconfig hci0 sspmode 0 [Install] WantedBy=bluetooth.target
Kjør som følge av dette følgende kommandoer:
systemctl daemon-reload systemctl enable bt-agent systemctl restart bt-agent
Sjekk at tjenesten kjører med følgende kommando
systemctl status bt-agent.service ● bt-agent.service - Bluetooth Auth Agent Loaded: loaded (/etc/systemd/system/bt-agent.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2021-04-11 16:06:37 CEST; 3 days ago Main PID: 18442 (bt-agent) Tasks: 3 (limit: 4435) CGroup: /system.slice/bt-agent.service └─18442 /usr/bin/bt-agent -c NoInputNoOutput -p /etc/bluetooth/pin.conf
Kjør deretter følgende kommando
systemctl restart bluetooth
Vær tålmodig. Det kan etter min erfaring av og til ta tid å restarte bluetooth-tjenesten på RPI. Kanskje 1 min.
Det skal nå være mulig å finne RPI-bluetoothenheten på andre enheter og kople til ved bruk av koden oppgitt i pin.conf.
Kople enheter til Bluetooth
Dette er den manuelle metoden hvis Bluetooth er usynlig for mobile enheter.
$ bluetoothctl [NEW] Controller XX:XX:XX:XX:XX:XX HiFiBerry [default] [bluetooth]# scan on [NEW] Device XX:XX:XX:XX:XX:XX XX-XX-XX-XX-XX-XX [bluetooth]# trust XX:XX:XX:XX:XX:XX Changing YY:YY:YY:YY:YY:YY trust succeeded [bluetooth]# quit
Skape tillitsforhold for automatisk sammenkoplede enheter
Du må «truste» enheter for å kunne spille av lyd. Når du har trustet ID-en til din mobile enhet kan du finne RPI med Bluetooth og kople til. Benytt pin-koden som du oppga tidligere.
$ bluetoothctl [NEW] Controller XX:XX:XX:XX:XX:XX HiFiBerry [default] [bluetooth]# devices Device XX:XX:XX:XX:XX:XX Alias_Navn [bluetooth]# trust XX:XX:XX:XX:XX:XX Changing YY:YY:YY:YY:YY:YY trust succeeded [bluetooth]# quit
Gi Pulseaudio tilgang til Bluetooth
nano /etc/dbus-1/system.d/pulseaudio-bluetooth.conf. Lim inn følgende:
<busconfig>
<policy user="root"> <allow own="org.bluez"/>
<allow send_destination="org.bluez"/>
<allow receive_sender="org.bluez"/>
</policy>
<policy user="pulse">
<allow own="org.bluez"/> <allow send_destination="org.bluez"/>
<allow receive_sender="org.bluez"/>
</policy>
</busconfig>
Restart Pulseaudio
systemctl restart --system pulseaudio
Latency på Bluetooth for å unngå hakking og dårlig lyd
Standard latency for nye enheter er 0 millisekunder. Dette kan skape utfordringer for lydkvalitet, samt at lyden kan feile ved spoling og veksling mellom kilder på din enhet. \ Opprett et bash-script i din hjemmekatalog. F.eks bluetoothfix.sh. Den må også gjøres kjørbar med chmod x. Kjør scriptet for nye enheter som er tilkoplet.
#!/bin/bash
# fix bluetooth sound synchronization
# Source: https://blogsleeplessbeastie.wpcomstaging.com/2016/05/09/how-to-fix-bluetooth-sound-synchronization/
# References: http://askubuntu.com/questions/145935/get-rid-of-0-5s-latency-when-playing-audio-over-bluetooth-with-a2d
LANG=C
for card in $(pactl list cards short | awk '$2 ~ /^bluez_card/ { print $1 }');
do # Print device name echo -n "Found device: " pactl list cards | awk -v card="#${card}" -v ORS="\n" -v FS="\n" -v RS="" 'split($1,var," ") var[1] ~ /Card/ && var[2] == card { print }' | awk -v FS=" = " '/device.description/ { print $2}' | tr -d \" # Print profiles pactl list cards | awk -v card="#${card}" -v ORS="\n" -v FS="\n" -v RS="" -e 'split($1,var," ") var[1] ~ /Card/ && var[2] == card { print }' | awk '/Profiles/,/Active/ {gsub(/^\t/,"",$0); print}'
# echo "Set profile: Headset Head Unit (HSP/HFP)"
# pactl set-card-profile ${card} headset_head_unit
# echo "Set profile: Advanced Audio Distribution Profile (A2DP)" # pactl set-card-profile ${card} a2dp_sink echo "Setting Port Latency Offset to 125000" pactl set-port-latency-offset ${card} phone-output 125000 done
Dette vil optimalisere lydkvalitet og redusere «glitches». Kommandoen må kjøres en gang for nye Bluetooth-enheter som pares. Dessverre har jeg ikke funnet innstillinger for å sette dette opp som standard.
Installasjon av Shairport-sync
Shairport-sync lar deg benytte Airplay-enheter opp mot HiFiBerry. F.eks alle typer iOS-enheter fra Apple som IPhone, Ipad, Apple-TV. I tillegg vil klienter med OSx fungere fra f.eks MacBook osv. Shairport-Sync har en latency som gir 2-2.22 sekunder forsinkelse på lyden. Samtidig vil lyden på klient/enhet og HiFiBerry være i synk. Dette kan illustreres hvis du kjører ITunes i iOS og kjører lyd både på HiFiBerry og klient samtidig.
Shairport-sync installeres med følgende kommando
apt install shairport-sync
og aktiveres med
systemctl enable shairport-sync service shairport-sync start
Shairport-sync konfigureres ved å redigere /etc/shairport-sync.conf. Det holder at filen inneholder følgende:
general= {
name = "HiFiBerry";
output_backend = "pa";
port = 5000; udp_port_base = 6001;
udp_port_range = 10; };
pa = { application_name = "Shairport Sync";
};
Restart pulseaudio med
systemctl restart shairport-sync
Mer at hvis du restarter pulseaudio må du ofte også restarte shairport-sync. Sett eventuelt opp et bash-script som restarter begge to etter hverandre basert på kommandoene over.
Åpne Shairport-sync i brannmur
Sjekk hvilke porter Shairport-sync må ha åpne i brannmur
netstat -tulpn
tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN XXXX/shairport-syn
udp6 0 0 fe80::XXXX:6001 :::* XXXX/shairport-syn
udp6 0 0 fe80::XXXX:6002 :::* XXXX/shairport-syn
udp6 0 0 fe80::XXXX:6003 :::* XXXX/shairport-syn
Åpne porter med
ufw allow 5000/tcp ufw allow 6001:6010/udp
Nå skal du ha tilgang til HiFiBerry over Airplay på mobile enheter.
Installasjon av Pulsemixer
Pulsemixer er et grafisk grensesnitt i CLI som muliggjør å justere volum på utenheter og alle kilder på lydkortet.
apt install python3-pip pip3 install pulsemixer
Kjør pulsemixer for å få tilgang på grafisk grensesnitt i CLI
pulsemixer
Grensesnittet er intuitivt. Det forklares ikke ytterligere.
Konklusjon
Du har nå installert en lyd-server for tilkopling til hifi-anlegg med Raspberry Pi 4 gjennom RCA-kontakter. Videre kan du spille av lyd gjennom Airplay, Bluetooth, over TCP (nettverket) og gjennom mini-jack-inngangen på DACen.
Oppsettet er svært lite ressurskrevende. Du klarer fint å kjøre dette på en RPI3 eller RPI4 2GB:
Hvis du opplever feil med dokumentasjonen, eller har tillegg/justeringer kan du foreslå tekst i denne løsningen.