Raspberry Zero W & Audio


© März 2021, letzte Änderung am 16.01.22

Übersicht

Weitere Themen auf anderen Seiten…

Installation & Konfiguration
Pin-Belegung und Handhabung
ZigBee Einrichten

Hifiberry DAC+ Zero

Für einfache Tests habe ich mir zunächst einen DAC+ Zero besorgt.
Laut Webseite, hat diese Platine kein Volume control, kein EEPROM,
keinen ultra-low noise Regler,
aber einen 192 kHz 24 Bit DAC - digital analog converter.

Laut Dokumentation verwendet der DAC+ Zero nur folgende Pins.
Auf der Platine selber steht noch config.txt: dtoverlay=hifiberry-dac.
Die Verknüpfung zur Beschreibung support.hifiberry.com funktioniert nicht mehr!

Wer sich die Platine genauer ansieht, sieht dass aus den 5V Pin 2 & 4
mittels analogen Längsregler 3V3 für den ti.com PCM 5101A erzeugt werden.

Desweiteren ist noch 3V3 von Pin 17 genutzt
(geht an PCM 5101A Pin 20 - digital power vom DAC).

Laut Datenblatt ist der PCM5101A, von den übrigen 2,
von mittlerer Qualität mit ordentlichen 106 dB SNR.
Das bedeutet bei Vollaussteuerung, also 2,1 VRMS bzw. 0 dB FS
sind das etwas über 17 Bit (bei ca. 6 dB/Bit)
Etwas besser ist der PCM5102A mit 112 dB SNR also etwas über 18 Bit.
In der Praxis sollten die ±2,97 V nie erreicht werden,
weil der geringste Wert darüber zum "clippen",
also hässlichen Verzerrungen, führt.

Am DAC selber sind bestimmte Pins passend anzuschließen.
Pin 16 FMT   vom DAC ist auf Gnd für das I2S Format statt "Left-justified".
Pin 17 XSMT   ist über einen Widerstand auf 3V3 -> soft un-mute
Pin 16 FMT   ist auf Gnd, also Audio-Format I2S
Pin 12 SCK - system master clock   ist auf Gnd
    → kein interpolations Filter ist aktiv
Pin 11 FLT   scheint offen zu sein - Gnd für normal latency ist sinnvoll.
Pin 10 DEMP - De-emphasis control
    für eine Sampling-Rate von 44,4 kHz ist deaktiviert, da auf Gnd

Folgende Sample-Raten sind mit den 3-Wire PCM Interface
in dieser Verschaltung möglich.

kHz BCK 32 BCK 64
44,1 1,4112 MHz 2,8224 MHz
48 1,536 MHz 3,072 MHz
96 3,072 MHz 6,144 MHz
192 6,144 MHz 12,288 MHz
384 12,288 MHz 24,576 MHz

Mit diesen Informationen kann man dann auch andere Platinen nutzen,
welche gerade mal die Hälfte kosten…

Quellen

powerpi.de   High End Musik-Streaming-Player selbst gebaut – Raspberry Pi 2 Anleitung
bnikka.com   List of HiFi DAC on Raspberry Pi(I2S output)
himbeer.me   How to connect a PCM5102 I2S DAC to your Raspberry Pi
sengotta.net   Connecting a PCM5102a breakout board to a Raspberry Pi
hifiberry.com   HiFiBerry DAC+ Zero
pimoroni.com   pHAT DAC
sorokin.engineer   Internet radio: How to connect I2S DAC to Raspberry Pi
stackexchange.com   How to make PCM5102 DAC work on Raspberry Pi ZeroW?

Zum Anfang

Konfiguration und erste Tests

Um den Audio-DAC PCM5101A betreiben zu können,
ist das PCM-Interface zu aktivieren.
Glücklicherweise sind die vielen Paramater zusammengefasst zu
dtoverlay=hifiberry-dac.

sudo nano /boot/config.txt
…
# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on                    # für PCM5101A nicht genutzt
dtparam=i2s=on                         # aktiviert für PCM5101A
#dtparam=spi=on                        # für PCM5101A nicht genutzt
…
# Enable audio (loads snd_bcm2835)
#dtparam=audio=on                      # auskommentiert
dtoverlay=hifiberry-dac                # neu hinzugefügt

Damit der PCM5101A zum Standard Audiointerface wird, kann noch folgende Datei editiert werden,
muss aber wahrscheinlich nicht. Es sei denn man hat beispielsweise vorher eine USB-Soundcard verwendet.

sudo nano /usr/share/alsa/alsa.conf
…
defaults.ctl.card 0                    # steht bereits auf 0
defaults.pcm.card 0                    # steht bereits auf 0
…

Bei alten Systemen (nicht DEB 10), muss noch eine Datei erzeugt werden,
um zu definieren, welche Schnittstelle für die Audioausgabe genutzt wird.
Auch wenn sie unter Umständen nicht genutzt wird, habe ich sie angelegt.

sudo nano /etc/asound.conf
pcm.!default  {
 type hw card 0
}
ctl.!default {
 type hw card 0
}

Die Änderungen haben erst nach einen Neustart eine Auswirkung.

sudo reboot

Nun teste ich, ob die richtige Meldung kommt.
Nicht richtig wäre z.B. wenn noch HDMI oder bcm2835 (PWM-Sound) angezeigt wird.

ssh pi@audio01.fritz.box               wieder einloggen
Enter passphrase for key '/home/a1/.ssh/id_rsa': 
Last login: Mon May  3 20:13:57 2021 from 192.168.178.35

aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: sndrpihifiberry [snd_rpi_hifiberry_dac], device 0: HifiBerry DAC HiFi 
        pcm5102a-hifi-0 [HifiBerry DAC HiFi pcm5102a-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Nun kann man an die RCA- oder Chinch-Buchsen einen, nicht zu laut eingestellten, Verstärker anschließen
und mit folgender Zeile ein Rosa-Rauschen abwechselnd auf die beiden Kanäle abgeben.

speaker-test -c2 -wav -l7

speaker-test 1.1.8

Playback device is default
Stream parameters are 48000Hz, S16_LE, 2 channels
Using 16 octaves of pink noise
Rate set to 48000Hz (requested 48000Hz)
Buffer size range from 128 to 131072
Period size range from 64 to 65536
Using max buffer size 131072
Periods = 4
was set period_size = 32768
was set buffer_size = 131072
 0 - Front Left
 1 - Front Right
Time per period = 2.770632
…

Möchte ich diesen Test später wiederholen, ist es nötig das pulseaudio-System zu de-installieren.

Quellen

instructables.com   Test Sound Card and Speakers in Raspberry Pi
wordpress.com   Connect, Configure and Test USB Microphone and Speaker with Raspberry Pi
raspberrypi-spy.co.uk   Using a USB Audio Device with the Raspberry Pi
scphillips.com   Sound configuration on Raspberry Pi with ALSA
ubuntuusers.de   ALSA - Advanced Linux Sound Architecture

Zum Anfang

ALSA & PulseAudio

Die Zusammenhänge zwischen den Soundsystem ALSA - Advanced Linux Sound Architecture
und den erweiterten Soundserver PulseAudio habe ich bereits unter Linux beschrieben.
Siehe Linux Audio.

Zum Anfang

PulseAudio-Sound-Server

Für ALSA - Advanced Linux Sound Architecture ist weder der Vorgänger OSS, noch PulseAudio nötig.
ALSA ist quasi die Software um direkt die Sound-Hardware anzusteuern.
Jede Sound-Hardware oder ALSA-Card besteht wiederum aus
Ein- und Ausgabe-Geräten (send device, receive device).
z.B. card 0: pcm5102a-hifi-0   subdevice #0 (für Audioausgabe)

sudo apt install alsa-base             Konfigurations-Dateien
sudo apt install alsa-utils            hiermit stehen dann folgende Tools zur Verfügung:  alsactl
                                       alsaloop alsamixer alsaaucm amixer amidi aplay … speaker-test

Um mehr Möglichkeiten zu haben, installiere ich noch PulseAudio, was einen Soundserver darstellt,
welcher ALSA nutzt. Siehe wikipedia.org   PulseAudio

sudo apt install pulseaudio            der Soundserver…
sudo apt install pulseaudio-utils      paplay pacat parec pacmd pactl padsp pax11publish

Da ich den Zero-W als Sound-Server über das Netz mit Audiodaten speisen möchte,
benötige ich noch folgendes.

sudo apt install pulseaudio-module-zeroconf enth. avahi-daemon
sudo apt install avahi-daemon          bereits vorhanden
sudo apt install dbus-x11

Zusäzlich sind noch zwei Zeilen zu ergänzen.
Wobei der Sound-Server audio01.fritz.box = 192.168.178.50 nur im lokalen Netz hören soll.
Entsprechend werden die ersten 24 Bit ausmaskiert -> 192.168.178.0/24.
In diesem Beispiel habe ich nur IPv4 Adressen angewendet.
IPv6 Adressen können bei Bedarf mit den Semikolon als Trennzeichen, angehängt werden.

sudo nano /etc/pulse/system.pa
…
# 18.05.21                             # 192.168.178.0/255.255.255.0 = 192.168.178.0/24
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.178.0/24
load-module module-zeroconf-publish    # Dienst bekannt machen

Nun sind noch die Dienste auf dem Zero-W zu starten
um sicherzustellen, dass sie auch nach den Neustart laufen.

sudo systemctl start pulseaudio.service     funktioniert nicht bei DEB 10
Failed to start pulseaudio.service: Unit pulseaudio.service not found.
sudo systemctl enable pulseaudio.service    würde den Daemon stoppen
Failed to enable unit: Unit file pulseaudio.service does not exist.

pulseaudio -k                               Daemon killen (steht schon)
E: [pulseaudio] main.c: Failed to kill daemon: No such process

pulseaudio --start                          Daemon erneut starten
N: [pulseaudio] main.c: User-configured server at 
{de746cc27e0f4e179e6f0fa39ef4d167}unix:/run/user/1001/pulse/native 
tcp:b41:4713 tcp6:b41:4713, refusing to start/autospawn.

pulseaudio -D                               Daemonize  after  startup

sudo service pulsaudio restart
Failed to restart pulsaudio.service: Unit pulsaudio.service not found.

systemctl --user restart pulseaudio
Failed to connect to bus: No such file or directory

Pulseaudio ist zwar installiert, aber der Service läßt sich nicht starten.

Damit der Audio-Service gefunden wird,
starte ich den Avahi-Daemon erneut, was auch nicht half.

sudo systemctl daemon-reload

sudo systemctl start avahi-daemon.service

sudo systemctl enable avahi-daemon.service
Synchronizing state of avahi-daemon.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable avahi-daemon

Das scheint aber alles nicht zu helfen.

Abschließend noch ein kleiner Test.
journalctl -u pulseaudio                    bisher keine Fehlermeldungen
-- Logs begin at Mon 2021-05-17 23:11:25 CEST, end at Wed 2021-05-19 00:03:03 CEST. --
-- No entries --
pacmd list-modules | grep native-protocol-tcp

pacmd list-modules | grep zeroconf-publish  wenn keine Meldung kommt, ist alles gut.

Auf dem Raspberry sollte nun der Sound-Server von allen Computern erreichbar sein.

Quellen

manurevah.com   PulseAudio: Sound over the network
scphillips.com   Playing music on a Raspberry Pi using UPnP and DLNA (revisited)
stackexchange.com   How to set up PulseAudio remote properly and securely?
freedesktop.org   PulseAudio
stigok.com   Stream audio over network with PulseAudio running on Raspberry Pi
debianforum.de   Audiokonfiguration
ubuntuusers   PulseAudio
forum-raspberrypi.de   [Anleitung] zur Installation und Konfiguration von PulseAudio auf dem Raspberry Pi (in meinem Fall Pi 4)
forum-raspberrypi.de   PulseAudio/Examples

Zum Anfang

Klienten der Audio-Quellen konfigurieren

Um auf den Raspberry Sound-Server zugreifen zu können, ist auf dem Klienten Avahi zu starten.

su
# systemctl start avahi-daemon.service
# systemctl enable avahi-daemon.service
$ systemctl --user restart pulseaudio.service






Edit /etc/pulse/default.pa and add these lines:

load-module module-native-protocol-tcp
load-module module-zeroconf-discover

Run these commands:

pulseaudio -k
pulseaudio --start
pacmd list-modules | grep native-protocol-tcp
pacmd list-modules | grep zeroconf-discover

Only after those changes in the GUI of paprefs did I see remote output devices on the client.




su apt install paprefs


pactl info
Server String: tcp:b41:4713
Library Protocol Version: 32
Server Protocol Version: 32
Is Local: no
Client Index: 121
Tile Size: 65496
User Name: a1
Host Name: b41
Server Name: pulseaudio
Server Version: 12.2
Default Sample Specification: s16le 2ch 44100Hz
Default Channel Map: front-left,front-right
Default Sink: alsa_output.pci-0000_28_00.3.iec958-stereo
Default Source: alsa_output.pci-0000_28_00.3.iec958-stereo.monitor
Cookie: ee70:fe5e




Quellen

rpf.io   documentation > configuration > config-txt
indibit.de   Multiroom-Audio: WLAN-Lautsprecher selber bauen
indibit.de   Multiroom-Audio: So hab ich es umgesetzt
raspberrypi.org   The best Raspberry Pi media players
forum-raspberrypi.de   [Anleitung] zur Installation und Konfiguration von PulseAudio auf dem Raspberry Pi (in meinem Fall Pi 4)
forum-raspberrypi.de   mpd mit pulseaudio und bluetooth (Raspi OS Lite)
debianforum.de   MPD als Systemdienst mit ALSA und Pulseaudio
qastack.com.de   Verwenden von Pi, um alle Audioausgaben von meinem PC auf meine Stereoanlage zu streamen
https://www.ap-linux.com/articles/

Zum Anfang