ラズパイのAirPlay化

自宅のオーディオ環境を快適にするため、Raspberry Piをオーディオサーバー化してみた。具体的にはラズパイでAirPlayを使えるようにし、iPhoneやMacからWiFi経由で音楽を流せるようにしていく。実際やってみたところ、すごく快適で便利になったのでその設定方法を記録として残しておく。

shairport-syncのインストール

shairport-sync とは、なんとAppleの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 を開き、次のように変更する。ラズパイの基板に付いているオーディオミニ端子からラインアウトする場合はこれだけOK。

general =
{
	name = "AirPi"; // コメントアウトしてAirPlayの名前を決めよう
...
	interpolation = "soxr"; // soxrを使うと音質が良くなる、ただしCPU負荷も高くなる
...

ラズパイ起動時に自動でAirPlayサーバーが動くようにしたいので、次のようにサービスに登録させておいた。

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

iPhoneでAirPiの表示
iPhoneでAirPiの表示

ラズパイを再起動して、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

無事、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だろうとあなどれない。

後にさらなる高みを目指すため?、ハイレゾまで対応しているI2S通信のDACを試してみた。正直、DACによる音質の違いまでは分からなかった。

I2S [IIS] 入力DAC PCM5102A搭載
I2S [IIS] 入力DAC PCM5102A搭載

32bit 384kHz DAC完成基板 Raspberry Pi 動作OK。DAC内部のデジタルフィルター演算方式変更スイッチを搭載。

AmazonRakuten

ちなみに、ハイレゾはオシロミュージックで大活躍する。オシロミュージックの音声を、オシロスコープのXYモードで再現できるか試してみた。この時、低いサンプリング周波数のDACを使っていたとので、細部の表現がつぶれてしまっている。もっとサンプリング周波数をあげれば、オリジナル動画と同じキレイなアニメーションが表示されるはず。

アンプ選び

100dB以上ある能率の大きなスピーカーを使っているので、1Wのデジタルアンプでも室内なら十分な音量で鳴らせる。1Wのアンプなら、電池駆動も余裕でできたり。

スピーカー・DAC・ラズパイ
スピーカー・DAC・ラズパイ

スピーカー製作の記事はこちら

音響実験のために、オシレーターアプリを作ってみたので宜しければどうぞ(無料です)。

波動 - Hysteric Oscillator 音響実験

オシロスコープのように波形が表示されるオシレーター!フィルター・トレモロ・ビブラート内臓

Download on theApp Store

先ほどのオシレーターアプリでLRの両方からサイン派を出し、オシロスコープでリサージュ図形に歪みがないか確認したりできる。

オシロスコープでリサージュ図
オシロスコープでリサージュ図

1Wのデジタルアンプでは流石に低音が物足りなく感じたので、10Wのデジタルアンプを試してみた。チップはYAMAHAのYDA-138-Eで、1000円台で買える台湾製のデジタルアンプ。

YDA138-Eデジタルオーディオアンプボード
YDA138-Eデジタルオーディオアンプボード

10W + 10Wデュアルチャンネルアンプボード、DC電源9-13.5Vで動作可能。

AmazonRakuten

安くても侮るなかれ。部品の1つ1つが驚くほどしっかりしていて、とても1000円台とは思えない。スパンッ!スパンッ!と立ち上がりが早い感じの音で、デジタルアンプならではの低音の伸びを感じられた。

ラズパイ・デジタルアンプ・I2S-DAC・バッテリー
ラズパイ・デジタルアンプ・I2S-DAC・バッテリー

最後に

ラズパイオーディオ案1
ラズパイオーディオ案1

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

Bluetoothレシーバーをデュアルで繋いだり、パッシブミキサーで実験してみたり、ラインセレクターを考えたりと色々やってみた。しかしシステムは複雑になるばかりでどうも納得できるものではなかった。そんなとき、ラズパイをAirPlayサーバーにできると知り、これだと思って取り掛かったのがこのプロジェクトだ。

ラズパイオーディオ案2
ラズパイオーディオ案2

Apple製品を使う限りではこの上なく便利でシンプルなシステムが構築できたと思う。それにAirPlayならBluetoothとは違いロスレスでサウンドデータを送れる。そして何よりもコードレスになって、ノートPCの移動が快適になった。

この記事で扱った関連製品

YDA138-Eデジタルオーディオアンプボード
YDA138-Eデジタルオーディオアンプボード

10W + 10Wデュアルチャンネルアンプボード、DC電源9-13.5Vで動作可能。

AmazonRakuten
I2S [IIS] 入力DAC PCM5102A搭載
I2S [IIS] 入力DAC PCM5102A搭載

32bit 384kHz DAC完成基板 Raspberry Pi 動作OK。DAC内部のデジタルフィルター演算方式変更スイッチを搭載。

AmazonRakuten
Raspberry Pi Zero W - ヘッダー ハンダ付け済み - ラズベリー・パイ ゼロ W ワイヤレス
Raspberry Pi Zero W - ヘッダー ハンダ付け済み - ラズベリー・パイ ゼロ W ワイヤレス

AmazonRakuten
正規代理店商品 Raspberry Pi 4 Model B (8GB) made in UK element14製 技適マーク入
正規代理店商品 Raspberry Pi 4 Model B (8GB) made in UK element14製 技適マーク入

AmazonRakuten

こんな商品も人気です!

10 インチRaspberry Pi用タッチモニター EleDuino HDMI モバイルディスプレイ 2021最新版 ゲームモニターIPS液晶パネル 1366x768薄い 軽量、自立,USB Type-C標準 HDMI/スピーカー搭載
10 インチRaspberry Pi用タッチモニター EleDuino HDMI モバイルディスプレイ 2021最新版 ゲームモニターIPS液晶パネル 1366x768薄い 軽量、自立,USB Type-C標準 HDMI/スピーカー搭載

AmazonRakuten
Raspberry Pi4 Model B DIYメタルケース/ラズベリーパイ4 モデルB ケース/アルミニウム金属ケース/ファンレス/放熱シート付き/ブラック
Raspberry Pi4 Model B DIYメタルケース/ラズベリーパイ4 モデルB ケース/アルミニウム金属ケース/ファンレス/放熱シート付き/ブラック

ラズベリーパイ4用メタルケース スタイリッシュで堅牢なメタルボディ ケーズ全体がヒートシンクの高い放熱性能 アルミ製のファンレスケーズボディー シンプルでコンパクトなモノクローム

AmazonRakuten
Miuzei 最新Raspberry Pi 4 ケース ラスベリー パイ 4 ケース+ 5V 3A 電源Micro USB-C アダプター 冷却ファン+ヒートシンク Raspberry Pi 4 Model B対応
Miuzei 最新Raspberry Pi 4 ケース ラスベリー パイ 4 ケース+ 5V 3A 電源Micro USB-C アダプター 冷却ファン+ヒートシンク Raspberry Pi 4 Model B対応

AmazonRakuten
Freenove Raspberry Pi 4 B 3 B+ 400用の究極のスターターキット、434ページの詳細なチュートリアル、Python C Javaコード、223アイテム、57プロジェクト、無はんだブレッドボード
Freenove Raspberry Pi 4 B 3 B+ 400用の究極のスターターキット、434ページの詳細なチュートリアル、Python C Javaコード、223アイテム、57プロジェクト、無はんだブレッドボード

Amazon

Raspberry Piの参考書

Raspberry Piクックブック 第3版 (Make:PROJECTS)
Raspberry Piクックブック 第3版 (Make:PROJECTS)

本書は、登場以来多くのユーザーの支持を集め続けているマイコンボード「Raspberry Pi」を使いこなすための267本のレシピ集です。 ハードウェアの基本、オペレーティングシステムの使い方、ネットワーク接続、Pythonプログラミングの基本から、高度なPythonプログラミング、GPIO(汎用入出力)、モーター、センサー、ディスプレイ、コンピュータービジョン、Arduinoとの連携まで、幅広いニーズに応えます。

AmazonRakuten
ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作 作る、動かす、しくみがわかる! (ブルーバックス)
ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作 作る、動かす、しくみがわかる! (ブルーバックス)

2016年7月の刊行以来、入門者向けの丁寧な解説が「親切すぎる!」と大好評の『カラー図解 最新 Raspberry Piで学ぶ電子工作』が、Raspberry Pi 4に対応した内容でリニューアル! 電子工作の超初歩的な演習である「Lチカ」(LEDライトをチカチカと点灯させる)から、温度センサ、モーター、液晶ディスプレイなどの超定番パーツを用いる演習、スマホやタブレットとラズパイを連携させた応用演習を通して、ラズパイを使った電子工作を基礎からきっちりと学べます。

KindleAmazonRakuten
Raspberry Pi ZeroによるIoT入門- Zero W 対応
Raspberry Pi ZeroによるIoT入門- Zero W 対応

本書は、大人から子供まで、初心者の方でも、ラズパイZeroとラズパイZero WをIoTのデバイスとして使いこなせるようになることを目的とした入門書です。また、ラズパイZeroとラズパイZero WをUSBケーブル1本でパソコンに接続できる便利な「Zero over USB」について、日本で初めて詳しく解説しました。

AmazonRakuten

Amazonでお得に購入するなら、Amazonギフト券がオススメ!

\Amazonギフトがお得/

コンビニ・ATM・ネットバンキングで¥5,000以上チャージすると、プライム会員は最大2.5%ポイント、通常会員は最大2%ポイントがもらえます!
Amazonギフト券

\この記事をシェアする/

関連コンテンツ