Raspberry Pi をAirPlayサーバーにしてオーディオ環境を快適にする!

/




今回オーディオ環境を快適にするため、Raspberry Pi 3 Model B+をAirPlayサーバーとして設定した。ここではそれまでの手順を説明する。
以前の記事で書いたところまでのラズパイの基本的なセットアップはできているものとする。



shairport-syncのインストール


shairport-syncとはAirPlayサーバーをラズパイ上で実現してくれるプログラムだ。ただし今回のAirPlayサーバーは音声のみを対象としている。

shairport-syncをインストールする前に、色々なライブラリをインストールする必要がある。apt-getを最新のものにしておこう。なぜなら最新にアップデートしておかないとライブラリが見つからなかったりするからだ。
$ sudo apt-get update && sudo apt-get upgrade


有無を言わず必要なライブラリをインストールしていく。
$ sudo apt-get install git autoconf libdaemon-dev libpopt-dev libconfig-dev libasound2-dev libpulse-dev libavahi-client-dev libssl-dev libsoxr-dev

とは言ってもなんだかモヤっとするので、どんなモジュールかかんたんに調べてみた。

ライブラリ名 役割
git gitコマンドを使えるようにする
autoconf configureを自動で生成してくれる
libdaemon-dev 軽量な C ライブラリで、UNIX デーモンを書きやすくしてくれる
libpopt-dev コマンドラインのパラメータによって変数を設定できるようにする
libconfig-dev configファイルの構造をパースして扱いやすくしてくれる
libasound2-dev ALSAアプリケーション開発に必要な共有ライブラリ
libpulse-dev PulseAudio開発に必要なライブラリ
libavahi-client-dev ローカルネットワーク上のサービスやホストを検索可能にする
libssl-dev OpenSSLを使えるようにする
libsoxr-dev リサンプリングして音質を良くしてくれる

* ALSA: Advanced Linux Sound Architecture


準備が整ったところでいよいよshairport-syncをgitでクローンしてくる。
$ 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 をインストールできたところでAirPlayサーバーの設定を済ませよう。管理者権限で/etc/shairport-sync.confファイルを次のように変更する。
general =
{
	name = "AirPi"; // コメントアウトしてAirPlayの名前を決めよう
...
	interpolation = "soxr"; // soxrを使うと音質が良くなる、ただしCPU負荷も高くなる
...


ラズパイの基盤についているオーディオミニ端子からアンプへ繋ぐ場合の設定はこれだけで済む。
それではAirPlayサーバーをスタートさせよう。ラズパイ起動時にも自動でサーバーが起動するようにサービスに登録させておくと便利だ。
$ sudo service shairport-sync start
$ sudo systemctl enable shairport-sync.service


設定がうまくいっていれば手持ちのAppleデバイスでAirPlay(AirPi)を選択できるようになっているはず。


何かうまくいかなかった時はラズパイの再起動を試そう。状況が好転することが多々ある。
またラズパイからの音量が小さい場合は alsamixer コマンドで音量設定を変えることができる。


USB DACからの再生


ラズパイ搭載のオーディオミニ出力は音が悪いようだ。アナログ出力の部分で機器のノイズを受けやすいからだろう。そこでUSB DACから音楽再生できるように設定をしてみた。
USB DACをラズパイに繋いだら、一度ラズパイを再起動する。私の場合は再起動しないとUSB DACがリストに表示されなかったからだ。

$ aplay -l コマンドでオーディオデバイスを確認すると次のようにUSB Audioが確認できる。

**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
  Subdevices: 6/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 IEC958/HDMI [bcm2835 IEC958/HDMI]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: ALSA [bcm2835 ALSA], device 2: bcm2835 IEC958/HDMI1 [bcm2835 IEC958/HDMI1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Device [USB2.0 Device], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0


この状態で何か音声データを鳴らしてみよう。たとえばこのように。
$ aplay -D plughw:1,0 hoge.wav

無事、音が鳴っただろうか?
環境によってはplughwではなくhwにすると良いかもしれない。
番号は$ aplay -lで得られた情報を元に plughw:card番号, Subdevice番号 としている。

さて、AirPlayでもUSB DACから出力されて欲しいので再び /etc/shairport-sync.conf ファイルを書き換える。

alsa =
{
	output_device = "plughw:1,0"; // "hw:1,0"にすると音飛びしてしまう
...

hwを使うと音飛びしてしまったが、plughwとすると問題なくUSB DACで再生できるようになった。
そしてUSB DACにしたらラズパイのオーディオ出力よりもあきらかにタイトでパワフルでクリアなサウンドになった...USB DAC侮れない。


最後に


そもそもこのプロジェクトはMacやiPhone、iPadの音を1つのモニタースピーカーで聴こうとしたとき、接続切り替えなどが面倒なのでなんとか簡単にならないかと考え出したのがきっかけだ。

当初は次のようなシステムを構築するつもだった。


Bluetoothレシーバーをデュアルで繋いだり、パッシブミキサーで実験してみたり、ラインセレクターを考案してみたりと色々試したり考えたりした。


しかしシステムは複雑になるばかりでどうも納得できるものではなかった。そんなときラズパイをAirPlayサーバーにできることを知り、これだと思って取り掛かったのがこのプロジェクトだ。Apple製品を使う限りではこの上なく便利でシンプルなシステムが構築できたと思う。それにAirPlayならBluetoothとは違いロスレスで音声を送ることができる。何よりもコードレスになったことの快適さと言ったら!私の場合、机に足をかけリクライニング状態でMacBookを操作することが多いのでコードレスの恩恵はとても大きいのだ!



参考サイト


* shairport-sync
* 【快適】Raspberry Pi 3 でつくるAirPlayサーバ【オーディオ】
* shairport-sync installation for a Raspberry Pi
* ラズベリーパイにUSBスピーカーを接続して音を出す超簡単な方法(Raspbian Stretch Jessie GUI編)
* Raspberry Piでオーディオデバイスが期待通りに動作しなかったときに確認したnつのこと
* Raspberry Piにshairport-syncをインストールする
* Raspberry pi で Amazon Prime Music が使いたい – 音飛び対策編
* OpenBSD発の音声フレームワーク - sndio


関連記事


* Raspberry Pi のセットアップ!モニター、キーボードなしでMacからSSH
* I2C通信でADコンバータの値を読み込む (Raspberry Pi zero)
* Raspberry Pi をAirPlayサーバーにしてオーディオ環境を快適にする!
* ラズパイオーディオシステムの省エネ化
* スピーカーエンクロージャー製作 (ALTEC 604-8H)
* ヘルムホルツ共鳴とバスレフポート設計