「MP3 CD のかかるプレーヤーって、便利なのかな?」
妻が急にそう言い出したのは、先週末のことだった。
ちょうど1年ほど前に、W-MD CD ラジオを購入した。
W-MD が欲しいといったのは妻。ところが、このオーディオは「ラジオアンテナが弱い」という微妙な欠点があった。
僕は仕事をしているときは、もっぱらラジオ派。
音楽が流れているのは好きなのだが、特に好きなアーティストもいないし、自分のCDもそれほど持っていない。
なによりも、CDだと「音楽が止まってしまう」のが嫌だし、リピート再生だと飽きてしまうので嫌だ。
妻は仕事をしているときは CD 派。
特にメールなどの文章を書いているときは、日本語が耳から入ってくると文章作成に集中できないと言うので洋楽を聴いている。
特に、弱いアンテナでラジオを聴いていると、ノイズが気になって仕方がないのでダメだと言う。
というわけで、主に妻が選曲して CD を聞くことが増えた。
しかしこれも困りもので、妻は時折 CD を変えるのが面倒くさいし、やはり気づくと無音の状態と言うのが多い。
そこで冒頭の発言になるわけだ。
MP3 に圧縮すれば、CD 1枚で半日は聞いていられる。便利なのかも知れない。
でも、そのためだけに買って1年しかたっていないオーディオを買い換えるのか?
じつは、以前からちょっとやってみたいことがあった。
仕事柄、常時稼動しているサーバーがあるのだが、実のところ仕事で使っている最中でもこいつの CPU パワーの1割も使ってはいない。
じゃぁ、こいつを MP3 オーディオにはできないものだろうか?
Linux で MP3 といえば、mpg123。
最近は alsa player という高機能なやつもあるが、こいつはカーネルの一部として動作するのでカーネルコンパイルが必要だ。今回は面倒なのでパス。
サーバーにスピーカーを繋いで、適当な MP3 ファイルを与えて mpg123 を起動してみる。ちゃんと音が出る。
まずは、これで第1段階完了。
えーと、確かどっかに MP3 のCD あったな…とデータを引っ張り出してくる。
別に違法なものではない。その昔、MP3 が人気が出始めたときに、興味があって手持ちの CD を圧縮したものだ。
当時は CD も2倍速。リッピングに時間がかかり、さらに圧縮も非常に時間がかかり、プレイヤーも時折、OSを巻き込んでハングアップした。
そんな状況で「MP3 は実用的ではない」と判断して、せっかく作ったデータをCDに焼いてMP3から遠ざかっていただけだ。
#Windows で妻の持っている CD を圧縮してみたら、わずか5分程度で終了した。今なら MP3 も実用になるのかな…というか、好きな人はとっくに実用にしてるからな…
このデータを、Windows から Samba 経由で サーバーに送り込む。
netatalk と併用している都合で、漢字は全部 CAP エンコードされる。サーバーで読むのは大変だが、そんなことは後の問題。
PHP で、「データフォルダを走査し、ファイル情報などを Mysql データベースに取り込む」プログラムをさくっと作る。仕事でしょっちゅうやっているので、こういうことはお手のものだ。
つづいて、perl でさくっと、「サーバーらしきプログラム」を組んでみる。久しぶりの perl で文法忘れ気味 (^^;;
ともかく、Mysql からファイルデータを取り出し、適当に再生し続けるプログラムだ。この時点ではかなりいい加減だったが、ほおっておけば延々と曲を流し続ける。
ここまでは3時間ほどで出来上がった。いい感じだ。
目標は「妻でも使える」プログラムなので、Linux を直接いじっているようでは良くない。
perl でサーバーを組むというのは、仕事でもそのうち必要になりそうだと考えていた技術。
ここはちょっと気張って作ってみよう。
ちゃんとプロセスを fork して、mpg123 が演奏中でも接続し、再生中止や別の曲の再生命令を出せるようにする。
基本的には、CGI でデータベースにプレイリストを作成し、そのプレイリストを再生し続けるように想定。
データベースからの読み出し方法で、ランダム再生やリピート再生なども出来るように考慮…だけはしておく。
(この時点では実装しない)
そうそう、CGI から指示を出すようにすると、「音を止め忘れたままパソコンをシャットダウン」と言うこともあるかもしれない。
そこで、1曲終了するごとに、最後に CGI を操作したパソコンに ping を打ち、帰ってこない場合は演奏を終了することにした。
データベースを直接いじってプレイリストを作り、telnet でサーバーに接続して演奏指令を出す。
おおかた正しく動くようになったので、続いて CGI インターフェイスを作成。
こちらは簡単で、CGI でデータベースを操作して、プレイリストが編集できれば良い。
最終的には使いやすくしないといけないが、今のところはまだ適当。
とりあえず、CGI からプレイリスト作成・演奏・停止が操作できるようになるまでに、まる1日かかった。
(もちろん、徹夜などではない。プログラム時間では12時間くらいか?)
プレイリスト編集時には、もちろん CAP エンコードされたファイル名はデコードされ、日本語として表示される。ID3 タグがあれば認識し、そういう情報も表示される。
プレイリストは複数保存しておき、気分によって使い分けることが可能だ。
こういうプログラムは、出来かけてくるといじるのが面白い。
今のところ、CGI 側で ID3 タグをもとにして現在演奏中の曲情報を表示したり、これから先演奏する予定の曲を表示したり、それらの情報をちゃんと曲が変ったタイミングで更新したりするようになっている。
今後やりたいのは、使い勝手の向上。
今のところ、まだ「演奏できる」レベルでしかなくて、一時停止とか、「今の曲良かったからもう一回」とか、そういう機能はない。
プレイリスト編集も、並んだ曲からポチポチと選ぶ形式だ。
100曲程度のレベルならまだしも、これで大量の曲が入ったら、とても選ぶ気がしないだろう。
どうにかしないといけないとは思うが、ここら辺で「週末」は終わったので、仮完成とする。
本当は、週末も仕事しないといけないような状況だったのだけど、たまには遊んでもいい…と思う。
同じテーマの日記(最近の一覧)
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |