【快適】Raspberry Pi 3 でつくるAirPlayサーバ【オーディオ】

#スマホから AirPlay をするために Raspberry Pi 3 を AirPlay 端末化していく。
オーディオサーバにするためにOSイメージから用意しなくても、ネットワーク上のスピーカとして使えるようにしたい。
![22_1.jpg](https://qiita-image-store.s3.amazonaws.com/0/285932/24cd119b-4b89-1d21-7545-f9739b7df4cb.jpeg)

##「ラズパイ Airplay」とググるとよく出てくる方法なのが Shairport 

[Raspberry Pi 2 に Shairport を入れて AirPlay 端末にする。](https://dounokouno.com/2014/03/02/raspberry-pi-airplay02/)

しかし、現在 Shairport は開発が止まっているらしく、その派生バージョンの shairport-sync が評判なので、 今回は shairport-sync を使うことに。
環境（Raspbianインストール後）

OSや無線LAN等の初期設定は割愛いたします。
作業は全てSSHで他のマシンからでも可能。
Macのターミナルなどから接続。（ Windows からは Teraterm 等から接続

```
ssh pi@192.168.*.*
```



piはRaspbianのユーザー名、@以下はそのローカルIPアドレスです。

ShairportSyncのインストール

まずはじめに必要なライブラリ（と git ）をインストールする。
GitHubを参考に、ソースコードをダウンロードしてmakeしインストールします。つまりアプリケーションのようなパッケージではありません。ちょっと分かりにくいですが、部品をダウンロードして部品を組み上げてから完成させるという形です。

ひとつずつ実行しても良いですが、ここはまとめて指定。

```
$ 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 nano /etc/shairport-sync.conf
```

すると、長い（ほとんどコメントアウトされている）設定ファイルが表示される。
設定ファイルは次のように編集した。

```/etc/shairport-sync.conf
general =
{
 name = "AirPi";    //AirPlayサーバの名前（任意）
 interpolation = "soxr";
}
```

デフォのbasicに比べて、soxr は設定すると音は良くなるけど CPU を結構食うっていう話を聞いてたけど、 top コマンドで見てたら高いときで 15% くらいだったので、 15% くらいで音が良くなるなら音が良くなる方がいいなと思い、今回はsoxrを選択。

##USBから音声を出力する

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

```
$ 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 0以外のデバイスが表示される。

上の例だとcard 1のSubdevice #0がUSBDAC。　
このcard と Subdeviceの番号をメモしておく。

```/etc/shairport-sync.conf
alsa = {
 output_device = "default";
```

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

```
$ sudo systemctl start shairport-sync
```

でShairport起動。

下記コマンドで OS 起動時に起動するよう設定する。

```
$ sudo systemctl enable shairport-sync
```

##AirPlay出力先の設定

LAN内にAirPlayサーバーがある状態でコントロールセンター(名前合ってたっけ？)を開く
<img width="375" alt="IMG_4418.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/285932/5803f052-7588-ed0a-6f00-cf880d153d87.png">


設定がうまくいってればタップして出力先にAirPlayサーバーを選択できるはず。 後はテキトーに音楽を流してスピーカーから音が出れば終了です。お疲れ様でした。

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

##参考資料

[Raspberry Pi を AirPlay 端末にするまでの手順のメモ（ shairport-sync 編）](https://dounokouno.com/2018/05/05/raspberry-pi-airplay-shairport-sync/)
[Raspberry PiをAirPlayサーバにする](http://pu2x.hatenablog.com/entry/2016/10/04/073529)
[AirPlayを設定する（Raspberry Pi で作るミュージックシステム）](https://raspida.com/shairport-sync)