HiFiBerry på Raspberry Pi 4B

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.

Skroll til toppen