Tune by Mozaiklabs

Einen Raspberry Pi in einen OAAT-Audio-Endpoint verwandeln

Einen Raspberry Pi mit OAAT in einen bit-perfekten Audio-Endpoint verwandeln

Raspberry Pi 4 + Audiophonics ESS 9038 DAC — OAAT-Endpoint

Diese Anleitung führt Sie Schritt für Schritt durch die Konfiguration eines Raspberry Pi 3B+ oder 4 als High-Fidelity-Audio-Endpoint mit dem OAAT-Protokoll (Open Advanced Audio Transport).

OAAT ist ein Open-Source-Protokoll, das als offene Alternative zum proprietären RAAT von Roon konzipiert wurde:

  • Bit-perfektes Audio — PCM bis 768 kHz / 32 Bit, natives DSD bis DSD512
  • Multiroom-Synchronisation — unter 1 ms zwischen Endpoints, über PTP-Clock
  • Formataushandlung — der Controller passt sich automatisch an die Fähigkeiten des DAC an
  • Gapless — nahtlose Übergänge, selbst bei einem Formatwechsel
  • Zero-Config — Discovery über mDNS/DNS-SD, keine IP-Eingabe nötig
  • Open Source — Apache 2.0, Rust-Code auf GitHub

OAAT vs. andere Protokolle

  • OAAT: Open Source, bit-perfekt, natives DSD, Multiroom-Sync unter 1 ms
  • RAAT (Roon): bit-perfekt, DSD, Multiroom — aber proprietär und geschlossen
  • DLNA/UPnP: Open Source — aber keine Multiroom-Sync, unzuverlässiges Gapless, DSD nur als DoP
  • AirPlay 2: Apple-Multiroom — aber nicht bit-perfekt, kein DSD, geschlossenes Ökosystem

Der Raspberry Pi ist der ideale Begleiter: 35–75 €, lautlos (kein Lüfter), mit einem nativen I2S-Bus, der den DAC direkt an den GPIO anbindet — der kürzeste und reinste Audioweg.

OAAT-Architektur

graph LR
    A["🎵 Tune Server
(Controller)"] -->|"TCP :9740
JSON-Steuerung"| B["🔊 RPi Endpoint
(DAC I2S)"] A -->|"UDP :9741
Audio PCM/FLAC"| B A <-->|"UDP :9742
Clock-Sync PTP"| B B -->|"I2S GPIO"| C["🎧 DAC
ESS 9038 / HifiBerry / ..."] C --> D["🔈 Verstärker + Lautsprecher"] style A fill:#4a90d9,stroke:#333,color:#fff style B fill:#50c878,stroke:#333,color:#fff style C fill:#f5a623,stroke:#333,color:#fff style D fill:#e8e8e8,stroke:#333,color:#333

Benötigte Hardware

Der Raspberry Pi

  • RPi 4B (2 oder 4 GB) — PCM max.: 384 kHz / 32 Bit — ✅ Empfohlen
  • RPi 3B+ — PCM max.: 192 kHz / 32 Bit — Budget / gebraucht
  • RPi 5 — PCM max.: 384 kHz / 32 Bit — funktioniert ebenfalls

Der RPi 3B+ ist durch seinen I2S-Bus auf 192 kHz begrenzt. Für höhere Hi-Res-Raten (352,8 / 384 kHz) sollten Sie den RPi 4 wählen.

Der I2S-DAC (HAT)

OAAT unterstützt alle Raspberry-Pi-kompatiblen I2S-DACs. Hier die gängigsten:

  • Audiophonics ESS 9038Q2M (ESS ES9038Q2M) — 384 kHz / 32 Bit — ~120 € — Overlay: i-sabre-q2m — Linux-Treiber
  • HifiBerry DAC2 HD (PCM1796) — 192 kHz / 24 Bit — ~65 € — Overlay: hifiberry-dacplushd
  • HifiBerry DAC+ Pro (PCM5122) — 192 kHz / 32 Bit — ~45 € — Overlay: hifiberry-dacplus
  • Allo Boss (PCM5122) — 384 kHz / 32 Bit — ~50 € — Overlay: allo-boss-dac-pcm512x-audio
  • IQaudio DAC+ (PCM5122) — 192 kHz / 24 Bit — ~30 € — Overlay: iqaudio-dacplus
  • JustBoom DAC HAT (PCM5122) — 384 kHz / 32 Bit — ~35 € — Overlay: justboom-dac

⚠️ Wichtig: Das Linux-Overlay muss exakt zu Ihrem DAC passen. Ein falsches Overlay = kein Ton (ALSA-Fehler -121 oder -22).

Zubehör

  • microSD-Karte: mindestens 8 GB (16 GB empfohlen)
  • Netzteil: offizielles RPi-Netzteil oder 5V/3A USB-C (RPi 4) / Micro-USB (RPi 3)
  • Ethernet-Kabel: empfohlen für stabile Audiowiedergabe (WLAN funktioniert, fügt aber ~50 ms Jitter bei der Clock-Sync hinzu)
  • Gehäuse (optional): Audiophonics bietet integrierte Gehäuse für Pi + DAC an

SD-Karte flashen

1. Raspberry Pi Imager installieren

  • macOS: brew install --cask raspberry-pi-imager
  • Windows: Installer herunterladen
  • Linux: sudo apt install rpi-imager

2. Konfigurieren und flashen

  1. Raspberry Pi Imager öffnen
  2. Gerät wählen: Raspberry Pi 3 oder 4
  3. Betriebssystem wählen: Raspberry Pi OS (other) → Raspberry Pi OS Lite (64-bit) — der Desktop wird nicht benötigt
  4. Speicher wählen: Ihre microSD-Karte
  5. Auf das Zahnrad (⚙️) klicken, um zu konfigurieren:
    • Hostname: oaat-endpoint
    • SSH aktivieren: ja, mit Passwort
    • Benutzername / Passwort: nach Wunsch
    • WLAN: konfigurieren, falls kein Ethernet vorhanden
    • Zeitzone: Europe/Paris
  6. Flashen — dauert 2–3 Minuten

3. Erster Start

  1. SD-Karte in den Pi einsetzen
  2. DAC-HAT auf den GPIO stecken (falls noch nicht montiert)
  3. Ethernet + Netzteil anschließen
  4. 1–2 Minuten warten (der erste Boot dauert etwas länger)
  5. Per SSH verbinden:
ssh pi@oaat-endpoint.local

Tipp: Um die IP des Pi zu finden, schauen Sie in die Oberfläche Ihres Routers oder nutzen Sie arp -a | grep raspberry.


Installation

Überblick über den Ablauf

flowchart LR
    A["📥 SD flashen
RPi Imager"] --> B["🔌 Boot + SSH"] B --> C["⚙️ setup.sh
DAC-Auswahl"] C --> D["🔄 Reboot"] D --> E["✅ Endpoint aktiv
im Netzwerk sichtbar"] style A fill:#e8e8e8,stroke:#333 style B fill:#e8e8e8,stroke:#333 style C fill:#f5a623,stroke:#333,color:#fff style D fill:#e8e8e8,stroke:#333 style E fill:#50c878,stroke:#333,color:#fff

Automatische Installation (empfohlen)

Ein einziger Befehl installiert alles:

curl -sL https://raw.githubusercontent.com/renesenses/oaat/main/dist/rpi/setup.sh | sudo bash

Das Skript fragt Sie nach Ihrem DAC aus 6 unterstützten Modellen und führt dann Folgendes aus:

  1. Installiert die Systemabhängigkeiten (ALSA, Build-Tools)
  2. Konfiguriert das DAC-Overlay in /boot/config.txt
  3. Konfiguriert ALSA (/etc/asound.conf)
  4. Installiert Rust und kompiliert OAAT aus den Quellen
  5. Installiert den systemd-Service

Kompilierzeit:

  • RPi 4: ~8 Minuten im Release-Modus
  • RPi 3B+: ~20 Minuten im Release-Modus (das Skript verwaltet den Swap automatisch)

Nach der Installation:

sudo reboot

Der Reboot ist nötig, um das DAC-Overlay zu aktivieren. Nach dem Neustart startet der OAAT-Service automatisch.

Manuelle Installation (Schritt für Schritt)

Falls Sie jeden Schritt selbst kontrollieren möchten:

1. Systemabhängigkeiten

sudo apt-get update
sudo apt-get install -y libasound2 libasound2-dev alsa-utils     curl git build-essential pkg-config

2. DAC konfigurieren

/boot/firmware/config.txt bearbeiten (bzw. /boot/config.txt, je nach OS-Version):

# Onboard-Audio deaktivieren
#dtparam=audio=on

# Ihr DAC — NUR EINE Zeile einkommentieren:
dtoverlay=i-sabre-q2m              # Audiophonics ESS 9038Q2M
#dtoverlay=hifiberry-dacplus        # HifiBerry DAC+ / DAC+ Pro
#dtoverlay=hifiberry-dacplushd      # HifiBerry DAC2 HD
#dtoverlay=allo-boss-dac-pcm512x-audio  # Allo Boss
#dtoverlay=iqaudio-dacplus          # IQaudio DAC+
#dtoverlay=justboom-dac             # JustBoom DAC HAT

3. ALSA konfigurieren

sudo tee /etc/asound.conf << 'EOF'
pcm.!default {
    type hw
    card 0
    device 0
    format S32_LE
}

ctl.!default {
    type hw
    card 0
}
EOF

4. Rust installieren und kompilieren

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source ~/.cargo/env

sudo mkdir -p /opt/oaat
sudo chown $USER:$USER /opt/oaat
git clone https://github.com/renesenses/oaat.git /opt/oaat/src
cd /opt/oaat/src
cargo build --release --bin oaat
cp target/release/oaat /opt/oaat/oaat
cp dist/rpi/endpoint.toml /opt/oaat/endpoint.toml

5. systemd-Service und Reboot

sudo cp dist/oaat-endpoint.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable oaat-endpoint
sudo reboot

Konfiguration

Die Konfigurationsdatei befindet sich unter /opt/oaat/endpoint.toml:

[endpoint]
# In Tune und bei der mDNS-Discovery angezeigter Name
name = "Salon DAC"
port = 9740

[capabilities]
# An Ihren DAC anpassen:
pcm_max_rate = 384000    # Hz (384000, 192000...)
pcm_max_bits = 32        # Bit (32, 24)
channels_max = 2
dsd = false
flac = true              # Empfohlen: reduziert die Bandbreite um ~50 %

[logging]
level = "info"

Tipps:

  • pcm_max_rate: Geben Sie nicht mehr an, als Ihr DAC tatsächlich unterstützt. OAAT handelt automatisch nach unten, wenn die Quelle darüber liegt.
  • flac = true: empfohlen, besonders über WLAN. FLAC ist verlustfrei, also null Qualitätsverlust, und reduziert die Bandbreite um ~50–60 %.
  • name: Wählen Sie einen sprechenden Namen — er erscheint in Tune als Wiedergabezone.

Beispiele je DAC

Audiophonics ESS 9038Q2M:

[endpoint]
name = "Audiophonics ESS 9038"

[capabilities] pcm_max_rate = 384000 pcm_max_bits = 32 channels_max = 2 flac = true

HifiBerry DAC+ Pro / DAC2 HD:

[endpoint]
name = "HifiBerry DAC"

[capabilities] pcm_max_rate = 192000 pcm_max_bits = 24 channels_max = 2 flac = true

Allo Boss / JustBoom:

[endpoint]
name = "Allo Boss DAC"

[capabilities] pcm_max_rate = 384000 pcm_max_bits = 32 channels_max = 2 flac = true

Audiophonics ESS 9038Q2M — technische Details

Der ES9038Q2M unterstützt die Formate S16_LE und S32_LE, Abtastraten bis 384 kHz (im DSD-Modus sogar 1,536 MHz) und bietet erweiterte ALSA-Regler:

  • Digitale Lautstärke: 0–100 (−100 dB bis 0 dB)
  • FIR-Filter: 7 Typen (Brick Wall, Minimum Phase, Linear Phase ...)
  • Eingangswahl: I2S / SPDIF

Der Linux-Treiber nutzt die I2C-Adresse 0x48. Auf aktuellem Raspberry Pi OS Bookworm ist das Overlay i-sabre-q2m in der Regel im Kernel enthalten. Bei einem älteren Kernel kompilieren Sie das Modul aus dem Audiophonics-Repository:

sudo apt-get install -y raspberrypi-kernel-headers
git clone https://github.com/audiophonics/I-Sabre_9038Q2M.git /tmp/i-sabre
cd /tmp/i-sabre
make
sudo make install
sudo reboot

Überprüfung und erster Ton

1. Prüfen, ob der DAC erkannt wird:

aplay -l
# Muss Ihren DAC als Karte 0 anzeigen

2. Ton direkt testen (ohne OAAT):

speaker-test -D hw:0,0 -c 2 -t sine -f 440
# Sie sollten ein A mit 440 Hz hören — Ctrl+C zum Beenden

3. OAAT-Service prüfen:

sudo systemctl status oaat-endpoint
# Active: active (running)

4. mDNS-Discovery prüfen (von einem anderen Gerät aus):

# macOS
dns-sd -B _oaat._tcp

# Linux
avahi-browse -r _oaat._tcp

5. Erster Ton über OAAT!

Von Ihrem Computer aus (mit installiertem oaat-CLI):

# Sinuston 440 Hz für 5 Sekunden
oaat controller --target IP_DU_PI:9740 --freq 440 --duration 5

Wenn Sie das A mit 440 Hz hören: Ihr OAAT-Endpoint funktioniert und ist bit-perfekt! 🎉

6. Vollständiger Konformitätstest:

oaat-test IP_DU_PI:9740

# OAAT Conformance Test
# [Handshake]       4 PASS
# [Capabilities]    4 PASS
# [Format Nego]     3 PASS  (accept, counter, reject)
# [Clock Sync]      1 PASS
# [Audio]           1 PASS
# [Gapless]         2 PASS  (same format, diff format)
# [Volume]          3 PASS
# [Reconnect]       2 PASS
# 20 tests: 20 passed — Endpoint is CONFORMANT

Einsatz mit Tune

Tune ist ein selbstgehosteter Musikserver mit nativer OAAT-Integration.

Läuft Tune im selben lokalen Netzwerk wie Ihr RPi, erscheint der OAAT-Endpoint automatisch als Wiedergabezone in der Weboberfläche. Eine zusätzliche Konfiguration ist nicht nötig.

Der OAAT-Endpoint hat in Tune Vorrang vor DLNA und AirPlay, da er den direktesten und klangtreuesten Audioweg bietet.

Die Formataushandlung ist vollständig transparent:

  • Quelle in 24/96, DAC unterstützt 384/32 → Wiedergabe nativ in 24/96 (kein unnötiges Upsampling)
  • Quelle in 24/192, DAC unterstützt max. 96 → Tune downsampelt auf 24/96 (gleiche 48-kHz-Familie)
  • Quelle in DSD, DAC unterstützt kein DSD → transparente PCM-Konvertierung

Troubleshooting

Kein Ton

  • aplay -l listet keine Karte → DAC-Overlay fehlt oder ist falsch. /boot/firmware/config.txt prüfen, Overlay korrigieren, rebooten.
  • speaker-test liefert Fehler -121 → falsches Overlay für diesen DAC. Ein anderes Overlay ausprobieren (siehe Liste oben).
  • speaker-test funktioniert, OAAT aber nicht → Service nicht gestartet oder falsche Konfiguration. Prüfen mit systemctl status oaat-endpoint und journalctl -u oaat-endpoint -f.
  • Knistern oder Aussetzer → instabiles WLAN. Auf Ethernet wechseln.

Der Endpoint wird von Tune nicht gefunden

  • Prüfen, ob Tune und der RPi im selben Subnetz sind
  • Bei Nutzung eines VPN (NordVPN etc.): nordvpn set lan-discovery on aktivieren
  • Firewall prüfen: die Ports 9740 (TCP), 9741 (UDP), 9742 (UDP) und 5353 (mDNS) müssen offen sein
  • mDNS-Discovery manuell testen (siehe Abschnitt Überprüfung)

Der Service startet nicht

# Detaillierte Logs ansehen
journalctl -u oaat-endpoint -f

# Häufige Fehler:
# "No such device" → DAC nicht erkannt, Overlay prüfen + Reboot
# "Address already in use" → ein anderer Prozess nutzt Port 9740
# "Permission denied" → User in der Service-Datei prüfen

RPi 3 vs. RPi 4

  • PCM max. über I2S: RPi 3B+ = 192 kHz / RPi 4 = 384 kHz
  • Kompilierzeit: RPi 3 ~20 Min. / RPi 4 ~8 Min.
  • RAM: RPi 3 = 1 GB (Swap empfohlen) / RPi 4 = 2–8 GB
  • Ethernet: RPi 3 = 100 Mbit/s (über USB) / RPi 4 = natives Gigabit

Der RPi 3B+ funktioniert einwandfrei für 16/44,1 (CD) bis 24/192 (Hi-Res). Wenn Sie hauptsächlich FLAC in CD-Qualität oder Qobuz 24/96 hören, reicht ein gebrauchter RPi 3 für 25 € völlig aus.

Audiophonics ESS 9038Q2M: Overlay nicht auffindbar

Auf manchen Raspberry-Pi-OS-Versionen ist das Overlay i-sabre-q2m nicht im Kernel enthalten. Symptom:

dtoverlay: failed to apply overlay 'i-sabre-q2m'

Lösung: den Treiber aus den Quellen kompilieren (siehe Abschnitt Konfiguration oben).


Weiterführendes

Endpoint aktualisieren

cd /opt/oaat/src
git pull
cargo build --release --bin oaat
cp target/release/oaat /opt/oaat/oaat
sudo systemctl restart oaat-endpoint

Synchronisiertes Multiroom

Zwei (oder mehr) Raspberry Pi im selben Netzwerk lassen sich auf unter 1 ms genau synchronisieren:

graph TD
    A["🎵 Tune Server"] -->|"gleicher PTS"| B["🔊 RPi #1 — Wohnzimmer
ESS 9038Q2M"] A -->|"gleicher PTS"| C["🔊 RPi #2 — Küche
HifiBerry DAC+"] A -->|"gleicher PTS"| D["🔊 RPi #3 — Schlafzimmer
Allo Boss"] B <-->|"Clock-Sync
PTP"| A C <-->|"Clock-Sync
PTP"| A D <-->|"Clock-Sync
PTP"| A E["⏱️ Sync < 1 ms
zwischen allen Endpoints"] style A fill:#4a90d9,stroke:#333,color:#fff style B fill:#50c878,stroke:#333,color:#fff style C fill:#50c878,stroke:#333,color:#fff style D fill:#50c878,stroke:#333,color:#fff style E fill:#fff3cd,stroke:#f5a623,color:#333

Jeder Endpoint erhält dieselben Audiopakete mit demselben Presentation Timestamp (PTS). Die PTP-Synchronisation korrigiert automatisch die Taktunterschiede zwischen den Pi.

In Tune genügt es, eine Zone anzulegen, die mehrere Endpoints gruppiert, um Multiroom zu aktivieren.

Netzwerkperformance

  • PCM 16/44,1 Stereo: 1,41 Mbit/s
  • PCM 24/192 Stereo: 9,22 Mbit/s
  • PCM 32/384 Stereo: 24,58 Mbit/s
  • FLAC 24/192 Stereo: ~4 Mbit/s (Kompression ~50 %)

Für synchronisiertes Multiroom wird Ethernet empfohlen. Für einen einzelnen Endpoint ist WLAN völlig in Ordnung.

Komplett headless

Das hier beschriebene Setup ist bereits zu 100 % headless. Einmal geflasht und gestartet, arbeitet der Pi autonom:

  • Der OAAT-Service startet beim Boot
  • Automatischer Neustart bei einem Absturz (systemd Restart=always)
  • Automatische Wiederverbindung, wenn der Controller die Verbindung verliert
  • Updates per SSH möglich

Nützliche Links:

Anleitung verfasst von MozAIk Labs — Mai 2026