Raspberry Pi 2 に Shairport を入れて AirPlay 端末にしていたんだけど、部屋の模様替えをして iTunes の音楽データを置いている NAS が物理的に遠くなったせいか、再生中の音楽がブツブツと途切れて困っていました。
Shairport は開発が止まっているらしく、その派生バージョンの shairport-sync が良い評判をよく聞くので、 Shairport を止めて shairport-sync に乗り換えました。
- abrasive/shairport: Airtunes emulator! Shairport is no longer maintained.
- mikebrady/shairport-sync: AirPlay audio player. Shairport Sync adds multi-room capability with Audio Synchronisation
いろいろ調べてたら Raspbian の Debian のバージョンは現在は 9.4 で、私の Raspberry Pi 2 は 7.11 だったので、 OS からインストールし直すことにした。
環境
各環境は下記の通りです。
- MacBook Pro (13-inch, 2016, Four Thunderbolt 3 Ports)
- macOS High Sierra
- Raspberry Pi 2 Model B
- Raspbian の Debian version: 9.4
- shairport-sync: 3.2RC5
事前準備
私の MacBook Pro には SD カードスロットが無いので、下記の SD カードリーダーを購入した。
購入時の価格は「900円」(税込)。
OS の選択
前回は無線 LAN の設定を X Window からやりたかったので、デスクトップ版をインストールしたけど、そのためだけに X Window を入れるのも嫌なので、「WITH DESKCTOP」じゃない「RASPBIAN STRETCH LITE」を選択した。(というか、以前は Raspbian は1種類しかなかった気がするけど、変わったのかなぁ。)
SD カードに OS を焼く
前回は RPi-sd card builder っていう Raspbian を SD カードに焼く専用のアプリを使ったけど、 macOS High Sierra では動かなかったので、コマンドで焼くことにした。
ディスクユーティリティ.app で MS-DOS(FAT) 形式でフォーマットして、
下記コマンドでディスクの場所を確認して(私の場合は /dev/disk2
だった)、
$ diskutil list
下記のコマンドで SD カードをアンマウントして、
$ diskutil unmountDisk /dev/disk2
下記コマンドで OS を焼く。
$ sudo dd if=2018-04-18-raspbian-stretch-lite.img of=/dev/rdisk2 bs=1m
参考
Mac OS X で Raspberry PiのOSイメージを焼く – @ledsun blog
初期設定
Raspberry Pi 2 に microSD カード、 USB 無線 LAN トングル、 USB キーボードを刺して、 HDMI ケーブルでモニターと接続して、 microUSB 電源を刺して、電源を入れる。
で、初期設定しようと思ったら、特に初期設定の画面がなかった…。以前はあったんだけどな…。
SSH の有効化
初期状態では SSH が有効になっていないらしいので、有効化する。
$ sudo systemctl start ssh
$ sudo systemctl enable ssh
無線 LAN の設定
下記コマンドで wlan が認識されていることを確認して、
$ ip addr
下記コマンドを実行して、
$ sudo sh -c "wpa_passphrase {ssid} {password} >> /etc/wpa_supplicant/wpa_supplicant.conf"
/etc/wpa_supplicant/wpa_supplicant.conf
から平文で保存されているパスワードを削除して、
$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
#psk="xxxxxx" ← この行を削除
Raspberry Pi を再起動して、
$ sudo reboot
下記コマンドで無線 LAN に IP アドレスが割り振られていることを確認する。
$ ip adder
以降は macOS から SSH 接続して作業をする。
apt-get update 、 apt-get upgrade
この時点で apt-get update と apt-get upgrade を実行しておく。
$ sudo apt-get update
$ sudo apt-get upgrade
avahi-daemon の設定
ssh pi@airpi2.local
というホスト名で SSH 接続できるように avahi-daemon を設定する。
まずホスト名を付ける。
$ sudo vi /etc/hostname
airpi2 # ホスト名はよしなに
/etc/hostsも編集する。
$ sudo vi /etc/hosts
127.0.1.1 airpi2 # /etc/hostnameと同じ名称に変更
そして SSH の avahi サービスを作る。
$ sudo vi /etc/avahi/services/ssh.service
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<!-- This file is part of udisks -->
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_ssh._tcp</type>
<port>22</port>
</service>
</service-group>
ここで Raspbery Pi を再起動する。
$ sudo reboot
MacBook Pro から ssh pi@airpi2.local
で接続できるようになっていれば OK 。
USB オーディオの接続確認
USB オーディオを接続して、 aplay
コマンドを実行して認識されているかを確認する。
(我が家のオーディオ環境は「自宅の仕事中の音楽再生環境、SOUNDSTICKS WIRELESS + Raspberry Pi 2 + AirPlay + HAM-UDAA2 がいい感じ」を参照。 )
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
Subdevices: 7/7
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: Device [USB Audio Device], device 1: USB Audio [USB Audio #1]
Subdevices: 1/1
Subdevice #0: subdevice #0
「USB Audio Device」って書かれているので、 USB オーディオデバイスが認識されている。
card 1, device 0
の情報があとで必要になるので、控えておく。
shairport-sync のインストール
まずはじめに必要なライブラリ(と git )をインストールする。
$ sudo apt-get install git autoconf libdaemon-dev libpopt-dev libconfig-dev libasound2-dev libpulse-dev libavahi-client-dev libssl-dev libsoxr-dev
続いて shairport-syn を clone してビルドしてインストールする。
$ git clone https://github.com/mikebrady/shairport-sync.git
$ cd shairport-sync
$ autoreconf -i -f
$ ./configure --sysconfdir=/etc --with-alsa --with-pa --with-avahi --with-ssl=openssl --with-metadata --with-soxr --with-systemd
$ make && sudo make install
インストール後の shairport-sync フォルダは削除してもいいんだけど、アップデート作業をするかのしれないので、残しておく。
設定は下記の部分を修正した。
$ sudo vi /etc/shairport-sync.conf
general =
{
name = "AirPi2";
interpolation = "soxr";
}
alsa = {
output_device = "hw:1,0";
}
下記コマンドで起動して、
$ sudo systemctl start shairport-sync
下記コマンドで OS 起動時に起動するよう設定する。
$ sudo systemctl enable shairport-sync
soxr
は設定すると音は良くなるけど CPU を結構食うっていう話を聞いてたけど、 top コマンドで見てたら高いときで 15% くらいだったので、 15% くらいで音が良くなるなら音が良くなる方がいいなと思った。
参考
- mikebrady/shairport-sync: AirPlay audio player. Shairport Sync adds multi-room capability with Audio Synchronisation
- Raspberry PiをAirPlayサーバにする – less /var/log/me.log
iTunes から音楽を流す
ここまで設定すると iTunes の再生先に「AirPi2」が出てくる。
しばらく音楽を再生してみたけど、 Shairport のときにあった音飛びがなくていい感じです!