iPod touchとノートPC(ubuntu)の音声出力をワイヤレスにできたら便利かも?ということで挑戦したので作業ログまとめ。
たぶんいらないパッケージとかいろいろ入ってるので次回セットアップする機会があれば綺麗にするかもしれない。。。
RaspberryPiにshairportやPulseAudioを導入する記事は探せば出てくるのだが、両方を入れてるものがなくてかなり苦戦した。
ALSAとPulseAudioの関係も知らなかったし。。。
注意
このエントリは途中から試行錯誤しすぎて作業メモを取らずにあとから予想で書いている部分があります。
これで足りるのか、もしくは不要なものがあるのかが微妙な状態です。
インストール
本家含めいろいろあるので省略。
今回はGUIあり、OCあり、言語は英語のままで。
IPアドレスを固定IPに。
$ sudo vi /etc/network/interfaces
auto lo
iface lo inet loopback
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.0.xx
netmask 255.255.255.0
gateway 192.168.0.1
#allow-hotplug wlan0
#iface wlan0 inet manual
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
#iface default inet dhcp
DNSも書き換え。
$ sudo vi /etc/resolv.conf
nameserver 192.168.0.1
ufwを導入して設定する。
$ sudo apt-get install ufw
$ sudo ufw default DENY
$ sudo ufw enable
$ sudo ufw app list
$ sudo ufw allow OpenSSH
$ sudo ufw allow 4713/tcp
~略~
で、結果こんな感じに。
$ sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
5353/udp ALLOW Anywhere
4713/tcp ALLOW Anywhere
5002/tcp ALLOW Anywhere
Bonjour ALLOW Anywhere
6000/udp ALLOW Anywhere
6001/udp ALLOW Anywhere
6002/udp ALLOW Anywhere
6003/udp ALLOW Anywhere
6004/udp ALLOW Anywhere
6005/udp ALLOW Anywhere
今回はUSB-DACを接続するので、本体のステレオミニジャックは不要。
読み込んでいるカーネルモジュールをコメントアウトする。
$ sudo vim /etc/modules
#snd-bcm2835
オーディオ設定
PulseAudioをインストールして設定に2行ほど追加する。
$ sudo apt-get install alsa pulseaudio pulseaudio-module-zeroconf avahi-utils git libao-dev libssl-dev libcrypt-openssl-rsa-perl libio-socket-inet6-perl libwww-perl alsa-utils alsa-tools-gui pulseaudio-module-bluetooth pulseaudio-module-gconf pulseaudio-utils mplayer
$ sudo aptitude install libao-dev libssl-dev libcrypt-openssl-rsa-perl libio-socket-inet6-perl libwww-perl avahi-utils
$ sudo vim /etc/pulse/default.pa
load-module module-native-protocol-tcp auth-anonymous=1
load-module module-zeroconf-publish
あと、後述のshairportはALSAをたたくのでPulseAudioとオーディオデバイスの取り合いになってしまう。
ALSAを直接たたくアプリケーションの出力をPulseAudioのミキサーに接続する。
$ vim ~/.asoundrc
pcm.pluse {
type pulse
}
ctl.pulse {
type pulse
}
$ vim /etc/asound.conf
pcm.!default {
type pulse
# If defaults.namehint.showall is set to off in alsa.conf, then this is
# necessary to make this pcm show up in the list returned by
# snd_device_name_hint or aplay -L
hint.description "Default Audio Device"
}
ctl.!default {
type pulse
}
shairport
基本的に以下URLそのままだったはず。
http://d.hatena.ne.jp/sakurai_youhei/20110903/1315034986
$ sudo apt-get install git
$ sudo apt-get install build-essential
$ sudo apt-get install libssl-dev libcrypt-openssl-rsa-perl libao-dev libio-socket-inet6-perl libwww-perl avahi-utils pkg-config
$ git clone https://github.com/albertz/shairport.git
$ curl -LOk http://xrl.us/cpanm
$ chmod +x cpanm
$ sudo ./cpanm Net::SDP
$ git clone https://github.com/albertz/shairport.git
どうやらIPv6での接続を試みたりしてしまうので、socketlib.c上のIPv6に関するあたりをコメントアウト。
--- socketlib.c 2013-02-10 22:20:18.068302338 +0900
+++ /home/pi/shairport/socketlib.c 2013-01-13 02:45:41.411870109 +0900
@@ -159,7 +159,7 @@
int tFamily = AF_INET;
#ifdef AF_INET6
//printf("Listening on IPv6 Socket\n");
- tFamily = AF_INET6;
+ //tFamily = AF_INET6;
#else
//printf("Listening on IPv4 Socket");
#endif
で、コンパイル。
$ make
$ make install
実際に動かして、iPod touchで試してみる。
$ perl shairport.pl -a test --ao_devicename=pulse -v
実際にノートPCからも出力してみる。
$ pacmd load-module module-tunnel-sink server=192.168.0.xx
shairportを起動時から動かす
shairport自体にもそのためにいろいろ書いてあったんだけど、rootはPulseAudioのグループに入れてないので音が出せない。。。
ということでユーザをpiとしてshairportを起動することにした。
/etc/rc.localに以下の行を追記する。
su - pi -c 'shairport.pl -d -a RaspberryPi'
まとめ
もっとエントリを綺麗にしてから載せるべきなのはわかってるんだけど、整形の時間がとれないからといって寝かせておくのが嫌だった。
RaspberryPi環境自体をもう一度作りなおすつもりなので、その時に修正するつもり。。。