■alsaplaeyr と Music Player Daemon alsaplayer と Music Player Daemon (mpd) を比較してみると、alsaplayer はインターネット・ラジオが再生できるのに対して、 mpd はライブラリの操作が充実しています。そこで alsaplayer でインターネット・ラジオを、mpd で音楽ライブラリを操作する lcdproc クライアントを作ってみることにします。
ほかの lcdproc クライアントも合わせて全体としては、図のようなシステムになります。

玄箱PROを中心としてリモコンと液晶で音楽を楽しむシステム
■リモコン操作を設計する リモコン操作は次のようにしました。以前と同じように、サーバの画面切り替えには、画面表示ボタン(Enter)、チャネル+(Right)、チャネル-(Left) を占有で割り当てることにしました。サーバのメニュー用には、メニュー・ボタン(Escape)を占有で割り当て、中央の上(Up)、下(Down)、左(Left2)、右(Right2)、決定(Center)を共有で割り当てました。

リモコンのキー操作の割り当て
mpd の制御用に、再生(Play)、巻戻し(Prev), 早送り(Next), 停止(Stop), 一時停止(Pause), ランダム(Random), リピート(Repeat) を排他的に割り当てました。それぞれ、mpd の相当するコントロールを、画面表示に関わらず行えます。 alsaplayer の制御用には、数字ボタン 1 から 12 を排他的に割り当てました。数字を押すと、割り当てたインターネット・ラジオを再生します。
また、音量、消音、電源ボタン(排他的割り当て)が押されたときには、USB オーディオを接続しているコンポのリモコン信号を送信することにします。音楽ライブラリの操作には、共有で割り当てた中央の上(Up)、下(Down)、左(Left2)、右(Right2)、決定(Center)を主に使うことにします。
■画面と操作を設計する 画面は20文字×4行を前提にしました。インターネット・ラジオ再生中は、1行目に放送局名を表示し、2行目に曲名、3行目にアーティスト名、4行目に再生時間を表示します。曲名、アーティスト名は、表示されない場合もあります。

インターネット・ラジオ再生中 (alsaplayer) の画面。曲名とアーティスト名は表示されていない。
mpd での音楽ライブラリ再生中は、1行目に曲名、2行目にアルバム・タイトル、3行目にアーティスト名を表示します。4行目は、再生中の曲のトラック、経過時間や、リピート、ランダム再生かなどを表示します。wav ファイルなどで曲名などが不明なときは、1行目と2行目にディレクトリ名を、3行目にファイル名を表示します。Left2, Right2, Center, Up, Down のいずれかのキーが押されたら、音楽ライブラリ選択画面にします。

音楽ライブラリ再生中 (mpd) の画面
音楽ライブラリ選択画面では mpd のライブラリをディレクトリ単位で表示します。ディレクトリ名の左の「>」が選択しているディレクトリを表します。Left2, Right2 でディレクトリの階層を上と、下に移動します。Up, Down で一つ上または下のディレクトリに移動し、Next, Prev で次のページまたは前のページに移動します。Center または Play ボタンで、選択しているディレクトリの再生を開始します。Stop キーで、再生画面に戻ります。ライブラリ選択中は、優先度を上げることで別のクライアントの画面に切り替わることを防ぎます。

音楽ライブラリ選択の画面
また、このクライアントの占有するキーが押されたときは一時的に再生画面を表示することにします。いずれの画面のときも押されたキーの名前を右下に一時的に表示します。
■プログラムの構成 alsaplayer はインターネット・ラジオについてテストしたところ、放送局を切り替えるときにうまくいかないことがあったので、乱暴ですが system() 関数から、
killall alsaplayer
を呼び出して停止し、
alsaplayer <.pls ファイルのファイル名>
を呼び出して再生を開始することにしました。再生中の情報は、alsaplayer のライブラリ関数を使うことにします。
mpd については、基本的には socket 通信で、再生・停止などのコントロールと楽曲情報の取得を行うことにしました。libmpd ライブラリをテストしたところ理由は不明ですが、CPU使用率が高かったためです。lcdproc とのやりとりも、socket 通信で行います。
■コンパイルとインストール コンパイルには libalsaplayer-dev が必要です。apt-get でインストールします。
apt-get install libalsaplayer-dev
lcdcompo.tar.gzをダウンロードし、展開、コンパイルします。
tar xzf lcdcompo.tar.gz
cd lcdcompo
make
root で /usr/local/bin などにコピーします。
cp lcdcompo /usr/local/bin
killall コマンドが必要ですので、インストールされていなければ、
apt-get install psmisc
として、インストール (killall は psmisc パッケージに含まれている)します。実行は、LCDd と mpd が動作している状態で、
lcdcompo &
とするだけです。
■改造のヒント ほかのリモコンを利用する場合や、ボタンの割り当てを変える場合には、lcdproc の KURO-RS ドライバ (server/drivers/kurors.c) を編集し、リモコン・コードとキー名の対応を書き換えます。送信するリモコン・コードは、rsa[] 変数の順に 1 から割り当てているので、注意してください。
struct rsaction_ rsa[] = {
/* SANSUI RS-F2 */
/* number buttons */
{"01011101101000101000001001111101", "1"}, /* 1 */ ← output 1 で送信
{"01011101101000100100001010111101", "2"}, /* 2 */ ← output 2 で送信
<略>
{"010000000000010000001101000000000010110000100001", "Right"}, /* Channel Down */
{"010000000000010000001101000000001010110010100001", "Left"}, /* Channel Up */
<略>
};
インターネット・ラジオのボタンと放送局名の割り当ては、ソース・ファイル lcdcompo.c に直接書いています。好みに合わせて変更します。画面表示やキー操作の流れは lcdcompo.c を書き換えてください。
struct i_radio_station i_stations[] = {
{"/etc/lcdproc/1.pls", "Classic FM"},
{"/etc/lcdproc/2.pls", "Pat Methenny Radio"},
{"/etc/lcdproc/3.pls", "SKY FM -Best of the 80s"},
};
<光永 法明>
コメントする