小ネタ ... ネットワークから(しか)使用できないMP3プレーヤ†
|
曲を登録中 (ってKonquerorでファイルをコピーしてるだけだけど…) |
これは、
- DEC Digital HiNote Ultra II
- CPU: Pentium 100MHz
- Mem: 40MB
- HDD: 1GB
での実行例です。こんなスペックでも十分実用になっています。
インストール後のシステムサイズは40MBをちょっと切るくらいで、
それを差し引いたHDDの空き容量にMP3ファイルを格納できます。
1GBのHDDだと大体300曲くらい入るようです。
現役引退マシンの活用方法としていかがですか?
- 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
- インストールするパッケージ ... メニューに表れたbsd, base37.tgz, site37.tgz を全て指定(allと入力)する。
- タイムゾーン ... 必ず Japan を指定(それ以外は削除されているため)。
- インストールの最後でMP3 Playerのパスワードの設定を要求されるので、入力する。
- インストール後、リブートして再立ち上げする。OpenBSDのリリースソング が聞こえてくればOK。
- song30.mp3 ローカルに格納されたファイルを再生
- song31.mp3 ~ song34.mp3 ... HTTP経由でファイルを再生
- song35.mp3 ~ song37.mp3 ... FTP経由でファイルを再生
HTTPやFTP経由での再生が行われない場合は、ネットワークの設定などを
チェックしてください。
使用方法†
システムを起動すると、ジュークボックスは自動的に再生状態になります。
再生したい曲を登録するには、インストール時にパスワードを登録した
mp3playユーザで行います。
FTPやscpなどを用いて以下に説明するディレクトリ下にMP3ファイルや
URLリストをを転送します。
また、sshでログインし、シェルによる操作で曲の登録や再生の制御を
行うこともできます。
曲の登録†
ユーザmp3playのホームディレクトリの下は次の図のようになっています。
/home/
|--mp3play/
|--jukebox/
|--attic/ データの一時退避や作業用
|--ctrl/ 再生の制御のためのファイルを格納
|--oneshot/ 一回だけ再生する曲を格納
|--oneshot_finished/
| oneshotで再生済みの曲はここに移動される
|--spool0 繰り返し再生する曲格納用
|--spool1 spool0で再生済の曲はここに移動される
| (あるいは、逆にspool1→spool0へ移動)
|--playlist-> spool0あるいはspoo1へのシンボリックリンク
| (現在再生している方 ... 移動元)
|--play.sh 再生の制御スクリプト
再生する曲には以下の2種類があります;
- MP3ファイル
- MP3形式の音声ファイルそのもの。ファイル名が .mp3で終わる。
- URLファイル
- MP3ファイルのURLが列挙されたファイル。ファイル名は .urlで終わる。
このようなファイルをデータディレクトリ (spool0, spool1あるいはoneshot) 以下にコピーするとそのファイルが再生されます。
URLファイルの場合は、FTPあるいはHTTPでネットワーク経由でファイルの取得を行いながら再生を行います。
データディレクトリ以下にサブディレクトリがあってもOKです。
その場合はサブディレクトリを再帰的にたどって再生されます。
spool0あるいは、spool1に曲を置いた場合は、それらは繰り返して
再生されます。
最初、spool0に置いてある曲を順に再生し、終わったものからspool1
に移動します。spool0にある全部を再生し終わると、今度は逆にspool1からspool0
にファイルを移動しつつ再生します。以下それを無限に繰り返します。
ファイルの移動にあたってはディレクトリ構造も保存されます。
oneshotは、文字どおり一回だけ再生したいファイルを格納しておきます。
再生が終わったファイルはoneshot_finishedに退避されます。
再生は、繰り返し再生より一回だけの再生の方が優先されます。
よって、繰り返し再生を行っている最中にoneshotに曲を登録すると、
それらをエンドレス再生に割り込ませることができます。
再生の制御†
動作を制御したい場合はctrlディレクトリ以下にファイルを作成します。
以下のファイルはファイルが存在するかどうかで制御を
行います。ファイルの内容は見ないので、空ファイルでOKです。
- ctrl/rescan
- 曲を再スキャンします。ファイルを登録した場合は、その曲が再生されるのは、現在の再生が一巡した後になりますが、rescanを行うと、次曲以降の再生で反映されます。
- ctrl/clean
- データディレクトリ以下に存在するの曲ファイルでないもの(拡張子が .mp3, .url以外のファイル)や空のディレクトリを消去します。
- ctrl/pause
- このファイルが存在している間、再生を停止します。ファイルが削除されれば、再生は再開します。
- ctrl/exit
- 現在の曲の終了後、再生スクリプトを終了します(OSは停止しません)。
- ctrl/restart
- 現在の曲の終了後、再生スクリプトを再起動します。後述のmpg123opts, init, finishなどのファイルの内容を反映させたい場合に有効です。
- ctrl/reboot
- 現在の曲の終了後、OSをリブートします。
- ctrl/halt
- 現在の曲の終了後、OSを停止します。ハードウェアが対応していれば、コンピュータの電源も切断されます。
以下のファイルはスクリプトの起動および終了時の処理を記述します。
スクリプト内で . コマンドを使用して読み込まれます。
- ctrl/init
- 再生スクリプト開始時にユーザが行う処理を記述します。音量の設定、ネットワーク取得時のプロキシの指定などです。
- ctrl/finish
- 再生スクリプト終了時にユーザが行う処理を記述します。
- ctrl/mpg123opts
- MP3再生ソフト mpg123 起動時に渡すコマンドラインオプションを記述します。
以下のファイルはスクリプト実行時に自動的に作成され、ユーザがいじることはできません。
- ctrl/reverse
- このファイルが存在するとき、再生方向がspool1 -> spool0であることを表します。
- ctrl/playing
- 再生スクリプトが実行中に作成されるディレクトリです。スクリプトが多重に起動することを防止しています。
Tips†
- 音が途切れるんだけど…
- 冒頭にあげた動作環境ではごくたまに音声が瞬断する現象が見られました。カーネルをGENERICから動作ハードウェアに合わせたものにconfigしなおして作成したカーネルでは瞬断はなくなりました。
(インストール内容には、コンパイラもカーネルソースもないため、カーネルの作成は別のシステムで行う必要があります)。
現行バージョンでの制限†
- mpg123に渡すオプションは、プレイリストの先頭でのみ読み込まれます。
- 再生中に制御結果すぐ反映させることは今のところできません、すべての制御は曲の変わり目で実行されます。
TODO†
- 前項の制限を解消する。
- メールインターフェースって可能? ... MP3を添付で送ると再生するとか。
- 画面に何か表示させる?
- 今んところ、/usr/games/grdc が置いてあるだけ。
FrontPage