Network AudioをRaspberry Piで その2(音だしとAirPlay)
Air Playのインストールをしたいと思います。
最終的にはUSB-DACでアンプから音を出す事をしたいわけですが、
まずは、イヤホンジャックから音を出しましょう。
参考にしたサイトはここ
UbuntuをAirPlayの母艦にする - Shairport - DIMENSION 2.00
/usr/share/sound/alsa
にサンプルの音源があるので、vlcをapt-getして音を鳴らしましょう。
鳴ったら問題ないです。
鳴らない場合は、Sound cardの設定を見直しましょう
sudo amixer cset numid=3 1
と設定してみましょう。末尾の1がイヤホンジャック。2にするとHDMI出力になるようです。
やってみた結果、音が小さい!と言う人は、
sudo amixer controls
と打ってPCM Playback Volumeと出たnumidを覚えておいて
amixer cset numid=1 98%
とボリューム調整してみましょう。
AirPlayエミュレーターShairportのインストール
では音も鳴った事ですので、目的のものをインストールします。
sudo apt-get install git libao-dev libssl-dev libcrypt-openssl-rsa-perl libio-socket-inet6-perl libwww-perl avahi-utils libmodule-build-perl
ビルドする為のツールをインストールしたら、
githubからshairportのコードを落としてきてビルドする。
git clone https://github.com/abrasive/shairport.git
cd shairport/
./configure
make
ビルドが通ったら、shairportを起動させる。名前は任意。AirPlayPiで起動させる
./shairport.pl -a "AirPlayPi"
同じネットワーク上のiTunesから見える様になるか確認
見えました。これで音が鳴ればshairport動作確認完了です。
その次に、インストールしてデーモンとして登録しましょう。
sudo make install
install -D -m 0755 hairtunes /usr/local/bin/hairtunes
install -D -m 0755 shairport.pl /usr/local/bin/shairport.pl
install -D -m 0755 shairport /usr/local/bin/shairport
sudo cp -a shairport.init.sample /etc/init.d/shairport
次はいよいよUSB-DACとの接続です。...といってもまだ買ってないので記事のアップはちょっと先になりそう。年末までには欲しい!でもお金がない(|||| ToT)
参考
Raspberry PiでUSBスピーカーをAirPlay対応する | count0.org
Raspberry Piを「AirPlay化」して音楽をストリーミングする方法 | ライフハッカー[日本版]
追記
ALSAエラーでAirPlayが急に動作しなくなったので調べてみた
./configure
Configuring Shairport
OpenSSL found
libao found
PulseAudio or its dev package not found
ALSA or its dev package not found
Avahi client or its dev package not found
getopt.h found
dns_sd.h not found
CFLAGS:
LDFLAGS: -lm -lpthread -lssl -lcrypto -lao
Configure successful. You may now build with 'make'
こんな感じでエラーが出てました。
なのでドライバのインストールを実行
sudo apt-get install libasound2-dev
sudo apt-get install libpulse-dev
これでエラーがなくなるはず
追記の追記
なんか急にAirPlayがつながらなくなったので原因を調べてみた
$ ./shairport -a "AirPlay"
Starting Shairport 1.1.1-23-gd65b8e8
FATAL: could not bind any listen sockets!
Shutting down...
こんなエラーが出た。
ポートがlisten状態にできないということらしいので
netstat -lnt
稼働中のインターネット接続 (サーバのみ)
Proto 受信-Q 送信-Q 内部アドレス 外部アドレス 状態
tcp 0 0 0.0.0.0:5002 0.0.0.0:* LISTEN
tcp6 0 0 :::5002 :::* LISTEN
となっていることを確認。5002ポートでshairportは動作しているので、すでにLISTEN状態になっているところにさらに起動しようとしてエラーになっていたみたい。
init.dに登録してある設定を全部削除してデーモンも消したらエラーが解消された。
init.dの登録してあると./shairport -a AirPlayを実行できなさそうなことまでわかった。
init.dに登録してあれば起動時に自動でAirPlayから見えるはずなのに見えないので、スクリプトの解析を行う