Rockbox-Zig: 전설적인 오디오 엔진을 현대적 시대로 가져오다
수십 년 동안, Rockbox 오픈 소스 펌웨어는 휴대용 디지털 오디오 플레이어의 성능과 커스터마이징을 극한까지 끌어올리고자 하는 애호가들에게 표준과도 같았습니다. 하지만 전용 하드웨어에서 네트워크 오디오와 다양한 운영 체제의 세계로 전환되면서, 기존 하드웨어의 제약 없이 Rockbox 엔진의 강력한 성능을 원하는 이들을 위한 공백이 생겼습니다.
Rockbox-Zig가 등장했습니다. 이는 Rockbox 오디오 플레이어를 현대적으로 재해석한 프로젝트입니다. 전설적인 Rockbox C 펌웨어와 Rust의 안전성 및 동시성, 그리고 Zig의 빌드 시스템 효율성을 결합함으로써, 이 프로젝트는 펌웨어 기반 플레이어를 강력한 네트워크형 Music Player Daemon (MPD)로 변환합니다. 단순히 엔진을 포팅하는 것에 그치지 않고, 단순한 데스크톱 설정부터 복잡한 다중 실(multi-room) 오디오 생태계에 이르기까지 모든 것을 구동할 수 있는 다재다능한 서버로 확장합니다.
고성능을 위한 하이브리드 아키텍처
Rockbox-Zig는 기존의 안정성과 현대적인 기능을 균형 있게 맞추기 위해 정교한 다중 언어 아키텍처를 채택합니다. 핵심부에는 오디오 엔진, 코덱, 그리고 디지털 신호 처리(DSP)를 담당하는 기존 Rockbox C 펌웨어를 사용하며, 이는 정적 라이브러리(libfirmware.a)로 컴파일됩니다.
이 핵심부는 두 개의 Rust 정적 라이브러리(librockbox_cli.a와 librockbox_server.a) 및 CPAL (Cross-Platform Audio Library)과 연결됩니다. 최종적인 오케스트레이션은 Zig 빌드 스크립트에 의해 처리되어, 단일하고 응집력 있는 rockboxd 바이너리를 생성합니다. 이러한 접근 방식은 개발자가 Rockbox의 검증된 오디오 로직을 유지하면서 Rust를 사용하여 복잡한 네트워킹 프로토콜과 API 레이어를 구현할 수 있게 해줍니다.
포괄적인 오디오 출력 및 멀티룸 지원
Rockbox-Zig의 가장 중요한 업그레이드 중 하나는 오디오를 단일 로컬 출력 이상으로 확장할 수 있는 능력입니다. 이 프로젝트는 유연한 오디오 라우팅을 가능하게 하는 다양한 "sinks"를 구현합니다.
동기화된 멀티룸 오디오
- Snapcast: 여러 클라이언트 간의 동기화된 재생을 위해 TCP (mDNS 자동 검색 포함)와 FIFO/pipe 모드를 모두 지원합니다.
- Squeezelite: Slim Protocol을 사용하여 여러 클라이언트를 단일 재생 클록에 정렬시키는 최소한의 Logitech Media Server 역할을 수행합니다.
- AirPlay (RAOP): Apple TV, HomePod, Airport Express 기기들로 단일 또는 멀티룸 팬아웃(fan-out)을 지원하며, 약 ~8ms 이내의 RTP 수준의 동기화를 제공합니다.
캐스팅 및 표준화된 프로토콜
- Chromecast: Cast 프로토콜과 전용 WAV-over-HTTP 스트림을 통해 오디오를 스트리밍하며, 메타데이터와 앨범 아트를 Google Cast 호환 기기로 직접 전송합니다.
- UPnP/DLNA: 세 가지 별도의 모드를 제공합니다: Kodi 또는 VLC와 같은 렌더러로 스트리밍하기 위한 PCM sink, 라이브러리를 제어 포인트에 노출하기 위한 Media Server, 그리고 외부 기기가 Rockbox로 미디어를 전송할 수 있도록 하는 MediaRenderer 모드입니다.
- 내장 CPAL: 단순히 OS의 기본 장치를 통해 음악을 재생하고자 하는 사용자를 위한 기능입니다.
현대적인 API 및 클라이언트 생태계
오디오 엔진을 현대적인 애플리케이션에서 사용할 수 있도록, Rockbox-Zig는 다양한 API 세트를 통해 기능을 노출하여 어떤 워크플로우에도 적합하도록 보장합니다.
- gRPC, GraphQL, and REST: 개발자가 커스텀 클라이언트를 구축할 수 있도록 고성능의 타입 지정 인터페이스를 제공합니다.
- MPD Server: Music Player Daemon 프로토콜과 완벽하게 호환되어, 기존의 모든 MPD 클라이언트를 사용하여 Rockbox-Zig를 제어할 수 있습니다.
- MPRIS Integration: Linux 데스크톱의 미디어 키와 작업 표시줄 컨트롤을 통해 플레이어가 원활하게 통합되도록 보장합니다.
- Search Integration: 빠른 라이브러리 검색은 Typesense를 통해 구동되며, 단순한 선형 스캔 방식에서 벗어나 전문적인 검색 경험을 제공합니다.
시작하기
실험해보고 싶은 분들을 위해, 프로젝트는 여러 가지 진입점을 제공합니다. 가장 빠른 방법은 Docker를 사용하는 것이며, 설정 파일 없이 바로 시작할 수 있습니다:
```bash
docker run -v $HOME/Music:/root/Music \
-p 6062:6062 \
-p 1704:1704 \
-p 1705:1705 \
-p 1780:1780 \
tsiry/rockbox
더욱 영구적인 설치를 위해, 프로젝트는 `apt` (Ubuntu/Debian), `dnf` (Fedora), `paru` (Arch), 그리고 Homebrew (macOS/Linux)를 포함한 광범위한 패키지 매니저를 지원합니다. 설치가 완료되면, 서버는 `settings.toml` 파일을 통해 구성되며, 사용자는 파기적 EQ(parametric EQ)와 ReplayGain부터 특정 오디오 출력 sink를 포함한 모든 것을 미세 조정할 수 있습니다.
## Rockbox-Zig의 미래
이 프로젝트는 이미 야심 차지만, 로드맵에는 더 큰 확장이 예립되어 있습니다. 계획된 기능으로는 YouTube, Spotify, Tidal, 그리고 TuneIn Radio를 위한 스트리밍 통합이 포함됩니다. 또한 TypeScript (Deno) 플러그인 API와 Wasm 확장을 계획하여 확장성을 강화하려는 움직임도 있습니다. 이를 통해 커뮤니티가 전체 C/Rust/Zig 스택을 다시 컴파일할 필요 없이 기능을 추가할 수 있게 될 것입니다.