サイトロゴ

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

著者画像
Toshihiko Arai

はじめに

こんなこと、やります。

  • 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

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

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

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

関連記事