ラズパイのAirPlay化

 

こんなこと、やります。

  • ラズパイでAirPlayサーバー環境構築
  • iOSやmacOSの音楽を、AirPlay経由で、ラズパイからオーディオ再生
  • ラズパイでUSB DACを使う
  • ラズパイでI2C対応のDACを使う(ハイレゾ対応)

ラズパイでAirPlayオーディオ環境
ラズパイでAirPlayオーディオ環境

ラズパイでAirPlayサーバー環境構築

ラズパイで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負荷も高くなる
...

ラズパイの基板に実装されているオーディオ端子からのサウンド出力になりますが、とりあえずこれで動かしてみます。

shairport-syncをサービスへ登録

shairport-syncをサービスへ登録し、ラズパイ起動時に自動でAirPlayサーバーが動くようにしておきます。

$ sudo service shairport-sync start
$ sudo systemctl enable shairport-sync.service

AirPlayで音楽再生

ラズパイを再起動して、iOSやmacOSのデバイスからAirPlayが選択できるようになっていれば成功です。

ここではshairport-sync.confで設定した「AirPi」が表示されます。

![iPhoneでAirPiの表示](dialog-airplay.jpg)

ラズパイのオーディオ端子にスピーカーなどをつなぎ、音楽が再生できるか確認してみましょう。

もしも音量が小さい場合は、alsamixerコマンドで音量調整できます。

ラズパイでUSB DACを使う

ラズパイに搭載されているオーディオ端子からの出力は、音がとても悪いです。おそらくPWMを使ったDA変換で、ラズパイの機器のノイズがのってしまうなどが原因かと思われます。そこで、ラズパイでUSB DACを使ってみることにします。

USB DACの方が、格段とパワフルでクリアなサウンドになりますのでお試しください。

USB DACを使うための設定

USB DACをラズパイへつなぐ場合、ラズパイの設定を少し変える必要があります。

ラズパイとUSB DACを接続

まずは、USB DACをラズパイにつないだ状態で、ラズパイを再起動します。

オーディオデバイスの確認

つぎに、$ aplay -lを実行してUSB DACのオーディオデバイスを確認します。USB Audioが表示されていれば、ラズパイで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

もしも再生できない場合は、plughwhw へ書き換えて実行してみてください。

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レシーバーを使ったり、パッシブミキサーをつくってみたりしました。しかし、どうもシステムが複雑になるばかりで、使い勝手の良さが改善されません。

そんなとき、ラズパイをAirPlayサーバー化できることを知り試してみまし。Apple製品を使う限りでは、これが圧倒的に便利でした。

ラズパイのAirPlay化、オーディオ環境構築
ラズパイのAirPlay化、オーディオ環境構築

AirPlayですと、ロスレスでそのまま元のサウンドデータを再生できます。ハイレゾ音源再生し、オシロスコープで確認しましたが、たしかに元の解像度のまま再生されているのを確認できました。

記事に関するご質問などがあればTwitterへお返事ください。
この記事で紹介した商品
人気のラズパイ
人気のラズパイ周辺機器
Raspberry Piのオススメ入門書
関連記事