小ネタ ... ネットワークから(しか)使用できない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のパスワードの設定を要求されるので、入力する。
- インストール後、リブートして再立ち上げする。Wizard of OS が聞こえてくればOK。
使用方法†
システムを起動すると、ジュークボックスは自動的に再生状態になります。
演奏したい曲を登録するには、インストール時にパスワードを登録した
mp3playユーザで行います。
FTPやscpなどを用いて以下に説明するディレクトリ下にコンテンツや
URLリストをを転送します。
また、sshでログインし、シェルによる操作を行うこともできます。
曲の登録†
ユーザmp3playのホームディレクトリの下は次の図のようになっています。
/home/
|--mp3play/
|--jukebox/
|--attic/ データの一時退避や作業用
|--ctrl/ 演奏の制御のためのファイルを格納
|--oneshot/ 一回だけ演奏するコンテンツを格納
|--oneshot_finished/
| oneshotで演奏済みのコンテンツを格納
|--spool0 繰り返し演奏するコンテンツ格納用
|--spool1 spool0と同じ
|--playlist-> spool0あるいはspoo1へのシンボリックリンク
| (現在演奏している方)
|--play.sh 演奏の制御スクリプト
演奏するコンテンツには以下の2種類があります;
- MP3ファイル
- MP3形式の音声ファイルそのもの。ファイル名が .mp3で終わる。
- URLファイル
- MP3ファイルのURLが列挙されたファイル。ファイル名は .urlで終わる。
このようなファイルを spool0, spool1あるいはoneshot以下にコピーすると
そのファイルが再生されます。URLファイルの場合は、FTPあるいはHTTPで
ネットワーク経由でファイルの取得を行いながら再生を行います。
playlist以下にサブディレクトリがあってもOKです。その場合はサブディレクトリを再帰的にたどって再生されます。
spool0あるいは、spool1にコンテンツを置いた場合は、それらは繰り返して
演奏されます。
最初、spool0に置いてあるコンテンツを順に演奏し、終わったものからspool1
に移動します。spool0にある全部を演奏し終わると、今度は逆にspool1からspool0
にファイルを移動しつつ演奏します。以下それを無限に繰り返します。
ファイルの移動にあたってはディレクトリ構造も保存されます。
oneshotは、文字どおり一回だけ演奏したいファイルを格納しておきます。
演奏が終わったファイルはoneshot_finishedに退避されます。
再生は、繰り返し演奏より一回だけの演奏の方が優先されます。
よって、繰り返し演奏を行っている最中にoneshotに曲を登録すると、
それらを割り込んで演奏することができます。
再生の制御†
動作を制御したい場合はctrlディレクトリ以下にファイルを作成します。
以下のファイルはファイルが存在するかどうかで制御を
行います。ファイルの内容は見ないので、空ファイルでOKです。
- ctrl/rescan
- コンテンツファイルを再スキャンします。FTPなどでファイルを登録した場合は、現在の曲が一巡しないと登録したファイルが再生されませんが、rescanを行うと、次曲以降の再生で反映されます。
- ctrl/clean
- コンテンツディレクトリ(spool0, spool1, oneshot, oneshot_finished)内の非コンテンツファイルや空のディレクトリを消去します。
- ctrl/pause
- このファイルが存在している間、演奏を停止します。
- ctrl/exit
- 現在の曲演奏の終了後、演奏スクリプトを終了します(OSは停止しません)。
- ctrl/restart
- 現在の曲演奏の終了後、演奏スクリプトを再起動します(スクリプトのデバッグ以外には使用しないでしょうが…)。
- 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