**小ネタ ... ネットワークから(しか)使用できないMP3プレーヤ [#yfff556d]
**小ネタ ... ネットワーク(からしか使用できない)MP3プレーヤ 
~
|&ref(jukebox.png);|
|CENTER:曲を登録中&br;SIZE(9){(ってKonquerorでファイルをコピーしてるだけだけど…)}|
これは、
-DEC Digital HiNote Ultra II
--CPU: Pentium 100MHz
--Mem: 40MB
--HDD: 1GB

での実行例です。こんなスペックでも十分実用になっています。~
インストール後のシステムサイズは40MBをちょっと切るくらいで、
それを差し引いたHDDの空き容量にMP3ファイルを格納できます。~
それを差し引いたHDDの空き容量にMP3ファイルを格納できます。
1GBのHDDだと大体300曲くらいるようです。~
現役引退マシンの活用方法としていかがですか?
**インストール [#ke82c8ed]
ネットワークインストールができるようになりました。
インストールの手順は、通常のOpenBSDのインストール手順とほとんど一緒です。
**概要 
-OpenBSD 3.7をベースに作成しました。
-運用に無関係な部分を削除、ベースシステムをスリム化しました。
-MP3の再生には、portsのmpg123を使用しています。
-OS起動時に再生スクリプトが自動起動。所定のディレクトリをスキャンし、エンドレスでMP3ファイルを再生します。
-MP3ファイルはローカルに格納したものの他、ネットワーク経由で取得しながら再生を行うこともできます。
-再生プロセスは、rootでない専用のユーザアカウントから一般ユーザとして実行されますので、安です。
-再生プロセスは、高いプロセス優度で実行されますので、他のタスクによって中断されにくくなっています。
**インストール 
インストールの手順は、通常のOpenBSDのインストール手順とほぼ同じで、
現在、kaw.ath.cxからHTTPによるネットワークインストールが可能です。
+インストール用のブートメディアを作成し、そのメディアで起動。
--''通常のOpenBSD 3.7の配布物に含まれているもの''からFDやCD-ROMなどを作成。
+通常の手順に従ってインストール。
+手順の一部のみを以下のようにする;
+通常の手順に従ってインストール。ただし、手順の一部は以下の容を指定して下さい;
--パッケージの取得方法 ... ''http''
--サーバ名 ... ''kaw.ath.cx''
--サーバ上のパス ... [[''dl/pub/OpenBSD/jukebox''>http://kaw.ath.cx/dl/pub/OpenBSD/jukebox/]]
--インストールするパッケージ ... メニューに表れたbsd, base37.tgz, site37.tgz を''全て指定''(''all''と入力)する。
--タイムゾーン ... 必ず ''Japan'' を指定(それ以外は削除されているため)。
--インストールの最後で''MP3 Playerのパスワード''の設定を要求されるので、入力する。
+インストール後、リブートして再立ち上げする。[[Wizard of OS>http://www.openbsd.org/lyrics.html#37]] が聞こえてくればOK。
**使用方法 [#v86766c0]
演奏コンテンツをいじるには、以下のアカウントを使用する。
-ユーザ名 ... ''mp3play''
-パスワード ... インストール時に''MP3 Playerのパスワード''で力したもの。
+インストール後、リブートして再立ち上げする。[[OpenBSDのリリースソング>http://www.openbsd.org/lyrics.html]] が聞こえてくればOK。
--song30.mp3 ローカルに格納されたファイルを再生
--song31.mp3 ~ song34.mp3 ... HTTP経由でファイルを再生
--song35.mp3 ~ song37.mp3 ... FTP経由でファイルを再生

このアカウントを用いて、ftp, sftp, scpなどでアクセスする。
***曲の登録 [#s0a63dd6]
ユーザmp3playのホームディレクトリは以下のようになっている。
>HTTPやFTP経由での再生が行われない場合は、ネットワークの設定などを
チェックしてください。
**使用方法 
システムを起動すると、ジュークボックスは自動的に再生状になります。

再生したい曲を登録するには、インストール時にパスワードを登録した
''mp3play''ユーザで行います。

FTPやscpなどを用いて以下に説明するディレクトリ下にMP3ファイルや
URLリストを転送します。
また、sshでログインし、シェルによる操作で曲の登録や再生の制御を
行うこともできます。
***曲の登録 
ユーザmp3playのホームディレクトリの下は次の図のようになっています。
 
 /home/
   |--mp3play/
       |--jukebox/
           |--attic/     コンテンツの一時退避
           |--ctrl/      演奏の制御のためのファイルを格納
           |--playlist/  演奏するコンテンツを格納
           |--play.sh    演奏の制御スクリプト
演奏するファイルは、MP3形式で、ファイル名が ''.mp3''で終わるもの。
これを /home/mp3play/jukebox/playlist 以下にコピーすると自動的に
演奏される。
playlist以下にサブディレクトリがあった場合、その下も再帰的に
辿って演奏される。
           |--attic/     データの一時退避や作業用
           |--cache/     ネットワーク経由で取得したMP3ファイルのキャッシュ
           |--ctrl/      再生の制御のためのファイルを格納
           |--oneshot/   一回だけ再生する曲を格納
           |--oneshot_finished/
           |             oneshotで再生済みの曲はここに移動される
           |--spool0     繰り返し再生する曲格納用
           |--spool1     spool0で再生済の曲はここに移動される
           |            (あるいは、逆にspool1→spool0へ移動)
           |--playlist-> spool0あるいはspoo1へのシンボリックリンク
           |            (現在再生している方 ... 移動)
           |--play.sh    再生の制御スクリプト
           |--asyncevent.sh
                         非同期イベント処理スクリプト
 
再生する曲には以下の2種類があります;
:MP3ファイル|MP3形式の音声ファイルそのもの。ファイル名が ''.mp3''で終わる。
:URLファイル|MP3ファイルのURLが列挙されたファイル。ファイル名は ''.url''で終わる。

聞きたくなくなった曲は、単純に削除すればよい。
ディレクトリatticに一時的に退避しておくこともできる。
**Tips [#f6fe01d7]
:再生を停止したい場合|MP3ファイルを削除するかあるいは別のディレクトリに退避する。~
''/home/mp3play/jukebox/ctrl/pause''というファイル(空ファイルでよい)を作ると、そのファイルが存在している間、再生が一時的に停止する。
:動作をカスタマイズしたい|''/home/mp3play/jukebox/ctrl/opts''というファイルの容がMP3プレーヤ ''mpg123'' の実行時にコマンドラインオプションとして渡されるので、ここでカスタマイズ。
:スクリプトを停止したい場合|''/home/mp3play/jukebox/ctrl/exit''という名前のファイルを作成する。
**現行バージョンでの制限 [#d7f01537]
-mpg123に渡すオプションは、プレイリストの頭でのみ読み込まれる。
このようなファイルをデータディレクトリ (spool0, spool1あるいはoneshot) 以下にコピーするとそのファイルが再生されます。
URLファイルの場合は、FTPあるいはHTTPでネットワーク経由でファイルの取得を行いながら再生を行います。

データディレクトリ以下にサブディレクトリがあってもOKです。
その場合はサブディレクトリを再帰的にたどって再生されます。

spool0あるいは、spool1に曲を置いた場合は、それらは繰り返して
再生されます。
最初、spool0に置いてある曲を順に再生し、終わったものからspool1
に移動します。spool0にある部を再生し終わると、今度は逆にspool1からspool0
にファイルを移動しつつ再生します。以下それを無限に繰り返します。
ファイルの移動にあたってはディレクトリ構造も保存されます。

oneshotは、文字どおり一回だけ再生したいファイルを格納しておきます。
再生が終わったファイルはoneshot_finishedに退避されます。

再生は、繰り返し再生より一回だけの再生の方が優されます。
よって、繰り返し再生を行っている最中にoneshotに曲を登録すると、
それらをエンドレス再生に割り込ませることができます。

**再生の制御 
動作を制御したい場合はctrlディレクトリ以下にファイルを作成します。

以下のファイルはファイルが存在するかどうかで制御を
行います。ファイルの容は見ないので、空ファイルでOKです。
:rescan|曲を再スキャンします。ファイルを登録した場合は、その曲が再生されるのは、現在の再生が一巡した後になりますが、rescanを行うと、次曲以降の再生で反映されます。
:clean|データディレクトリ以下に存在するの曲ファイルでないもの(拡張子が .mp3, .url以外のファイル)や空のディレクトリを消去します。
:usecache|ネットワーク経由で取得したMP3ファイルをキャッシュします。
:checkcache|ディスクを調べ、空き容量が少なくなっている場合はキャッシュファイルを半減させます。キャッシュファイルは、古いものから消去されます。
:pause|このファイルが存在している間、再生を停止します。ファイルが削除されれば、再生は再開します。
:exit|現在の曲の終了後、再生スクリプトを終了します(OSは停止しません)。
:restart|現在の曲の終了後、再生スクリプトを再起動します。後述のmpg123opts, init, finishなどのファイルの容を反映させたい場合に有効です。
:reboot|現在の曲の終了後、OSをリブートします。
:halt|現在の曲の終了後、OSを停止します。ハードウェアが対応していれば、コンピュータの電源も切断されます。
:mute|0になるまで音量を徐に下げます。再生自体は続いています。
:loud|音量を0から既定値まで徐に上げます。
:stop|現在再生している曲を強制的に終了させます。

以下のファイルはスクリプトの起動および終了時の処理を記述します。
スクリプトで ''.'' コマンドを使用して読み込まれます。
:init|再生スクリプト開始時にユーザが行う処理を記述します。音量の設定、ネットワーク取得時のプロキシの指定などです。
:finish|再生スクリプト終了時にユーザが行う処理を記述します。
:mpg123opts|MP3再生ソフト mpg123 起動時に渡すコマンドラインオプションを記述します。

以下のファイルはスクリプト実行時に自動的に作成され、ユーザがいじることはできません。
:reverse|このファイルが存在するとき、再生方向がspool1 -> spool0であることを表します。
:playing|再生スクリプトが実行中に作成されるディレクトリです。スクリプトが多重に起動することを防止しています。

**Tips 
:音が途切れるんだけど…|冒頭にあげた動作環境ではごくたまに音声が瞬断する現象が見られました。カーネルをGENERICから動作ハードウェアに合わせたものにconfigしなおして作成したカーネルでは瞬断はなくなりました。~
(インストール容には、コンパイラもカーネルソースもないため、カーネルの作成は別のシステムで行う必要があります)。

**現行バージョンでの制限 
-mpg123に渡すオプションは、プレイリストの頭でのみ読み込まれます。
-%%再生中に制御結果をすぐ反映させることは今のところできません、すべての制御は曲の変わり目で実行されます。%% → mute, loud, stopファイルについては、作成後すぐに制御が反映されます。その他のファイルについては従来どおりですが、stopファイルを同時に作成すると曲がすぐに中断し、その後制御が行われます。
**TODO 
-メールインターフェースって可能? ... MP3を添付で送ると再生するとか。
-画面に何か表示させる?
--今んところ、/usr/games/grdc が置いてあるだけ。
----
[[FrontPage]]
[[oldFrontPage]]


Front page   New Page list Search Recent changes   Help   RSS of recent changes