January 11, 2005
玄箱/HG用サウンドWebインタフェース
先にアップしたサウンドセットを使い、Webブラウザでプレイができるキットを作成してみました。利用するには1個前のサウンドキットを先にインストールしておく必要があります。kurohg_sndinterface_1.0.tar.gz
●使い方
1.まず先に、perl5.6.1をインストールする必要があります。玄箱/HGの付属ディスクのbinaryの下に入っているperl-5.6.1.tar.gzを玄箱に転送して次のようにしてインストールします。
tar xvzpf perl-5.6.1.tar.gz -C / [Enter]
2.玄箱/HG付属CDのbinary/の下に入っているglibc-2.2.3.tar.gzを玄箱のshareにコピーして次のようにインストールします。
tar xvzf /mnt/share/glibc-2.2.3.tar.gz [Enter]
3.ダウンロードしたkurohg_sndinterface_1.0.tar.gzを玄箱/HGに転送して次のようにしてインストールします。
tar xvzpf kurohg_sndinterface_1.0.tar.gz -C / [Enter]
4.インストールが終わったらldconfig を実行します。
念のため
/sbin/ldconfig -v [Enter]
とやっておいてください。
5.玄箱の電源をいったん落とし、再起動させます。
6.デフォルトの共有フォルダshareにMP3という名前のディレクトリ(必ず大文字)を作成し、そのディレクトリの中にアルバム単位でサブディレクトリを作りMP3ファイルなどを転送します。必ずディレクトリに分けて入れてください(MP3/アルバム名/の下にサウンドファイル類が入るように)。
7.ブラウザで玄箱にアクセス
http://玄箱のIP:10080/cgi-bin/player.cgi
にアクセスしてください。

こんな画面が出ます。線下の左がMP3フォルダ下のサブディレクトリ一覧で、選択して追加ボタンを押すと、その下のファイルがプレイリストに入ります。左のプレイリストから要らない曲を選択して削除を押せば削除できます。
線の上がコントローラで、再生、停止、曲送り、戻し、ボリュームのアップダウン、曲へのジャンプができます。
動かないなど何かあったら、コメント欄にどうぞ
(追記)
音楽の再生ということで、LAN内での利用を前提にセキュリティを一切、考慮せずに作ってます(外からプレイリストを操作しても意味ないですよね)。まかりまちがっても、インターネットに玄箱のポート10080(デフォ)を公開しないようにしてください。任意のコードが実行できますから非常に危険です。何が起きても責任は取れません。
(追記)
リンクがおかしかったためダウンロードできない場合があったのを修正しました
Comments
土居博史:
kuro-box を Jukebox 化は非常に良いアイディアで DOS/V Magazine で、あなたのページを見て早速 kuro-box を購入しました。私はどうしても CUI から離れられなくてコマンドラインからも制御したいと考えていました。alsaplayer は daemon としても起動可能で自分で制御するための API まで用意されているので私の希望にはうってつけのアプリです。音が鳴ることが確認できて、あとちょっとというところなのですが ap_add_path() を呼び出すと必ず Segmentation Fault になってしまいます。player.cgi ではどの API 呼び出しを行っているのでしょうか?
(from tsurugi.asta-inc.co.jp on April 26, 2005 at 10:39 am)
sushik:
こんにちは
ソースを見て頂くと分かりますが、実はPerlはほとんどいじったことがないので、player.cgiでは/usr/local/binの下にalp_で始まるコマンドをexecで呼び出しています(おそらくPerlから直にAPIが呼び出せるんじゃないかと思います)。
alp_getplaylistでは ap_get_file_path_for_track
alp_removeではap_remove
alp_volではap_get_vlume/ap_set_volume
で、プレイリストの追加はご指摘のようにうまくいかなかったのでalsaplayer自体をexecで呼んでいます。
ソースを見て頂くと分かりますが、実はPerlはほとんどいじったことがないので、player.cgiでは/usr/local/binの下にalp_で始まるコマンドをexecで呼び出しています(おそらくPerlから直にAPIが呼び出せるんじゃないかと思います)。
alp_getplaylistでは ap_get_file_path_for_track
alp_removeではap_remove
alp_volではap_get_vlume/ap_set_volume
で、プレイリストの追加はご指摘のようにうまくいかなかったのでalsaplayer自体をexecで呼んでいます。
(from inetgw.mda.or.jp on April 27, 2005 at 11:44 am)
土居博史:
ap_add_path() に *argv を直接渡していた(alsaplayer のサンプルがそうなっていたので)のですが、これを一旦別のバッファにコピーして呼び出すと Segmentation Fault が発生しなくなりました。詳しくソースを解析したわけではないのですが alsaplayer 側で ap_add_path() に渡された文字列に書き込みを行っているのかもしれませんね。
ちなみに一定時間 daemon で起動させておくと落ちる件ですが、daemon として起動させるために signal の設定をする必要があって alsaplayer でも、そのような処理を行っているのですが、無視しなければいけないシグナルとハンドリング可能なシグナルがあってちゃんとそれらを認識して signal() 関数の呼び出しをしてやる必要があります。現行の alsaplayer では定義しているシグナルすべてをハンドラが呼び出されるようなコードになっていますが、経験上それでは駄目です。POSIX で定義されているシグナルはすべて signal() で定義し、また、一旦 fork() して親は即座に死んでしまう(端末から切り離す)のが望ましいです。
ちなみに一定時間 daemon で起動させておくと落ちる件ですが、daemon として起動させるために signal の設定をする必要があって alsaplayer でも、そのような処理を行っているのですが、無視しなければいけないシグナルとハンドリング可能なシグナルがあってちゃんとそれらを認識して signal() 関数の呼び出しをしてやる必要があります。現行の alsaplayer では定義しているシグナルすべてをハンドラが呼び出されるようなコードになっていますが、経験上それでは駄目です。POSIX で定義されているシグナルはすべて signal() で定義し、また、一旦 fork() して親は即座に死んでしまう(端末から切り離す)のが望ましいです。
(from stephanie.jebba.jp on May 01, 2005 at 09:39 am)
このアイテムは閉鎖されました。このアイテムへのコメントの追加、投票はできません。
DISALLOWED (TrackBack)






