目覚まし時計代わりに Debian サーバと AirMac Express を使う

箱の裏側

目覚ましミニコンポの CD プレイヤが壊れたかに見えた時に考えた、debian サーバに入っている mp3 ファイルを AirMac Express に繋がったスピーカから鳴らして目覚ましにするという企み。
CD プレイヤが叩いたら直ったのでお蔵入りになったのだけど、とりあえずトライしてみたいな〜ということでやってみた。
まずは AirMac Express へ音楽データを流してくれるプレイヤを探さないと行けない。さっそくググってみると raop-play というのが見つかった。GUI であれこれできるみたいだけど、我が家のサーバは純粋にサーバなのでデスクトップ環境無いんだよな〜。で、ドキュメントを良く読んでみると… aexpl という GUI の部分、raop-play という実際のプレイヤ、そして RENDEZVOUS でコミュニケーションを取る部分の3つに分かれるみたいだ。この中のプレイヤの部分である raop-play は直接コマンドラインからでも使える! というわけで、raop-play をインストールしてみることにした。

ファイルは http://raop-play.sourceforge.net/ にある。既に .deb パッケージになっているファイルも用意されているが、いつも通りに i386 用のみだ。というわけでソースファイルを持ってきてパッケージを自分で作ることになる。さっそくダウンロード&展開して raop_play-0.5.1 にディレクトリ移動。とりあえず debchange で PPC 対応を記入しておいた。

paraches@debian:~/myTest$ cd raop_play-0.5.1
paraches@debian:~/myTest/raop_play-0.5.1$ ls
CHANGELOG    README       configure  mkinstalldirs  sourceforge_logo
COPYING      aexcl        debian     raop_play
Makefile.in  config.h.in  drivers    rendezvous
paraches@debian:~/myTest/raop_play-0.5.1$ debchange -i

raop-play (0.5.2) testing; urgency=low

  * Build for PPC version.

 -- paraches paraches <paraches@paraches.com>  Tue, 30 May 2006 05:00:13 +0900

raop-play (0.5.1) testing; urgency=low
  * flac is supported.
  * fixed a problem in the new firmware to detect the end of playing.
  * "alsa_raoppcm" fixed a busy loop issue of 'artsd'

 -- Shiro Ninomiya <shiron@snino.com>  Fri, 16 Dec 2005 08:00:00 -0700
"debian/changelog.dch" 38L, 1472C 書込み

さて、とりあえずパッケージをビルドしてみよう。

paraches@debian:~/myTest/raop_play-0.5.1$ dpkg-buildpackage -rfakeroot
dpkg-buildpackage: source package is raop-play
dpkg-buildpackage: source version is 0.5.2
dpkg-buildpackage: source maintainer is paraches paraches <paraches@paraches.com>
dpkg-buildpackage: host architecture is powerpc
dpkg-checkbuilddeps: Unmet build dependencies: libfltk1.1-dev libsamplerate0-dev
dpkg-buildpackage: Build dependencies/conflicts unsatisfied; aborting.
dpkg-buildpackage: (Use -d flag to override.)

あ、依存しているパッケージが足りないとちゃんと教えてくれるのね。親切だ! 早速足りないパッケージをインストールしよう。

paraches@debian:~/myTest/raop_play-0.5.1$ sudo apt-get install libfltk1.1-dev libsamplerate0-dev
パッケージリストを読みこんでいます... 完了
依存関係ツリーを作成しています... 完了
以下の特別パッケージがインストールされます:
  libexpat1-dev libfltk1.1c102 libfontconfig1-dev libfreetype6-dev libjpeg62-dev
  libpng12-dev libx11-dev libxext-dev libxft-dev libxi-dev libxrender-dev libxv-dev
  render-dev x-dev xlibs-static-dev
提案パッケージ:
  fltk1.1-doc fluid xspecs
推奨パッケージ:
  xlibmesa-gl-dev libgl-dev xlibmesa-glu-dev libglu-dev
以下のパッケージが新たにインストールされます:
  libexpat1-dev libfltk1.1-dev libfltk1.1c102 libfontconfig1-dev libfreetype6-dev
  libjpeg62-dev libpng12-dev libsamplerate0-dev libx11-dev libxext-dev libxft-dev
  libxi-dev libxrender-dev libxv-dev render-dev x-dev xlibs-static-dev
アップグレード: 0 個、新規インストール: 17 個、削除: 0 個、保留: 0 個。
6136kB のアーカイブを取得する必要があります。
展開後に追加で 20.2MB のディスク容量が消費されます。
続行しますか? [Y/n]

<長いので省略>

libxft-dev (2.1.7-1) を設定しています ...
libfltk1.1-dev (1.1.6-5) を設定しています ...

で、インストールの途中で
への .h の名前でのリンクを作りますか?
って聞かれた。デフォルトが「いいえ」だったので「いいえ」にしておいた。後は特に問題なく終了。
必要なパッケージは入ったので、再度ビルドに挑戦。

paraches@debian:~/myTest/raop_play-0.5.1$ dpkg-buildpackage -rfakeroot
dpkg-buildpackage: source package is raop-play
dpkg-buildpackage: source version is 0.5.2
dpkg-buildpackage: source maintainer is paraches paraches <paraches@paraches.com>
dpkg-buildpackage: host architecture is powerpc
 fakeroot debian/rules clean
dh_testdir
dh_testroot
rm -f build-stamp configure-stamp
/usr/bin/make distclean

<長いので省略>

gcc -o raop_play  -lssl -lsamplerate -lid3tag raop_play.o raop_client.o rtsp_client.o aexcl_lib.o base64.o aes.o m4a_stream.o audio_stream.o wav_stream.o mp3_stream.o flac_stream.o ogg_stream.o aac_stream.o pls_stream.o pcm_stream.o
make[2]: Leaving directory `/home/paraches/myTest/raop_play-0.5.1/raop_play'
make[2]: Entering directory `/home/paraches/myTest/raop_play-0.5.1/aexcl'
: -c aexcl_gui.fl
g++ -Wall -D_GNU_SOURCE -I../raop_play -I../rendezvous -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -c aexcl_gui.cxx
g++: aexcl_gui.cxx: そのようなファイルやディレクトリはありません
g++: no input files
make[2]: *** [aexcl_gui.o] エラー 1
make[2]: Leaving directory `/home/paraches/myTest/raop_play-0.5.1/aexcl'
make[1]: *** [all] エラー 2
make[1]: Leaving directory `/home/paraches/myTest/raop_play-0.5.1'
make: *** [build-stamp] エラー 2

あれ? まだ何か足りないの?
「g++: aexcl_gui.cxx: そのようなファイルやディレクトリはありません」だって。
あ、このエラーって README に書いてあったぞ。

	Note:
		if you see a message like "aexcl_gui.cxx : No such file or directory",
		you are missing 'fluid'.  aexcl_gui.h and aexcl_gui.cxx are generated by 'fluid'.

fluidってのが入ってないのね。で、README にはちゃんと必要なパッケージの一覧があったんだよな〜! ちゃんと読んだことを覚えておいてパッケージのインストールをしないと駄目だな。いっつもなぜか嬉しくていきなりパッケージを作り始めてしまう…

paraches@debian:~/myTest/raop_play-0.5.1$ sudo apt-get install fluid
パッケージリストを読みこんでいます... 完了
依存関係ツリーを作成しています... 完了
提案パッケージ:
  fltk1.1-doc
以下のパッケージが新たにインストールされます:
  fluid
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
150kB のアーカイブを取得する必要があります。
展開後に追加で 410kB のディスク容量が消費されます。
取得:1 ftp://ring.hosei.ac.jp stable/main fluid 1.1.6-5 [150kB]
150kB を 0s で取得しました (241kB/s)
未選択パッケージ fluid を選択しています。
(データベースを読み込んでいます... 現在 108500 個のファイルとディレクトリがインストールされています。)
(.../fluid_1.1.6-5_powerpc.deb から) fluid を展開しています...
fluid (1.1.6-5) を設定しています ...

これで準備 OK!
今度こそちゃんとビルドできるでしょう。

paraches@debian:~/myTest/raop_play-0.5.1$ dpkg-buildpackage -rfakeroot
dpkg-buildpackage: source package is raop-play

<長いので省略>

dh_builddeb
dpkg-deb: ../raop-play_0.5.2_powerpc.deb にパッケージ `raop-play' を構築しています
 dpkg-genchanges
dpkg-genchanges: including full source code in upload
dpkg-buildpackage: full upload; Debian-native package (full source is included)

というわけで、ビルド完了!
それじゃ早速パッケージのインストールをしましょう。

paraches@debian:~/myTest$ sudo dpkg -i raop-play_0.5.2_powerpc.deb
未選択パッケージ raop-play を選択しています。
(データベースを読み込んでいます... 現在 108626 個のファイルとディレクトリがインストールされています。)
(raop-play_0.5.2_powerpc.deb から) raop-play を展開しています...
dpkg: 依存関係の問題により raop-play の設定ができません:
 raop-play は以下に依存(depends)します: mpg321 ...しかし:
  パッケージ mpg321 はインストールされていません。
 raop-play は以下に依存(depends)します: vorbis-tools ...しかし:
  パッケージ vorbis-tools はインストールされていません。
dpkg: raop-play の読み込みエラーです(--install):
 依存関係の問題 - 設定を見送ります。
以下のパッケージの処理中にエラーが発生しました:
 raop-play

ん? ここに来てエラー出るの? mpg321 と vorbis-tools が無いから入れられないのか。それじゃまずは raop-play を掃除してから必要なパッケージを入れましょう。

paraches@debian:~/myTest$ sudo dpkg -r raop-play
(データベースを読み込んでいます... 現在 108633 個のファイルとディレクトリがインストールされています。)
raop-play を削除しています...
paraches@debian:~/myTest$ sudo apt-get install mpg321 vorbis-tools
パッケージリストを読みこんでいます... 完了%
依存関係ツリーを作成しています... 完了%     
以下の特別パッケージがインストールされます:
  libao2 libflac6 libmad0 libogg0 liboggflac1 libvorbis0a libvorbisenc2
  libvorbisfile3
提案パッケージ:
  libartsc0 libasound2 libaudio2 libesd0 libesd-alsa0
以下のパッケージが新たにインストールされます:
  libao2 libflac6 libmad0 libogg0 liboggflac1 libvorbis0a libvorbisenc2
  libvorbisfile3 mpg321 vorbis-tools
アップグレード: 0 個、新規インストール: 10 個、削除: 0 個、保留: 0 個。
715kB のアーカイブを取得する必要があります。
展開後に追加で 3092kB のディスク容量が消費されます。
続行しますか? [Y/n] 

<長いので省略>

mpg321 (0.2.10.3) を設定しています ...

vorbis-tools (1.0.1-1.3) を設定しています ...

で、再度インストールに挑戦。
今度こそ成功するはず!

paraches@debian:~/myTest$ sudo dpkg -i raop-play_0.5.2_powerpc.deb
未選択パッケージ raop-play を選択しています。
(データベースを読み込んでいます... 現在 108683 個のファイルとディレクトリがインストールされています。)
(raop-play_0.5.2_powerpc.deb から) raop-play を展開しています...
raop-play (0.5.2) を設定しています ...

というわけで、無事にインストール完了!
ちょこっと触ってみると?

paraches@debian:~/myTest$ raop_play
raop_play [--port port_number] [--vol volume(0-100)] [-i interactive mode] server_ip audio_filename
paraches@debian:~/myTest$ aexcl_play
Can't open display:

うん、raop_play 単体でもちゃんと使えるみたいだ。でも、GUI 付きではやっぱり駄目だね。ま、デスクトップ無いから当たり前だけど。


さて、次は実際に mp3 ファイルを聞いてみよう。mp3 の置いてあるディレクトリに移動してからコマンドを入力。AirMac Express のアドレスは 192.168.1.11 だ。

paraches@debian:~/myMusic$ raop_play 192.168.1.11 ./Honey.mp3
DBG: CSeq: 1
DBG: Apple-Response: PN4iUr/jaEI2sqBk4XPTwBT1mK+nsAIs5Hl1Y+Smj5bFBM6CAziSArzomF0MQr6bez2F0WeEmi1wD7JFTyukmBqhJKvJEDoN5wDp74kJl0V49IhBOBabv/TzhX8yyo5liClP+2xwPz0e6Qz73zHm9Cy0uy+QRHYfPfOy1lGqvsslpUm1ThKmWTQDd7AMz56W3V1Q7B5aZhPIGjqlOQRl3owH2HQjNxqY7yX18MNm+7AKjaGeyQ/qTde0lahmK3F7lBlqYK2sI74ig9nF3KOFJ1XFenf101yLH3yG/HYJq1jZx2JwNSd7/qCsG6PLsSDtXTrK32GtsxNB51edQALMlA
DBG: Audio-Jack-Status: connected; type=analog
DBG: CSeq: 2
DBG: Session: 80A91010
DBG: Transport: RTP/AVP/TCP;unicast;interleaved=0-1;mode=record;server_port=6001
DBG: Audio-Jack-Status: connected; type=analog
DBG: CSeq: 3
DBG: Audio-Jack-Status: connected; type=analog
DBG: CSeq: 4
DBG: Audio-Jack-Status: connected; type=analog
connected
DBG: id3 tagsize: 0
DBG: sample rate=44100
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layer 1, 2, and 3.
Version 0.59q (2002/03/23). Written and copyrights by Joe Drew.
Uses code from various people. See 'README' for more!
THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK!
Title  : Honey                           Artist: PUFFY                         
Album  : THE VERY BEST OF PUFFY          Year  :                               
Comment:                                 Genre :                               

Directory: ./
Playing MPEG stream from Honey.mp3 ...
MPEG 1.0 layer III, 128 kbit/s, 44100 Hz joint-stereo

[2:45] Decoding of Honey.mp3 finished.
done
INFO: fd_event_callback: read, disconnected on the other end
paraches@debian:~/myMusic$ 

何やら結構あれこれ画面に出てくるんだ…。ま、曲は問題なく?聞く事ができた。
コマンドを打ち込んでから実際に音がでるまで微妙な間が開くのね。これがチト気持ち悪いかな? あと、ボリュームは省略すると 100% になってるのかな? 音がでかくて驚いた。

これで、プレイリストを作っておいてそれを cron ででも毎朝起動すれば目覚まし時計代わりに使えるぞ!って、でも今はスピーカーはミニコンポ経由なんだよな。ミニコンポのタイマーをセットするなら CD プレイヤが生きている現状ではやっぱり目覚まし時計はミニコンポなんだな〜。