Trasformare un Raspberry Pi in un endpoint audio OAAT
Trasformare un Raspberry Pi in un endpoint audio bit-perfect con OAAT

Questa guida vi accompagna passo dopo passo nella configurazione di un Raspberry Pi 3B+ o 4 come endpoint audio ad alta fedeltà con il protocollo OAAT (Open Advanced Audio Transport).
OAAT è un protocollo open-source concepito come alternativa aperta al RAAT proprietario di Roon:
- Audio bit-perfect — PCM fino a 768 kHz / 32 bit, DSD nativo fino a DSD512
- Sincronizzazione multi-room — meno di 1 ms tra endpoint, tramite clock PTP
- Negoziazione del formato — il controller si adatta automaticamente alle capacità del DAC
- Gapless — transizioni senza interruzioni, anche in caso di cambio di formato
- Zero-config — discovery mDNS/DNS-SD, nessun IP da inserire
- Open source — Apache 2.0, codice Rust su GitHub
OAAT vs. gli altri protocolli
- OAAT: open source, bit-perfect, DSD nativo, sync multi-room inferiore a 1 ms
- RAAT (Roon): bit-perfect, DSD, multi-room — ma proprietario e chiuso
- DLNA/UPnP: open source — ma nessuna sincronizzazione multi-room, gapless aleatorio, DSD solo in DoP
- AirPlay 2: multi-room Apple — ma non bit-perfect, niente DSD, ecosistema chiuso
Il Raspberry Pi è il compagno ideale: 35-75 €, silenzioso (nessuna ventola), con un bus I2S nativo che collega direttamente il DAC al GPIO — il percorso audio più corto e più puro.
Architettura OAAT
graph LR
A["🎵 Tune Server
(contrôleur)"] -->|"TCP :9740
contrôle JSON"| 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["🔈 Ampli + Enceintes"]
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
Materiale necessario
Il Raspberry Pi
- RPi 4B (2 o 4 GB) — PCM max: 384 kHz / 32 bit — ✅ Consigliato
- RPi 3B+ — PCM max: 192 kHz / 32 bit — Budget / usato
- RPi 5 — PCM max: 384 kHz / 32 bit — Funziona anche lui
Il RPi 3B+ è limitato a 192 kHz dal suo bus I2S. Per l'hi-res oltre questa soglia (352.8 / 384 kHz), preferite il RPi 4.
Il DAC I2S (HAT)
OAAT supporta tutti i DAC I2S compatibili con Raspberry Pi. Ecco i più diffusi:
- Audiophonics ESS 9038Q2M (ESS ES9038Q2M) — 384 kHz / 32 bit — ~120 € — overlay:
i-sabre-q2m— driver Linux - 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
⚠️ Importante: l'overlay Linux deve corrispondere esattamente al vostro DAC. Un overlay sbagliato = nessun suono (errore ALSA -121 o -22).
Accessori
- Scheda microSD: 8 GB minimo (16 GB consigliati)
- Alimentazione: ufficiale RPi oppure 5V/3A USB-C (RPi 4) / micro-USB (RPi 3)
- Cavo Ethernet: consigliato per la stabilità audio (il WiFi funziona ma aggiunge ~50 ms di jitter sulla clock sync)
- Case (opzionale): Audiophonics propone case integrati Pi + DAC
Flashare la scheda SD
1. Installare Raspberry Pi Imager
- macOS:
brew install --cask raspberry-pi-imager - Windows: scaricare l'installer
- Linux:
sudo apt install rpi-imager
2. Configurare e flashare
- Aprire Raspberry Pi Imager
- Scegliere il dispositivo: Raspberry Pi 3 o 4
- Scegliere l'OS:
Raspberry Pi OS (other)→ Raspberry Pi OS Lite (64-bit) — il Desktop non serve - Scegliere lo storage: la vostra scheda microSD
- Cliccare sull'ingranaggio (⚙️) per configurare:
- Hostname:
oaat-endpoint - Attivare SSH: sì, con password
- Nome utente / password: a vostra scelta
- WiFi: da configurare se non avete Ethernet
- Fuso orario:
Europe/Paris
- Hostname:
- Flashare — ci vogliono 2-3 minuti
3. Primo avvio
- Inserire la scheda SD nel Pi
- Collegare il DAC HAT al GPIO (se non è già montato)
- Collegare Ethernet + alimentazione
- Attendere 1-2 minuti (il primo boot è un po' più lungo)
- Connettersi via SSH:
ssh pi@oaat-endpoint.local
Suggerimento: per trovare l'IP del Pi, consultate l'interfaccia del vostro router, oppure usate arp -a | grep raspberry.
Installazione
Panoramica del processo
flowchart LR
A["📥 Flash SD
RPi Imager"] --> B["🔌 Boot + SSH"]
B --> C["⚙️ setup.sh
choix du DAC"]
C --> D["🔄 Reboot"]
D --> E["✅ Endpoint actif
visible sur le réseau"]
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
Installazione automatica (consigliata)
Un solo comando installa tutto:
curl -sL https://raw.githubusercontent.com/renesenses/oaat/main/dist/rpi/setup.sh | sudo bash
Lo script vi chiede di scegliere il vostro DAC tra 6 modelli supportati, poi:
- Installa le dipendenze di sistema (ALSA, strumenti di build)
- Configura l'overlay del DAC in
/boot/config.txt - Configura ALSA (
/etc/asound.conf) - Installa Rust e compila OAAT dai sorgenti
- Installa il servizio systemd
Tempo di compilazione:
- RPi 4: ~8 minuti in release
- RPi 3B+: ~20 minuti in release (lo script gestisce automaticamente lo swap)
Dopo l'installazione:
sudo reboot
Il reboot è necessario per attivare l'overlay del DAC. Dopo il riavvio, il servizio OAAT si avvia automaticamente.
Installazione manuale (passo dopo passo)
Se preferite controllare ogni fase:
1. Dipendenze di sistema
sudo apt-get update
sudo apt-get install -y libasound2 libasound2-dev alsa-utils curl git build-essential pkg-config
2. Configurare il DAC
Modificare /boot/firmware/config.txt (o /boot/config.txt a seconda della versione dell'OS):
# Désactiver l'audio embarqué
#dtparam=audio=on
# Votre DAC — décommentez UNE SEULE ligne :
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. Configurare ALSA
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. Installare Rust e compilare
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. Servizio systemd e reboot
sudo cp dist/oaat-endpoint.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable oaat-endpoint
sudo reboot
Configurazione
Il file di configurazione si trova in /opt/oaat/endpoint.toml:
[endpoint]
# Nom affiché dans Tune et lors de la découverte mDNS
name = "Salon DAC"
port = 9740
[capabilities]
# Adapter à votre DAC :
pcm_max_rate = 384000 # Hz (384000, 192000...)
pcm_max_bits = 32 # bits (32, 24)
channels_max = 2
dsd = false
flac = true # Recommandé : réduit la bande passante de ~50%
[logging]
level = "info"
Consigli:
pcm_max_rate: non dichiarate più di quanto il vostro DAC supporti realmente. OAAT negozia automaticamente al ribasso se la sorgente eccede.flac = true: consigliato, soprattutto in WiFi. FLAC è lossless, zero perdita di qualità, e riduce la banda del ~50-60%.name: scegliete un nome parlante, è ciò che compare come zona di riproduzione in Tune.
Esempi per 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 — dettagli tecnici
L'ES9038Q2M supporta i formati S16_LE e S32_LE, frequenze di campionamento fino a 384 kHz (anzi 1.536 MHz in modalità DSD), e dispone di controlli ALSA avanzati:
- Volume digitale: 0-100 (da -100 dB a 0 dB)
- Filtro FIR: 7 tipi (brick wall, minimum phase, linear phase...)
- Selezione ingresso: I2S / SPDIF
Il driver Linux utilizza l'indirizzo I2C 0x48. Su Raspberry Pi OS Bookworm recente, l'overlay i-sabre-q2m è generalmente incluso nel kernel. Con un kernel più datato, compilate il modulo dal repository Audiophonics:
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
Verifica e primo suono
1. Verificare che il DAC sia rilevato:
aplay -l
# Doit afficher votre DAC comme carte 0
2. Testare il suono direttamente (senza OAAT):
speaker-test -D hw:0,0 -c 2 -t sine -f 440
# Vous devez entendre un la 440 Hz — Ctrl+C pour arrêter
3. Verificare il servizio OAAT:
sudo systemctl status oaat-endpoint
# Active: active (running)
4. Verificare la discovery mDNS (da un altro dispositivo):
# macOS
dns-sd -B _oaat._tcp
# Linux
avahi-browse -r _oaat._tcp
5. Primo suono via OAAT!
Dal vostro computer (con il CLI oaat installato):
# Sinusoïde 440 Hz pendant 5 secondes
oaat controller --target IP_DU_PI:9740 --freq 440 --duration 5
Se sentite il la 440 Hz: il vostro endpoint OAAT è funzionante e bit-perfect! 🎉
6. Test di conformità completo:
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
Utilizzo con Tune
Tune è un server musicale self-hosted che integra nativamente OAAT.
Se Tune gira sulla stessa rete locale del vostro RPi, l'endpoint OAAT appare automaticamente come zona di riproduzione nell'interfaccia web. Non è necessaria alcuna configurazione aggiuntiva.
L'endpoint OAAT ha la priorità su DLNA e AirPlay in Tune, perché offre il percorso audio più diretto e più fedele.
La negoziazione del formato è del tutto trasparente:
- Sorgente in 24/96, DAC che supporta 384/32 → riproduzione in 24/96 nativo (nessun upsampling inutile)
- Sorgente in 24/192, DAC che supporta max 96 → Tune fa il downsample a 24/96 (stessa famiglia 48 kHz)
- Sorgente in DSD, DAC che non supporta il DSD → conversione PCM trasparente
Troubleshooting
Nessun suono
aplay -lnon elenca alcuna scheda → Overlay DAC mancante o errato. Verificare/boot/firmware/config.txt, correggere l'overlay, riavviare.speaker-testrestituisce un errore-121→ Overlay sbagliato per questo DAC. Provare un altro overlay (vedi l'elenco qui sopra).speaker-testfunziona ma OAAT no → Servizio non avviato o configurazione errata. Verificare consystemctl status oaat-endpointejournalctl -u oaat-endpoint -f.- Suono che gracchia o salta → WiFi instabile. Passare a Ethernet.
L'endpoint non viene rilevato da Tune
- Verificare che Tune e il RPi siano sulla stessa sottorete
- Se usate una VPN (NordVPN, ecc.): attivare
nordvpn set lan-discovery on - Verificare il firewall: le porte 9740 (TCP), 9741 (UDP), 9742 (UDP) e 5353 (mDNS) devono essere aperte
- Testare manualmente la discovery mDNS (vedi sezione Verifica)
Il servizio non si avvia
# Voir les logs détaillés
journalctl -u oaat-endpoint -f
# Erreurs courantes :
# "No such device" → DAC pas détecté, vérifier overlay + reboot
# "Address already in use" → un autre processus utilise le port 9740
# "Permission denied" → vérifier le User dans le fichier service
RPi 3 vs RPi 4
- PCM max via I2S: RPi 3B+ = 192 kHz / RPi 4 = 384 kHz
- Tempo di compilazione: RPi 3 ~20 min / RPi 4 ~8 min
- RAM: RPi 3 = 1 GB (swap consigliato) / RPi 4 = 2-8 GB
- Ethernet: RPi 3 = 100 Mbps (via USB) / RPi 4 = Gigabit nativo
Il RPi 3B+ funziona perfettamente per il 16/44.1 (CD) fino al 24/192 (hi-res). Se ascoltate principalmente FLAC da CD o Qobuz 24/96, un RPi 3 usato a 25 € va benissimo.
Audiophonics ESS 9038Q2M: overlay non trovato
Su alcune versioni di Raspberry Pi OS, l'overlay i-sabre-q2m non è incluso nel kernel. Sintomo:
dtoverlay: failed to apply overlay 'i-sabre-q2m'
Soluzione: compilare il driver dai sorgenti (vedi la sezione Configurazione qui sopra).
Andare oltre
Aggiornamento dell'endpoint
cd /opt/oaat/src
git pull
cargo build --release --bin oaat
cp target/release/oaat /opt/oaat/oaat
sudo systemctl restart oaat-endpoint
Multi-room sincronizzato
Due (o più) Raspberry Pi sulla stessa rete possono essere sincronizzati entro 1 ms:
graph TD
A["🎵 Tune Server"] -->|"même PTS"| B["🔊 RPi #1 — Salon
ESS 9038Q2M"]
A -->|"même PTS"| C["🔊 RPi #2 — Cuisine
HifiBerry DAC+"]
A -->|"même PTS"| D["🔊 RPi #3 — Chambre
Allo Boss"]
B <-->|"clock sync
PTP"| A
C <-->|"clock sync
PTP"| A
D <-->|"clock sync
PTP"| A
E["⏱️ Sync < 1 ms
entre tous les 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
Ogni endpoint riceve gli stessi pacchetti audio con lo stesso timestamp di presentazione (PTS). La sincronizzazione PTP corregge automaticamente le differenze di clock tra i Pi.
In Tune, basta creare una zona che raggruppa più endpoint per attivare il multi-room.
Prestazioni di rete
- PCM 16/44.1 stereo: 1.41 Mbps
- PCM 24/192 stereo: 9.22 Mbps
- PCM 32/384 stereo: 24.58 Mbps
- FLAC 24/192 stereo: ~4 Mbps (compressione ~50%)
Ethernet consigliato per il multi-room sincronizzato. Per un endpoint singolo il WiFi va benissimo.
Headless completo
Il setup descritto qui è già al 100% headless. Una volta flashato e avviato, il Pi è autonomo:
- Il servizio OAAT parte al boot
- Riavvio automatico in caso di crash (systemd
Restart=always) - Riconnessione automatica se il controller si disconnette
- Aggiornamento possibile via SSH
Link utili:
- Codice sorgente OAAT (Apache 2.0)
- Specifica RFC OAAT
- Driver Audiophonics ESS 9038Q2M
- Audiophonics — DAC I2S e case per RPi
Guida redatta da MozAIk Labs — maggio 2026