Raspberry PiをAirPlay化して無線オーディオ

はじめに
こんなこと、やります。
- Raspberry PiでAirPlayサーバー環境構築
- iOSやmacOSの音楽を、AirPlay経由で、ラズパイからオーディオ再生
- Raspberry PiでUSB DACを使う
- Raspberry PiでI2C対応のDACを使う(ハイレゾ対応)
Raspberry PiでAirPlayサーバー環境構築
Raspberry
PiでAirPlayをつかえるように、AirPlayサーバーの環境構築を行なっていきます。
AirPlayサーバーのライブラリshairport-sync
をインストールします。ただし、shairport-sync
は音声のみの対応で映像の再生はできません。
apt-getを最新にしておく
shairport-sync
をインストールする前に、いろいろなライブラリをインストールする必要があります。インストールエラーを防ぐためにも、apt-get
を最新のものにします。
$ sudo apt-get update && sudo apt-get upgrade
依存ライブラリのインストール
shairport-sync
に必要なライブラリを、まとめてインストールします。
$ 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の略で、Linuxでサウンドカードのデバイスドライバを提供するコンポーネントです。
shairport-syncのクローン
shairport-sync
を、Gitを使ってクローンします。
$ git clone https://github.com/mikebrady/shairport-sync.git
shairport-syncのインストール
shairport-sync
ディレクトリが作られますので、そこへ移動し、コンパイルとインストールを行います。
$ 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.confの設定
shairport-sync
ができましたら、shairport-sync.conf
を書き換えてAirPlayサーバーの設定をおこないます。
$ sudo vi /etc/shairport-sync.conf
を実行して、次の内容に書き換えます。
general =
{
name = "AirPi"; // コメントアウトしてAirPlayの名前を決めよう
...
interpolation = "soxr"; // soxrを使うと音質が良くなる、ただしCPU負荷も高くなる
...
Raspberry Piの基板に実装されているオーディオ端子からのサウンド出力になりますが、とりあえずこれで動かしてみます。
shairport-syncをサービスへ登録
shairport-syncをサービスへ登録し、Raspberry Piの起動時に自動でAirPlayサーバーが動くようにします。
$ sudo service shairport-sync start
$ sudo systemctl enable shairport-sync.service
AirPlayで音楽再生
Raspberry
Piを再起動して、iOSやmacOSのデバイスからAirPlayが選択できるようになっていれば成功です。
ここではshairport-sync.conf
で設定した「AirPi」が表示されます。
Raspberry
Piのオーディオ端子にスピーカーなどをつなぎ、音楽が再生できるか確認してみましょう。
もしも音量が小さい場合は、alsamixer
コマンドで音量調整できます。
Raspberry PiでUSB DACを使う
Raspberry Piに搭載されているオーディオ端子からの出力は、音がとても悪いです。おそらくPWMを使ったDA変換で、Raspberry Piの機器のノイズがのってしまうなどが原因かと思われます。そこで、Raspberry PiでUSB DACを使ってみることにします。 USB DACの方が、格段とパワフルでクリアなサウンドになりますのでお試しください。
USB DACを使うための設定
USB DACをRaspberry Piへつなぐ場合、Raspberry Piの設定を少し変える必要があります。
Raspberry PiとUSB DACを接続
まずは、USB DACをRaspberry Piにつないだ状態で、Raspberry Piを再起動します。
オーディオデバイスの確認
つぎに、$ aplay -l
を実行してUSB
DACのオーディオデバイスを確認します。USB Audio
が表示されていれば、Raspberry
PiでUSB DACが認識されてます。
$ aplay -l
**** 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
サウンドの再生
適当なサウンドデータをUSB DACで再生してみましょう。 次のようにして、WAVファイルを再生できます。
$ aplay -D plughw:1,0 hoge.wav
plughw:card番号, Subdevice番号
の形で、USB
DACを指定します。
card 1: Device [USB2.0 Device], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
もしも再生できない場合は、plughw
を
hw
へ書き換えて実行してみてください。
AirPlayでUSB DACの再生
AirPlayサーバーでも、USB
DACから音声が出力されるように設定します。
/etc/shairport-sync.conf
を次のように書き換えます。
alsa =
{
output_device = "plughw:1,0";
...
ちなみに、output_device = "plughw:1,0";
で設定したところ、音飛びしてしまいました。
I2S DACへの変更
その後、ハイレゾまで対応しているこちらのI2S通信のDACを使ってみました。
さいごに
MacやiPhone、iPadなどApple製品が増えたので、1つのモニタースピーカーで聴こうとしたときに、いちいちつなぎなおさなければなりませんでした。
そこで、当初は次のラズパイオーディオ化計画を考えていました。

実際に、Bluetoothレシーバーを使ったり、パッシブミキサーをつくってみたりしました。しかし、どうもシステムが複雑になるばかりで、使い勝手の良さが改善されません。
そんなとき、Raspberry
PiをAirPlayサーバー化できることを知り試してみまし。Apple製品を使う限りでは、これが圧倒的に便利でした。
AirPlayですと、ロスレスでそのまま元のサウンドデータを再生できます。ハイレゾ音源再生し、オシロスコープで確認しましたが、たしかに元の解像度のまま再生されているのを確認できました。