Rockbox-Zig:將傳奇音訊引擎帶於現代時代

數十年來,Rockbox 開源韌體一直是那些希望從其可攜式數位音訊播放器中榨取每一分性能與自定義能力的愛好者的金標準。然而,從專用硬體轉向網路音訊與多樣化作業系統的世界,為那些想要 Rockbox 引擎的力量卻不想受限於舊有硬體的人留下了一個缺口。

Rockbox-Zig 正是為此而生,它是對 Rockbox 音訊播放器的現代重新構想。透過將傳奇的 Rockbox C 韌體與 Rust 的安全性與並行性,以及 Zig 的構建系統效率相結合,此專案將一個基於韌體的播放器轉化為一個強大的、網路化的音樂播放器守護程序 (Music Player Daemon, MPD)。它不僅僅是移植了引擎;它還將其擴展為一個多功能的伺服器,能夠驅動從簡單的桌面設置到複雜的多房間音訊生態系統的一切。

一種用於高性能的混合架構

Rockbox-Zig 採用了複雜的多語言架構,以平衡舊有穩定性與現代功能。其核心利用了原始的 Rockbox C 韌體——負責音訊引擎、編解碼器 (codecs) 與數位訊號處理 (DSP)——並將其編譯成靜態函式庫 (libfirmware.a)。

此核心接著與兩個 Rust 靜態函式庫 (librockbox_cli.alibrockbox_server.a) 以及 CPAL (Cross-Platform Audio Library) 進行連結。最終的編排由 Zig 構建腳本處理,生成一個單一且具凝聚力的 rockboxd 二進位檔。這種方法允許開發者在維持 Rockbox 經過實戰檢驗的音訊邏輯的同時,使用 Rust 來實現複雜的網路協定與 API 層。

全面的音訊輸出與多房間支持

Rockbox-Zig 最顯著的升級之一是其將音訊從單一本地輸出擴展到其他地方的能力。該專案實現了一系列多樣化的「接收端」(sinks) 以實現靈活的音訊路由:

同步多房間音訊

  • Snapcast: 支持 TCP (配合 mDNS 自動發現) 與 FIFO/pipe 模式,用於在多個客戶端之間進行同步播放。
  • Squeezelite: 作為一個極簡的 Logitech Media Server,使用 Slim Protocol 來保持多個客戶端與單一播放時鐘同步。
  • AirPlay (RAOP): 支持單房間或多房間分發到 Apple TV、HomePod 與 Airport Express 設備,並在 ~8ms 內實現 RTP 層級的同步。

串流與標準化協定

  • Chromecast: 透過 Cast 協定與專用的 WAV-over-HTTP 串流來傳輸音訊,並將元數據 (metadata) 與專輯封面直接推送到與 Google Cast 相容的設備。
  • UPnP/DLNA: 提供三種不同的模式:用於串流到 Kodi 或 VLC 等渲染器的 PCM sink,用於向控制點展示函式庫的 Media Server,以及允許外部設備將媒體推送到 Rockbox 的 MediaRenderer。
  • Built-in CPAL: 適合那些只想透過其作業系統預設設備播放音樂的人。

現代化的 API 與客戶端生態系統

為了讓音訊引擎能被現代應用程式存取,Rockbox-Zig 透過多樣化的 API 集,確保它能融入任何工作流程:

  • gRPC, GraphQL, 與 REST: 為開發者提供高性能、強型別的介面,以便構建自定義客戶端。
  • MPD Server: 完全相容於 Music Player Daemon 協定,這意味著任何現有的 MPD 客戶端都可以用來控制 Rockbox-Zig。
  • MPRIS Integration: 確保播放器能與 Linux 桌面媒體鍵與工作列控制無縫整合。
  • Search Integration: 快速的函式庫搜尋功能由 Typesense 提供支持,從簡單的線性掃描轉向專業的搜尋體驗。

入門指南

對於想要嘗試的人,該專案提供了幾種進入點。最快的方法是透過 Docker,這不需要任何設定檔即可開始:

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 與 ReplayGain 到特定音訊輸出接收端的一切內容。

Rockbox-Zig 的未來

該專案的目標已經非常宏大,但開發路線圖顯示了進一步的擴張。計劃中的功能包括 YouTube、Spotify 與 Tidal 的串流整合,以及 TuneIn Radio。此外,還在推動擴展性,計劃推出 TypeScript (Deno) 插件 API 與 Wasm 擴展,這將允許社群成員在不需要重新編譯整個 C/Rust/Zig 技術棧的同時,為其增加功能。

Sources