Raspberry PiをAirPlayサーバにする

Raspberry PiにShairport Syncをインストールした時のメモ。 AirPlayはBluetoothのようにペアリングが必要なく家に帰ってきてWifiに接続するだけでワイアレスでスマホから音楽をかけられるのでたいへん便利。

Shairportには色々な派生バージョンがあるけど、評判のいいShairport Syncをチョイス。 長いので以下Shairportと書くことにする。

Shairport Syncのインストール

基本的にはREADME.mdの通り。

必要なパッケージのインストール

sudo apt-get install libshairport2 autoconf libtool libdaemon-dev libasound2-dev libpopt-dev libconfig-dev avahi-daemon libavahi-client-dev libssl-dev libsoxr-dev

libsoxr-dev(The SoX Resampler)は音を良くする(?)ためのライブラリ。あってもなくても良いけど使うとCPU負荷が高くなるらしい。

ビルド

git clone https://github.com/mikebrady/shairport-sync.git
cd shairport-sync
autoreconf -i -f
./configure --with-alsa --with-avahi --with-ssl=openssl --with-metadata --with-systemd
make

SoXを使いたい人は./configureのオプションに --with-soxr を付け加える。

ユーザーの追加

Shairport用のユーザーを追加する必要があるらしいのでユーザーとグループを追加。

sudo getent group shairport-sync &>/dev/null || sudo groupadd -r shairport-sync >/dev/null
sudo getent passwd shairport-sync &> /dev/null || sudo useradd -r -M -g shairport-sync -s /usr/bin/nologin -G audio shairport-sync >/dev/null

インストール

sudo make install

設定

/etc/shairport-sync.confが設定ファイル。

general = {
  name = "%H";

nameを変更するとAirPlayサーバーの表示名が変わる。お好みで変えると良いです。

USBから音声を出力する

デフォルトだと3.5mmのジャックから音声が出力されるけど音はあまりよくないのでUSBに繋いだDACから音を出すことにする。 DACを繋いでから

aplay -l

無事認識されてればcard 0以外のデバイスが表示される。

pi@raspberrypi:~ $ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
  Subdevices: 8/8
  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
  Subdevice #7: subdevice #7
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: CODEC [USB Audio CODEC], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

上の例だとcard 1のSubdevice #0がUSBDAC。 このcard と Subdeviceの番号を覚えとく。

/etc/shairport-sync.confの中に

alsa = {
  output_device = "default";

とあるのでdefaultをhw:1,0と変える。数字は上で出てきたもの。

systemctl start shairport-sync

でShairport起動。

AirPlay出力先の設定

LAN内にAirPlayサーバーがある状態でコントロールセンター(名前合ってたっけ?)を開くとボリュームの下に見慣れない物がある。 設定がうまくいってればタップして出力先にAirPlayサーバーを選択できるはず。 後はテキトーに音楽を流してスピーカーから音が出れば終了です。お疲れ様でした。

ちなみにShairport "Sync"というだけあって映像と音楽の同期を取ってくれるのでYoutubeとか見てもちゃんと音ズレせずに再生される。すごい