Rockbox-Zig: 伝説的なオーディオエンジンを現代の時代へ

数十年にわたり、オープンソース・ファームウェアの Rockbox は、ポータブル・デジタル・オーディオ・プレーヤーから最大限のパフォーマンスとカスタマイズ性を引き出したい愛好家にとってのゴールドスタンダードでした。しかし、専用ハードウェアからネットワーク・オーディオや多様なオペレーティング・システムの世界への移行により、レガシーなハードウェアの制約なしに Rockbox エンジンのパワーを求める人々にとってのギャップが生じていました。

そこで登場したのが Rockbox-Zig です。これは Rockbox オーディオ・プレーヤーの現代的な再構築です。伝説的な Rockbox C ファームウェアと、Rust の安全性と並行処理、そして Zig のビルド・システムの効率性を組み合わせることで、このプロジェクトはファームウェアベースのプレーヤーを、強力なネットワーク型 Music Player Daemon (MPD) へと変貌させます。単にエンジンを移植するだけでなく、多機能なサーバーへと拡張し、シンプルなデスクトップ・セットアップから複雑なマルチルーム・オーディオ・エコシステムまで、あらゆるものを動かすことが可能になります。

高パフォーマンスのためのハイブリッド・アーキテクチャ

Rockbox-Zig は、レガシーな安定性と現代的な機能を両立させるために、洗練されたマルチ言語アーキテクチャを採用しています。その核となる部分では、プロジェクトはオリジナルの Rockbox C ファームウェア(オーディオ・エンジン、コーデック、および Digital Signal Processing (DSP) を担当)を利用しており、これは静的ライブラリ (libfirmware.a) としてコンパイルされます。

このコアは、その後 2 つの 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 ストリームを介してオーディオをストリーミングし、メタデータやアルバム・アートを Google Cast 互換デバイスへ直接送信します。
  • UPnP/DLNA: 3 つの異なるモードを提供します。Kodi や VLC のようなレンダラーへのストリーミング用の PCM シンク、ライブラリをコントロール・ポイントへ公開するための Media Server、および外部デバイスが Rockbox へメディアをプッシュすることを可能にする MediaRenderer です。
  • Built-in 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 を介したもので、設定ファイルなしですぐに開始できます。

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