rox

残りの音楽を持ち込む

プラグインは、外部の音楽のソースを 1 つ rox に持ち込みます。rox はそのソースを閲覧し、検索し、ギャップレスで再生し、頼んだものをキープします。ディスク上のファイルと同じパネル、同じキューの中でです。

プラグインとは何か

プラグインは、小さなマニフェストとプログラムを収めたフォルダーです。プログラムは Python のスクリプトでもネイティブのバイナリでもよく、標準入出力を通じて rox と話します。rox は何かが必要とした最初のタイミングでそれを起動し、クラッシュすれば再起動します。10 分間に 5 回クラッシュすると、オフにしてもう一度オンにするまで止まったままになります。

プラグインにできることは短いリストです。カタログの一覧表示と検索、コレクションのライブラリへの同期、音声の配信、ラジオの実行、自分の Web ページへのリンク、自分の名前の下へのプリセットパネルの追加。ボタンを足したり、rox の見た目を変えたり、ほかのパネルに手を伸ばしたりはできません。プラグインが持ち込むのはソースで、それを取り巻くプレイヤーは rox のものであり続けます。

ソースを閲覧する

動いているプラグインにはそれぞれ「パネルを追加 > プラグイン」の下に項目ができ、そのソース向けの外部ソースパネルを開きます。パネルはプラグインのフォルダー、プレイリスト、アルバムを一覧し、検索し、カバーアートを示し、スクロールするごとに読み込みを増やします。サービスのホームページはパネルの最上位に一覧されるので、クリックせずにそこにあります。

パネルがほかに何を見せるかはプラグイン次第です。リストの上のチップは、検索をアルバムに絞るような、プラグインのビューを切り替えます。カバーの棚は横にスクロールし、カバーだけのページはグリッドに折り返します。ダウンロード数のような、サービスは知っていてもあなたのタグは知らない列は、見出しをクリックすると並べ替えられます。プラグインのトラックが再生中は、最上位にそれと次に来るものが表示されます。

外部ソースパネルで動く Internet Archive のサンプルプラグイン。上部の案内、閲覧できる行、リリースカバーの棚、ダウンロード数と年の列。
Internet Archive のサンプル。Archive の netlabels コレクションから Creative Commons のリリースを閲覧しています。rox のリポジトリに入っていて、そのままコピーして使えます。

再生とキープ

プラグインのトラックは、自分のファイルと同じようにキュー、プレイリスト、履歴に入り、途切れず続けてギャップレスに再生されます。途中で切れたトラックは再接続し、同じ場所から続きます。プラグインからのライブストリームには、ラジオのステーションと同じように一時停止と巻き戻しバッファが付きます。

トラックを再生してもライブラリには加わりません。加えるのは「ライブラリに追加」です。コレクションにカーソルを合わせてチェックマークをクリックすると、丸ごとキープできます。それはライブラリに同期され、コレクションが変わればそれに従い、プラグインが止まっていてもネットワークが落ちていても、そこから開けます。

「ブラウザで開く」と「リンクをコピー」は、rox のどこにそのトラックが出ていても、サービス上のトラックやアルバムのページへ行きます。スクロブルは、プラグインが求めない限りオフです。求めれば、プラグインの行にスイッチが現れます。

ラジオ

ラジオを持つプラグインは、トラック、アルバム、プレイリスト、アーティストに「似た曲を再生」を追加します。アルバム、プレイリスト、アーティストでは、まずそれ自身のトラックを再生します。トラックはステーションの起点になるだけで、それ自体は再生されません。その後は、残りが少なくなるとサービスの選ぶ曲でキューを続けます。シャッフルは「似た曲」に切り替わり、プラグインのトラックならライブラリの音響解析がなくても使えます。パネルから再生したアルバムも、終わると自分のローカルライブラリへ続くのではなく、同じように続きます。

ラジオのトラックは、ほかのトラックと同じように rox 自身のエンジンで再生されます。ライブラリには加わらず、ステーションはそのセッションで既に流した曲を飛ばし、再起動後も続きます。「設定 > 再生」で「再生を続ける」をオフにすると、キューはその終わりで止まります。

何を承認しているのか

新しいプラグインはオフの状態で現れます。オンにすることが承認で、確認するカードには、そのプラグインが何であり、何ができ、どのプログラムを必要とし、このコンピューター上で、あなたの権限でプログラムとして動くことが書かれています。

承認はプラグインのフォルダーにあるファイルそのものを対象にします。そのどれかが変わると、プラグインは自分でオフになり、もう一度承認するまで「変更あり」と表示され、カードにはそのマニフェストで何が変わったかが示されます。「プラグイン」ページの「削除」は、プラグインのトラック、同期したコレクション、設定、承認を消しますが、フォルダーには触れません。

自分で書く

プラグインは JSON-RPC を、標準入出力を通じて 1 行に 1 メッセージで話すので、行を読み書きできる言語ならどれでも構いません。プラグインガイド がマニフェスト、すべてのメソッド、タイムアウト、音声がプレイヤーへ届く仕組みをカバーしています。「プラグイン」ページの「プラグインガイド」ボタンは、今動かしているバージョン向けのそれを開きます。

例は リポジトリ に 2 つあります。tones は正弦波の音とコードを生成し、プロトコルを学ぶための 1 つです。Internet Archive はオプションの部分をすべて使い、ホームの棚、ビュー、列、ラジオ、リンクを備えて、実在のカタログに対して動きます。標準ライブラリだけの Python で書かれています。

プラグインの行にある「開発者モード」は、rox を終了するまで自分のフォルダーへの編集を承認し、保存するたびにプラグインを再起動します。プロトコルの新しい部分はそれぞれオプトインです。rox はプラグインの起動時に対応しているものを伝えるので、プラグインが古い rox なら拒むものを送る必要は決してありません。

プラグインが止まるところ

1 つ試す

rox をダウンロードし、「設定 > プラグイン」で「プラグインを有効にする」をオンにして、Internet Archive のサンプル をプラグインフォルダーにコピーしてください。必要なのはネットワークだけで、アカウントは要りません。