Zero 2 W mit HifiBerry für Spotify

  • Hallo zusammen,

    ich bin neu hier im Forum und beschäftige mich erst seit einigen Wochen mit Raspberry Pi für Hifi. Momentan benutze ich einen Zero 2W, um damit Spotify zu hören. Per USB gehe ich in meinen RME ADI 2. Zusammen mit Raspotify und meinem Handy funktioniert das wirklich hervorragend.

    Jetzt wollte ich auch in der Küche dieselbe Musik hören und brauche ein Cinchsignal. Dafür habe ich einen Hifi-Berry DAC für den Zero 2W gekauft. Bisher ist es mir nicht gelungen, einen Sound aus den Cinchbuchsen herauszubekommen. Mit dem Befehl "librespot --device ? " finde ich den ADI2, aber keinen anderen Audio-Ausgang.

    Wie kann ich das Musiksignal zum HifiBerry DAC leiten? Wie kann die Musikausgabe simultan auf zwei Ausgänge, USB und Cinch, realisiert werden?

    Gruß

    Josef

  • Moin Josef87,

    erstmal: Herzlich Willkommen im Forum!

    Du hast den entsprechenden Eintrag in der congig.txt gemacht?
    Wenn nein, dann mal die Datei /boot/firmware/overlays/README lesen. Suchwort ist hifiberry-dac.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Servus Josef87,

    willkommen im Forum!

    Wahrscheinlich hast Du diesen HifiBerry DAC+ Zero. Dann musst Du, wie bereits von Bernd666 geschrieben, in der /boot/firmware/config.txt folgenden Eintrag ergänzen:

    Code
    dtoverlay=hifiberry-dacplus,slave


    Simultane Audioausgabe über USB-Soundkarte und I2S-Soundkarte (HiFiBerry, RPi400extBrd, Raspberry Pi DAC+)

    Hierfür ist wichtig, welches Betriebssystem Du auf Deinem RPi Zero 2W installiert hast, denn RaspiOS lite (nur Textterminal) arbeitet direkt auf ALSA, während RaspiOS with desktop (mit grafischer Oberfläche) die Audioausgabe mit dem über ALSA drübergestülpten Soundserver PipeWire verwaltet, das (vereinfacht gesagt) u.a. eine einfache Steuereung von ALSA bzw. der Audiokomponenten (Soundkarten) in grafischen Oberflächen (z.B. das Lautsprecher-Icon rechts oben im RaspiOS-Desktop) ermöglicht.

    Ich unterstelle jetzt mal RaspiOS lite, denn dafür kann ich Dir eine ALSA-Konfigurationsdatei zur Verfügung stellen:

    Hier passiert folgendes:
    Zuerst werden in Abschnitt 1 die physikalisch vorhandenen Soundkarten deklariert. In diesem Beispiel für meinen RPi4 die beiden HDMI-Anschlüsse (card 0 und card 1), meine LogiTech-USB-Soundkarte als card 2 und die I2S-Soundkarte (hier mein RPi400extBrd, vollständig kompatibel zu HifiBerry DAC+) als card 3.
    Hinweis: I2S und DAC bzw. DAC+ verwende ich im folgenden synonym.

    In Abschnitt 2 erfolgt die Deklaration einer virtuellen Soundkarte, die das Audiosignal simultan auf USB und I2S ausgibt:
    In 2.1. wird die virtuelle Vierkanal-Soundkarte pcm.multi definiert, die aus zwei Slaves besteht: Slave A = hw:2, also USB und Slave B = hw:3, der I2S-Soundkarte, jede mit 2 channels (Stereo). Die insgesamt vier Audiokanäle der virtuellen Karte werden mit bindings an die Kanäle der physikalisch existierenden Slave-Soundkarten gebunden.

    In 2.2. wird dann mit pcm.ttable eine weitere virtuelle Soundkarte (dieses Mal nur Stereo) definiert, die die Vierkanalkarte aus 2.1. als Slave verwendet und pro Kanal jeweils zwei ttable-Einträge enthält: ttable.<d>.<s> <volume> <d> ist dabei der Zielkanal der neuen Soundkarte , nimmt also nur die Werte 0 und 1 an, während <s> der Quellkanal der Slave-Soundkarte ist und somit von 0 bis 3 reicht. Der hintere mit Leerzeichen abgetrennte Parameter gibt den Lautstärkepegel (zwischen 0.00 und 1.00) an, mit dem der Quellkanal <s> in den Zielkanal <d> gemischt wird. Dies wird z.B. beim "Aufblasen" von Stereo in Surround 5.1 benötigt, hier nicht.

    In Abschnitt 3 wird unsere aufgemotzte Stereo-Soundkarte ttable als Default-Soundkarte definiert. Dies ist optional, macht aber das Leben leichter, da viele Audioanwendungen standardmäßig auf die als pcm.default deklarierte ALSA-Soundkarte zugreifen. Das Ausrufezeichen in pcm.!default bewirkt nur, dass eine beim Einlesen unserer ALSA-Konfigrationsdatei eventuell bereits existierende Default-Soundkarte in jedem Falle hart überbügelt wird.

    Achtung:
    Ich habe dies letzte Woche auf meinem RPi400 unter RaspiOS lite bookworm mit zwei HDMI-Anschlüssen getestet. Du hast bei Deinem RPi0 ja nur einen HDMI-Anschluss, von daher fällt dann card 1 weg und die Indices von USB und I2S werden somit 1 und 2. Außerdem habe ich festgestellt, dass nach einem Reboot die Indexreihenfolge von USB und I2S getauscht sein kann. Dies ist ein prinzipielles Problem von USB beim Bootvorgang und kann wahrscheinlich über systemd gefixt werden (aber da kenne ich mich gerade nicht aus). Unsere Slave-Soundkarte ttable funktioniert trotzdem, da es zunächst egal ist, ob Slave A oder B nun USB ist und die jeweils andere I2S. Erst wenn der Lautstärkeparameter von ttable ins Spiel kommt, wird dies relevant.


    Einspielen der ALSA-Konfigurationsdatei ins System:

    Die Konfigurationsdatei .asoundrc_USB+DAC muss im Homeverzeichnis des Linuxbenutzers (z.B. pi) unter /home/pi/.asoundrc abgelegt werden. Oder alternativ, um global für alle User gültig zu sein, unter /etc/asound.conf.
    EDIT: Und wenn PipeWire im Spiel ist (RaspiOS desktop), werden beim Reboot sowohl /etc/asound.conf als auch ~/.asoundrc gelöscht! Wie man sowas unter PipeWire hinterlegt, weiß ich (noch) nicht.

    Viel Glück!

  • Hallo zusammen,

    vielen Dank für die freundliche Begrüßung hier im Forum und für die Tipps. Ich schau mir das gerade an und werde es ausprobieren.

    Als OS habe ich RaspiOS mit grafischer Oberfläche gewählt. Ich habe mir beim Einrichten schon gedacht, dass die Lite-Version besser für den 2W geeignet ist. Das System ist durch die grafische Oberfläche sehr langsam und eigentlich ist diese nicht notwendig. Aber für den Anfang wollte ich das so ausprobieren. Vielleicht setze ich den Raspi nochmal neu auf mit RaspiOS lite.

    Gruß

    Josef

  • Hallo zusammen,

    die Inbetriebnahme des DAC war jetzt erfolgreich und es kommt Musik in der Küche an. In der config habe ich den I2S Bus aktiviert und den HifiBerry DAC+ Zero eingetragen, wobei ich folgende Syntax verwendet habe "dtoverlay=hifiberry-dac,slave". Der HifiBerry DAC+ Zero heißt zwar plus, aber der +Treiber funktioniert nicht, sondern der für den normalen DAC. Die Syntax ist auch auf dem Foto vom HifiBerry DAC+ Zero zu sehen, deshalb habe ich es einfach ausprobiert und es funktioniert. Jetzt kommt je nach Eintrag in der Raspotify-Config entweder in der Küche oder im Wohnzimmer Musik an. Beides simultan funktioniert noch nicht. Ich habe einfach mal beide "Soundkarten" in der Raspotify-Config aktiviert, aber dann kommt nur in der Küche Musik an.

    In den nächsten Tagen werde ich ein Lite-OS aufsetzen und die obige Anleitung ausprobieren.

    Gruß

    Josef

  • Der HifiBerry DAC+ Zero heißt zwar plus, aber der +Treiber funktioniert nicht, sondern der für den normalen DAC. Die Syntax ist auch auf dem Foto vom HifiBerry DAC+ Zero zu sehen, deshalb habe ich es einfach ausprobiert und es funktioniert.

    Ah -- OK! Dann haben sie den "billigen" DAC-Chip von TI, den PCM5101A verbaut... Da gibt's bzgl. Lautstärkeregelung aber auch Tricks. Das werden wir auf jeden Fall lösen...

    Konkret habe ich heute mein obiges Beispiel für simultan USB und I2S auf einem RPi3B getestet. Funzt auch, aber hier beißt die Latstärkeregelung noch nicht direkt an, obwohl gleiches RapiOS lite. Großes :?:

    Ich werde aber morgen nochmal ein paar Versuche starten und meine Ergebnisse dann in Form von Dateien hier bekannt geben...

    (to be continued)

  • Sodala, ich melde mich nochmals zurück mit den Konfigurationsdateien.

    Ich wollte es auf einem RPi3B zum Laufen bringen, mit meiner .asoundrc klappt auch die simultane Wiedergabe über eine USB-Soundkarte (bei mir Logitech Headset A-5572A) und eine I2S-Soundkare (HifiBerry DAC+, RPi400extBrd). Leider funktioniert auf dem RPi3B die Einstellung der Lautstärke für die virtuelle Vielkanal-Soundkarte nicht per Software. Auch eine weitere virtuelle Soundkarte vom Typ softvol wie hier beschreiben hilft nicht weiter!

    Gleiches Verhalten unter RaspiOS lite 64bit bookworm und ... bullseye-legacy! Und es spielt keine Rolle, ob in der config.txt der Audio-/Videotreiber dtoverlay=vc4-kms-v3d oder dtoverlay=vc4-fkms-v3d ("fake kms") verwendet wird. EDIT: Auch die 32bit-Version von RaspiOS brachte keinen Erfolg...
    Komischerweise funzt die Lautstärkeregelung auf meinem RPi400 problemlos...

    Trotzdem möchte ich hier meine Konfigurationsdateien auf dem RPi unter RaspiOS lite 64bit bookworm mit dem dtoverlay=vc4-kms-v3d veröffentlichen:

    cat /proc/asound/cards
    Code
    0 [Headphones     ]: bcm2835_headpho - bcm2835 Headphones
                          bcm2835 Headphones
     1 [vc4hdmi        ]: vc4-hdmi - vc4-hdmi
                          vc4-hdmi
     2 [Headset        ]: USB-Audio - Logitech USB Headset
                          Logitech Logitech USB Headset at usb-3f980000.usb-1.5, full speed
     3 [sndrpihifiberry]: HifiberryDacp - snd_rpi_hifiberry_dacplus
                          snd_rpi_hifiberry_dacplus
    aplay -l # kleines L, keine Eins!

    Anbei meine /boot/firmware/config.txt und .asoundrc dafür.

    Josef87
    Vielleicht geht es mit einem ganz ähnlichen Konstrukt ja auf Deinem RPi Zero 2W?

  • Leider hilft die Umstellung auf /etc/asound.conf auch nichts.

    Die beiden Dateien werden aus der globalen ALSA-Konfigurationsdatei /usr/share/alsa/alsa.conf heraus aufgerufen. Nach einigem Vorgeplänkel anscheinend /etc/asound.conf logisch-oder(?) /usr/etc/asound.conf ausgelesen, danach überschreibend ~/.asoundrc. Ich glaube, die Probleme, die ich vor Jahren mit der ~/.asoundrc hatte, lagen wohl daran, dass PulseAudio die über meine Konfiguration in /etc/asound.conf ungefragt drüberbügelte. Aber gewiss weiß ich es natürlich nicht...
    PipeWire im Desktop-OS löscht übrigens beim Neustart die ~/.asoundrc! Deswegen arbeite ich derzeit nur unter RaspiOS-Lite, wo nur ALSA alleine existiert.

    Quellen:
    Asoundrc - AlsaProject
    Alsa Opensrc Org - Independent ALSA and linux audio support site
    Alsa Opensrc Org - Independent ALSA and linux audio support site

  • PipeWire im Desktop-OS löscht übrigens beim Neustart die ~/.asoundrc!

    Das spricht für PipeWire! :lol:

    BTW: PulseAudio konnte man einfach deinstallieren und dann war alles sofort wieder überschau- und per Alsa regelbar. Ob das mit PipeWire auch so ist, weiß ich allerdings (noch) nicht.

    Ist das wirklich Deine /etc/asound.conf?

  • Nein, das ist die globale /usr/share/alsa/alsa.conf vom System, die die für alle Benutzer gültige /etc/asound.conf und anschließend die benutzerspezifische .asoundrc quasi als Includedateien aufruft. Meine .asoundrc für den RPi3B habe ich in Beitrag #7 zum Download bereitgestellt.

    Da die Sache Simultanwiedergabe inkl. gemeinsame Lautstärkeregelung mit meinem RPi400 funzt (siehe Beitrag #3), werde ich mein Projekt Raspitainment (nur ein Mediacenter) mit einem RPi4 8GB aufziehen. Mit dem RPi5 habe ich es auch nicht hinbekommen, da hier nach jedem Reboot die Zuordnung der Hardware zu den laufenden Kartennummern beinahe zufällig ist!

    EDIT 25.01.2025:
    Die gemeinsame Lautstärkeregelung funzt auf keinem meiner RPis, wie ich jetzt nochmals feststellen musste -- außer bei kodi!
    Ich bin mir zu 99,7% seicher, dass kodi die Lautstärke seiner Audioausgabe intern verwaltet und erst dann an ALSA weiterleitet. Da ist vielleicht pyalsaaudio ein Lösungsansatz, aber da bin ich noch dran, siehe hier.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!