Tune by Mozaiklabs

Raspberry PiをOAATオーディオエンドポイントにする

Raspberry PiをOAATでビットパーフェクトなオーディオエンドポイントにする

Raspberry Pi 4 + Audiophonics ESS 9038 DAC — endpoint OAAT

本ガイドでは、Raspberry Pi 3B+ または 4 を OAAT(Open Advanced Audio Transport)プロトコル対応のハイファイ・オーディオエンドポイントとして設定する手順を、順を追って解説します。

OAATは、RoonのプロプライエタリなRAATに対するオープンな代替として設計されたオープンソースのプロトコルです。

  • ビットパーフェクト再生 — PCMは最大768 kHz / 32ビット、DSDはネイティブでDSD512まで
  • マルチルーム同期 — PTPクロックにより、エンドポイント間の誤差1 ms未満
  • フォーマットのネゴシエーション — コントローラーがDACの能力に自動で合わせる
  • ギャップレス — フォーマットが切り替わる場合でも途切れのないトランジション
  • ゼロコンフィグ — mDNS/DNS-SDによる検出、IPの入力は不要
  • オープンソース — Apache 2.0、RustのコードはGitHubに

OAAT と他プロトコルの比較

  • OAAT:オープンソース、ビットパーフェクト、ネイティブDSD、マルチルーム同期1 ms未満
  • RAAT (Roon):ビットパーフェクト、DSD、マルチルーム対応 — ただしプロプライエタリでクローズド
  • DLNA/UPnP:オープンソース — ただしマルチルーム同期なし、ギャップレスは不安定、DSDはDoPのみ
  • AirPlay 2:Appleのマルチルーム — ただしビットパーフェクトではなく、DSD非対応、クローズドなエコシステム

Raspberry Piは理想的な相棒です。35〜75ユーロ、無音(ファンレス)、そしてネイティブのI2Sバスを備え、GPIOからDACへ直結できます — 最短かつ最もピュアなオーディオ経路です。

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

必要な機材

Raspberry Pi 本体

  • RPi 4B(2または4 GB) — PCM最大:384 kHz / 32ビット — ✅ 推奨
  • RPi 3B+ — PCM最大:192 kHz / 32ビット — 低予算・中古向け
  • RPi 5 — PCM最大:384 kHz / 32ビット — こちらも動作します

RPi 3B+ はI2Sバスの制約で192 kHzまでです。それを超えるハイレゾ(352.8 / 384 kHz)にはRPi 4を選んでください。

I2S DAC(HAT)

OAATはRaspberry Pi対応のI2S DACすべてをサポートします。代表的なものは以下の通りです。

  • Audiophonics ESS 9038Q2M(ESS ES9038Q2M)— 384 kHz / 32ビット — 約120ユーロ — overlay:i-sabre-q2m — Linuxドライバ
  • HifiBerry DAC2 HD(PCM1796)— 192 kHz / 24ビット — 約65ユーロ — overlay:hifiberry-dacplushd
  • HifiBerry DAC+ Pro(PCM5122)— 192 kHz / 32ビット — 約45ユーロ — overlay:hifiberry-dacplus
  • Allo Boss(PCM5122)— 384 kHz / 32ビット — 約50ユーロ — overlay:allo-boss-dac-pcm512x-audio
  • IQaudio DAC+(PCM5122)— 192 kHz / 24ビット — 約30ユーロ — overlay:iqaudio-dacplus
  • JustBoom DAC HAT(PCM5122)— 384 kHz / 32ビット — 約35ユーロ — overlay:justboom-dac

⚠️ 重要:Linuxのoverlayは使用するDACに正確に一致していなければなりません。overlayを間違えると音が出ません(ALSAエラー -121 または -22)。

アクセサリー

  • microSDカード:最低8 GB(16 GB推奨)
  • 電源:RPi純正、または5V/3AのUSB-C(RPi 4)/ micro-USB(RPi 3)
  • Ethernetケーブル:音の安定性のために推奨(WiFiでも動作しますが、クロック同期に約50 msのジッターが加わります)
  • ケース(任意):Audiophonics がPi + DAC一体型のケースを販売しています

SDカードへの書き込み

1. Raspberry Pi Imager をインストール

2. 設定して書き込む

  1. Raspberry Pi Imager を起動
  2. デバイスを選択:Raspberry Pi 3 または 4
  3. OSを選択:Raspberry Pi OS (other) → Raspberry Pi OS Lite (64-bit) — Desktopは不要
  4. ストレージを選択:お使いのmicroSDカード
  5. 歯車アイコン(⚙️)をクリックして設定:
    • ホスト名:oaat-endpoint
    • SSHを有効化:はい(パスワード認証)
    • ユーザー名 / パスワード:お好みで
    • WiFi:Ethernetがない場合は設定
    • タイムゾーン:Europe/Paris
  6. 書き込み — 2〜3分程度

3. 初回起動

  1. SDカードをPiに挿入
  2. DAC HATをGPIOに接続(未装着の場合)
  3. Ethernetと電源を接続
  4. 1〜2分待つ(初回ブートは少し長め)
  5. SSHで接続:
ssh pi@oaat-endpoint.local

ヒント:PiのIPを調べるには、ルーターの管理画面を確認するか、arp -a | grep raspberry を使ってください。


インストール

手順の全体像

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

自動インストール(推奨)

1つのコマンドですべてがインストールされます。

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

スクリプトはサポート対象6機種の中からDACを選ぶよう促し、その後、次の処理を行います。

  1. システム依存パッケージのインストール(ALSA、ビルドツール)
  2. /boot/config.txt にDACのoverlayを設定
  3. ALSAの設定(/etc/asound.conf)
  4. Rustのインストールとソースからのビルド
  5. systemdサービスのインストール

コンパイル時間:

  • RPi 4:releaseビルドで約8分
  • RPi 3B+:releaseビルドで約20分(スクリプトがswapを自動で扱います)

インストール後:

sudo reboot

DACのoverlayを有効化するために再起動が必要です。再起動後、OAATサービスは自動的に起動します。

手動インストール(ステップごと)

各ステップを自分で管理したい場合:

1. システム依存パッケージ

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

2. DACの設定

/boot/firmware/config.txt(OSのバージョンによっては /boot/config.txt)を編集します。

# 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. 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. Rustのインストールとビルド

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サービスと再起動

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

設定

設定ファイルは /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"

アドバイス:

  • pcm_max_rate:DACが実際に対応している以上の値を申告しないこと。ソースがそれを超える場合、OAATは自動的に下方へネゴシエートします。
  • flac = true:特にWiFi環境では推奨。FLACはロスレスで音質劣化はゼロ、帯域を約50〜60%削減します。
  • name:分かりやすい名前を付けましょう。これがTune上の再生ゾーン名として表示されます。

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 — 技術的な詳細

ES9038Q2MはS16_LEとS32_LEのフォーマット、最大384 kHz(DSDモードでは1.536 MHzまで)のサンプリングレートに対応し、高度なALSAコントロールを備えています。

  • デジタルボリューム:0〜100(-100 dB〜0 dB)
  • FIRフィルター:7種類(brick wall、minimum phase、linear phase など)
  • 入力選択:I2S / SPDIF

LinuxドライバはI2Cアドレス 0x48 を使用します。最近のRaspberry Pi OS Bookwormでは、overlay i-sabre-q2m は通常カーネルに含まれています。より古いカーネルの場合は、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

動作確認と最初の音出し

1. DACが認識されているか確認:

aplay -l
# Doit afficher votre DAC comme carte 0

2.(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. OAATサービスの確認:

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

4. mDNS検出の確認(別の端末から):

# macOS
dns-sd -B _oaat._tcp

# Linux
avahi-browse -r _oaat._tcp

5. OAAT経由での最初の音出し!

お使いのPCから(oaat CLIをインストール済みの状態で):

# Sinusoïde 440 Hz pendant 5 secondes
oaat controller --target IP_DU_PI:9740 --freq 440 --duration 5

440 Hzのラの音が聞こえれば、OAATエンドポイントは正常に動作しており、ビットパーフェクトです! 🎉

6. 完全な適合性テスト:

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

Tuneでの利用

Tune はOAATをネイティブに統合したセルフホスト型の音楽サーバーです。

TuneがRPiと同じローカルネットワーク上で動作していれば、OAATエンドポイントはWebインターフェース上の再生ゾーンとして自動的に表示されます。追加設定は一切不要です。

Tuneでは、OAATエンドポイントはDLNAやAirPlayより優先されます。最も直接的で忠実なオーディオ経路を提供するからです。

フォーマットのネゴシエーションは完全に透過的です。

  • ソースが24/96、DACが384/32対応 → 24/96のネイティブ再生(無駄なアップサンプリングなし)
  • ソースが24/192、DACは最大96 → Tuneが24/96へダウンサンプル(同じ48 kHz系)
  • ソースがDSD、DACがDSD非対応 → 透過的にPCM変換

トラブルシューティング

音が出ない

  • aplay -l にカードが一つも表示されない → DACのoverlayが未設定または誤り。/boot/firmware/config.txt を確認し、overlayを修正して再起動。
  • speaker-test が -121 エラーを返す → そのDACに対してoverlayが誤っています。別のoverlayを試してください(上記のリスト参照)。
  • speaker-test は動くがOAATでは音が出ない → サービスが未起動、または設定に誤り。systemctl status oaat-endpoint と journalctl -u oaat-endpoint -f で確認。
  • 音がノイズ混じり、または途切れる → WiFiが不安定。Ethernetに切り替えてください。

Tuneがエンドポイントを検出しない

  • TuneとRPiが同じサブネットにあることを確認
  • VPN(NordVPNなど)を使っている場合:nordvpn set lan-discovery on を有効化
  • ファイアウォールを確認:ポート9740(TCP)、9741(UDP)、9742(UDP)、5353(mDNS)が開いている必要があります
  • mDNS検出を手動でテスト(「動作確認」の節を参照)

サービスが起動しない

# 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 と RPi 4 の比較

  • I2S経由のPCM最大:RPi 3B+ = 192 kHz / RPi 4 = 384 kHz
  • コンパイル時間:RPi 3 約20分 / RPi 4 約8分
  • RAM:RPi 3 = 1 GB(swap推奨)/ RPi 4 = 2〜8 GB
  • Ethernet:RPi 3 = 100 Mbps(USB経由)/ RPi 4 = ネイティブGigabit

RPi 3B+ は16/44.1(CD)から24/192(ハイレゾ)まで問題なく動作します。主にCDリップのFLACやQobuzの24/96を聴くなら、25ユーロの中古RPi 3で十分こなせます。

Audiophonics ESS 9038Q2M:overlayが見つからない

Raspberry Pi OSの一部のバージョンでは、overlay i-sabre-q2m がカーネルに含まれていません。症状:

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

解決策:ソースからドライバをビルドする(上記「設定」の節を参照)。


さらに先へ

エンドポイントの更新

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

同期マルチルーム

同一ネットワーク上の2台(以上)のRaspberry Piを、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

各エンドポイントは、同じプレゼンテーションタイムスタンプ(PTS)を持つ同一のオーディオパケットを受け取ります。PTP同期がPi間のクロック差を自動的に補正します。

Tuneでは、複数のエンドポイントをまとめたゾーンを作成するだけでマルチルームが有効になります。

ネットワーク帯域

  • PCM 16/44.1 ステレオ:1.41 Mbps
  • PCM 24/192 ステレオ:9.22 Mbps
  • PCM 32/384 ステレオ:24.58 Mbps
  • FLAC 24/192 ステレオ:約4 Mbps(圧縮率約50%)

同期マルチルームにはEthernetを推奨します。単独のエンドポイントならWiFiでも十分です。

完全ヘッドレス

ここで説明したセットアップはすでに100%ヘッドレスです。書き込んで起動させれば、Piは自律的に動作します。

  • OAATサービスはブート時に起動
  • クラッシュ時は自動再起動(systemdの Restart=always)
  • コントローラーが切断された場合も自動再接続
  • 更新はSSHから可能

関連リンク:

本ガイドの執筆:MozAIk Labs — 2026年5月