Raspberry Pi를 OAAT 오디오 엔드포인트로 만들기
OAAT로 Raspberry Pi를 비트퍼펙트 오디오 엔드포인트로 만들기

이 가이드는 Raspberry Pi 3B+ 또는 4를 OAAT(Open Advanced Audio Transport) 프로토콜을 사용하는 하이파이 오디오 엔드포인트로 설정하는 과정을 단계별로 안내합니다.
OAAT는 Roon의 독점 프로토콜인 RAAT에 대한 개방형 대안으로 설계된 오픈소스 프로토콜입니다:
- 비트퍼펙트 오디오 — PCM 최대 768 kHz / 32비트, DSD512까지 네이티브 DSD
- 멀티룸 동기화 — 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 €, 무소음(팬 없음), 그리고 DAC를 GPIO에 직결하는 네이티브 I2S 버스 — 가장 짧고 가장 순수한 오디오 경로입니다.
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 € — 오버레이 :
i-sabre-q2m— Linux 드라이버 - HifiBerry DAC2 HD (PCM1796) — 192 kHz / 24비트 — 약 65 € — 오버레이 :
hifiberry-dacplushd - HifiBerry DAC+ Pro (PCM5122) — 192 kHz / 32비트 — 약 45 € — 오버레이 :
hifiberry-dacplus - Allo Boss (PCM5122) — 384 kHz / 32비트 — 약 50 € — 오버레이 :
allo-boss-dac-pcm512x-audio - IQaudio DAC+ (PCM5122) — 192 kHz / 24비트 — 약 30 € — 오버레이 :
iqaudio-dacplus - JustBoom DAC HAT (PCM5122) — 384 kHz / 32비트 — 약 35 € — 오버레이 :
justboom-dac
⚠️ 중요 : Linux 오버레이는 사용하는 DAC와 정확히 일치해야 합니다. 오버레이가 잘못되면 소리가 나지 않습니다(ALSA 오류 -121 또는 -22).
액세서리
- microSD 카드 : 최소 8 GB (16 GB 권장)
- 전원 : RPi 공식 어댑터 또는 5V/3A USB-C (RPi 4) / micro-USB (RPi 3)
- 이더넷 케이블 : 오디오 안정성을 위해 권장 (WiFi도 동작하지만 클럭 동기화에 약 50 ms의 지터가 추가됨)
- 케이스 (선택) : Audiophonics에서 Pi + DAC 통합 케이스를 판매합니다
SD 카드 플래싱
1. Raspberry Pi Imager 설치
- macOS :
brew install --cask raspberry-pi-imager - Windows : 설치 프로그램 다운로드
- Linux :
sudo apt install rpi-imager
2. 설정 및 플래싱
- Raspberry Pi Imager 실행
- 장치 선택 : Raspberry Pi 3 또는 4
- OS 선택 :
Raspberry Pi OS (other)→ Raspberry Pi OS Lite (64-bit) — 데스크톱 버전은 필요 없음 - 저장소 선택 : 사용할 microSD 카드
- 톱니바퀴(⚙️)를 클릭해 설정 :
- Hostname :
oaat-endpoint - SSH 활성화 : 예, 비밀번호 방식
- 사용자 이름 / 비밀번호 : 원하는 대로
- WiFi : 이더넷이 없다면 설정
- 시간대 :
Europe/Paris
- Hostname :
- 플래싱 — 2~3분 소요
3. 첫 부팅
- SD 카드를 Pi에 삽입
- DAC HAT를 GPIO에 장착 (아직 장착하지 않았다면)
- 이더넷 + 전원 연결
- 1~2분 대기 (첫 부팅은 조금 더 오래 걸림)
- 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
자동 설치 (권장)
명령어 하나로 전부 설치됩니다:
curl -sL https://raw.githubusercontent.com/renesenses/oaat/main/dist/rpi/setup.sh | sudo bash
스크립트는 지원되는 6개 모델 중 사용할 DAC를 고르라고 묻고, 그다음:
- 시스템 의존성 설치 (ALSA, 빌드 도구)
/boot/config.txt에 DAC 오버레이 설정- ALSA 설정 (
/etc/asound.conf) - Rust 설치 및 소스에서 OAAT 컴파일
- systemd 서비스 설치
컴파일 시간 :
- RPi 4 : release 빌드 약 8분
- RPi 3B+ : release 빌드 약 20분 (스크립트가 스왑을 자동으로 처리)
설치 후:
sudo reboot
DAC 오버레이를 활성화하려면 재부팅이 필요합니다. 재부팅 후 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에서는 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로 첫 소리!
컴퓨터에서 (oaat CLI가 설치된 상태로) :
# Sinusoïde 440 Hz pendant 5 secondes
oaat controller --target IP_DU_PI:9740 --freq 440 --duration 5
440 Hz의 라(A) 음이 들린다면, 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 엔드포인트가 웹 인터페이스에 재생 존으로 자동으로 나타납니다. 추가 설정은 전혀 필요 없습니다.
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 오버레이가 없거나 잘못됨./boot/firmware/config.txt를 확인해 오버레이를 수정하고 재부팅하세요.speaker-test가-121오류를 냄 → 해당 DAC에 맞지 않는 오버레이. 다른 오버레이를 시도하세요(위 목록 참조).speaker-test는 되는데 OAAT는 안 됨 → 서비스가 시작되지 않았거나 설정이 잘못됨.systemctl status oaat-endpoint와journalctl -u oaat-endpoint -f로 확인하세요.- 소리가 지직거리거나 끊김 → WiFi 불안정. 이더넷으로 전환하세요.
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 vs RPi 4
- I2S 최대 PCM : RPi 3B+ = 192 kHz / RPi 4 = 384 kHz
- 컴파일 시간 : RPi 3 약 20분 / RPi 4 약 8분
- RAM : RPi 3 = 1 GB (스왑 권장) / RPi 4 = 2-8 GB
- 이더넷 : RPi 3 = 100 Mbps (USB 경유) / RPi 4 = 네이티브 기가비트
RPi 3B+는 16/44.1(CD)부터 24/192(하이레스)까지 완벽하게 동작합니다. 주로 CD급 FLAC이나 Qobuz 24/96을 듣는다면 25 €짜리 중고 RPi 3으로도 충분합니다.
Audiophonics ESS 9038Q2M : 오버레이를 찾을 수 없음
일부 Raspberry Pi OS 버전에서는 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
동기화된 멀티룸
같은 네트워크에 있는 두 대 이상의 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%)
동기화 멀티룸에는 이더넷을 권장합니다. 단일 엔드포인트라면 WiFi로도 충분합니다.
완전한 헤드리스
여기서 설명한 셋업은 이미 100% 헤드리스입니다. 플래싱 후 부팅되고 나면 Pi는 완전히 자율적으로 동작합니다:
- 부팅 시 OAAT 서비스 자동 시작
- 크래시 시 자동 재시작 (systemd
Restart=always) - 컨트롤러 연결이 끊기면 자동 재연결
- SSH로 업데이트 가능
유용한 링크 :
- OAAT 소스 코드 (Apache 2.0)
- OAAT RFC 명세
- Audiophonics ESS 9038Q2M 드라이버
- Audiophonics — I2S DAC 및 RPi 케이스
작성: MozAIk Labs — 2026년 5월