linuxコマンドからairtunesで音楽を再生


itunesをiphoneのリモートで操作しairtunesで再生しコンポで再生。これは問題なくできるが、airtunesをlinuxから使えないかと情報をさがしたところ。Airport Express Clientというアプリを発見。さっそくfedora 10でためしてみた。

まずはhttp://sourceforge.net/projects/raop-play/files/からソースをダウンロード。

./configure

checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking for RSA_new in -lssl... yes
checking for src_new in -lsamplerate... no

依存関係で怒られたので

yum install libsamplerate-devel fltk fltk-devel

今度はOKなのでmake

make

for i in rendezvous raop_play aexcl; do make -C $i; done
make[1]: ディレクトリ `/root/raop_play-0.5.1/rendezvous' に入ります
gcc -Wall -DNOT_HAVE_SA_LEN   -c -o mDNSPosix.o mDNSPosix.c
gcc -Wall -DNOT_HAVE_SA_LEN   -c -o mDNSUNP.o mDNSUNP.c
gcc -Wall -DNOT_HAVE_SA_LEN   -c -o ExampleClientApp.o ExampleClientApp.c
gcc -Wall -DNOT_HAVE_SA_LEN   -c -o mDNS.o mDNS.c
gcc -Wall -DNOT_HAVE_SA_LEN   -c -o Client.o Client.c
gcc  mDNSPosix.o mDNSUNP.o ExampleClientApp.o mDNS.o Client.o -o mDNSClient
make[1]: ディレクトリ `/root/raop_play-0.5.1/rendezvous' から出ます
make[1]: ディレクトリ `/root/raop_play-0.5.1/raop_play' に入ります
gcc -Wall -c raop_play.c -o raop_play.o
gcc -Wall -c raop_client.c -o raop_client.o
gcc -Wall -c rtsp_client.c -o rtsp_client.o
gcc -Wall -c aexcl_lib.c -o aexcl_lib.o
gcc -Wall -c base64.c -o base64.o
gcc -Wall -c aes.c -o aes.o
gcc -Wall -c m4a_stream.c -o m4a_stream.o
gcc -Wall -c audio_stream.c -o audio_stream.o
gcc -Wall -c wav_stream.c -o wav_stream.o
gcc -Wall -c mp3_stream.c -o mp3_stream.o
gcc -Wall -c flac_stream.c -o flac_stream.o
gcc -Wall -c ogg_stream.c -o ogg_stream.o
gcc -Wall -c aac_stream.c -o aac_stream.o
gcc -Wall -c pls_stream.c -o pls_stream.o
gcc -Wall -c pcm_stream.c -o pcm_stream.o
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[1]: ディレクトリ `/root/raop_play-0.5.1/raop_play' から出ます
make[1]: ディレクトリ `/root/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[1]: *** [aexcl_gui.o] エラー 1
make[1]: ディレクトリ `/root/raop_play-0.5.1/aexcl' から出ます

今度はmakeでおこられた。

http://d.hatena.ne.jp/paraches/20060530
こちらと同じなのでREADMEをみると、確かに・・・・

yum install fltk-fluid

で再度makeするも

g++ -Wall -D_GNU_SOURCE -I../raop_play -I../rendezvous -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -c ipod_browser.cxx
gcc -Wall -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I../raop_play -DGLIB_SUBST -c ipod/itunesdb.c -o ipod/itunesdb.o
gcc -Wall -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I../raop_play -DGLIB_SUBST   -c -o ipod/glibsubst.o ipod/glibsubst.c
ipod/glibsubst.c:35: error: conflicting types for 'g_malloc'
/usr/include/glib-2.0/glib/gmem.h:51: error: previous declaration of 'g_malloc' was here
ipod/glibsubst.c:40: error: conflicting types for 'g_malloc0'
/usr/include/glib-2.0/glib/gmem.h:52: error: previous declaration of 'g_malloc0' was here
make[1]: *** [ipod/glibsubst.o] エラー 1

こんどはメモリーのアロケートか・・・・

http://d.hatena.ne.jp/nixeneko/20081021/1224599159
こちらを参考に

aexcl/ipod/glibsubst.cを開き、引数のgulongをgsizeに変更するとmakeはOK。

make installし完了。

実際にコマンドをうつと

# raop_play 192.168.xx.xx ./音楽ファイル名.mp3
DBG: CSeq: 1
DBG: Apple-Response: xxxxxxxx
DBG: Audio-Jack-Status: connected; type=digital DBG: CSeq: 2 DBG: Session: xxxxxx
DBG: Transport: RTP/AVP/TCP;unicast;interleaved=0-1;mode=record;server_port=6000 DBG: Audio-Jack-Status: connected; type=digital DBG: CSeq: 3 DBG: Audio-Jack-Status: connected; type=digital DBG: CSeq: 4 DBG: Audio-Jack-Status: connected; type=digital connected DBG: id3 tagsize: 45447 DBG: sample rate=44100 ERR: decoder process can't be terminated セグメンテーション違反です

とエラーになる。

「セグメンテーション違反です」か。やはり修正したソースに関連したgmem.h関係で問題があるのか・・?とりあえずいったんあきらめ。


投稿者: ちゅう たろう

ネットワーク・サーバー周りをちょっと知っているだけの普通の人です。