AmarokからAirMac Expressに繋いだスピーカーを鳴らそうとしたけど無理だった

Ubuntu 8.04で、カーネルのバージョンは2.6.24-21-genericで鳴らそうとやったけどダメでした。
他にもUbuntuで上手く動かない人がいるようだ。英語だからよくわからない…
(2008/10/26追記:どうやらUbuntu8.04のカーネルALSA関係に問題があるらしいので、カーネルをどうにかしなきゃいけないようです)

  • 必要なパッケージ
    • libssl(libssl0.9.8が入ってた)
    • libssl-dev
    • libfltk1.1-dev
    • libfltk1.1
    • fluid
    • libglib2.0-dev
    • libsamplerate0
    • libsamplerate0-dev
    • libid3tag0
    • libid3tag0-dev

入ってなかったらSynapticなどで入れる。

    • build-essentialも、コンパイラ等が入ってなかったようなので入れた
  • raop_playのsourceをダウンロード。

http://prdownloads.sourceforge.net/raop-play/raop_play-0.5.1.tar.gz?download
後に解凍する。

  • パッチをダウンロードする

http://sourceforge.net/tracker/download.php?group_id=119473&atid=684238&file_id=237676&aid=1756825

patch -p0 < fix-typedefs.patch
  • geditなどでdrivers/alsa_raoppcm.cを開き、
#include <linux/config.h>

#include <linux/autoconf.h>

に変更する。

  • /raop_play-0.5.1/aexcl/ipod/glibsubst.cを編集…

g_mallocとg_malloc0の引数のgulongをgsizeに変更

inline gpointer g_malloc(gulong size)
{
	return malloc(size);
}

inline gpointer g_malloc0(gulong size)
{
	gpointer p;
	if((p=malloc(size))) memset(p,0,size);
	return p;
}

inline gpointer g_malloc(gsize size)
{
	return malloc(size);
}

inline gpointer g_malloc0(gsize size)
{
	gpointer p;
	if((p=malloc(size))) memset(p,0,size);
	return p;
}

に。
(makeしたら型が違ってるって怒られたから/usr/include/glib-2.0/glib/gmem.hに合わせて変更したけど、大丈夫だよね?)

cd raop_play-0.5.1 
./configure
make
sudo make install

ここまでは成功(してると思う)。ターミナルにaexcl_playと打って実行して、出てきたウィンドウで適当な音楽ファイルを選んで再生したら、AirMac Expressから音楽が流れた。
(mp3を再生するにはmpg321、oggにはogg123、aacにはfaad、flacにはflacをインストールする必要がある)

cd raop_play-0.5.1/drivers
make
sudo make install
#!/bin/sh
module=alsa_raoppcm
devnode=/tmp/pcmout
if ! grep "^$module" /proc/modules > /dev/null; then
    /sbin/modprobe alsa_raoppcm
fi
major=`sed -n -r "s/(^[0-9]+) pcmout/\\1/p" /proc/devices`
if [ -c $devnode ]; then
    rm -f $devnode;
fi
mknod $devnode c $major 0
    • start_airport_express
#!/bin/bash
sudo load_airport_express_driver
raop_play airport /tmp/pcmout &

"airport"はAirMac Expressの名前か、IPアドレスに置き換える

    • stop_airport_express
#!/bin/bash
killall -9 raop_play

スクリプトは実行属性をつけて、パスを通しておけばいいようです

sudo chmod +x load_airport_express_driver
sudo cp load_airport_express_driver /usr/bin
(以下省略)
  • 実行
sudo start_airport_express

これでちゃんとできるはずなんですが。

$ sudo start_airport_express 
mknod: missing operand after `0'
詳しくは `mknod --help' を実行して下さい.
$ DBG: CSeq: 1
DBG: Apple-Response: y7AXn4R1i...
DBG: Audio-Jack-Status: connected; type=analog
DBG: CSeq: 2
DBG: Session: 809F79C0
DBG: Transport: RTP/AVP/TCP;unicast;interleaved=0-1;mode=record;server_port=6000
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
ERR: errror: auds_open

エラーがでて、上手いこと動かない。

cat /proc/asound/cards

とやってみても、1つしか表示されない。
うまくいってたなら、ここでAmarokの設定をすれば聞こえるようになるんだろうけど・・・



参考サイト:
http://raop-play.sourceforge.net/
2006-05-30
airport_express [Wiki ubuntu-fr]
http://www.jroller.com/nwinkler/entry/amarok_and_the_airport_express
http://www.jroller.com/nwinkler/
http://ubuntuforums.org/showthread.php?t=192806