Raspberry Pi 2 に Shairport を入れて AirPlay 端末にしていたんだけど、部屋の模様替えをして iTunes の音楽データを置いている NAS が物理的に遠くなったせいか、再生中の音楽がブツブツと途切れて困っていました。

Shairport は開発が止まっているらしく、その派生バージョンの shairport-sync が良い評判をよく聞くので、 Shairport を止めて shairport-sync に乗り換えました。

いろいろ調べてたら 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% くらいで音が良くなるなら音が良くなる方がいいなと思った。

参考

iTunes から音楽を流す

ここまで設定すると iTunes の再生先に「AirPi2」が出てくる。

しばらく音楽を再生してみたけど、 Shairport のときにあった音飛びがなくていい感じです!