Amazonのアソシエイトとして、ラズパイダ(raspida.com)は適格販売により収入を得ています。詳しくは当サイトの プライバシーポリシーをご覧ください。
ラズパイでAirPlay2を実現するためには、Shairport SyncとNQPTPをインストールします。古い環境(AirPlay1)ではNQPTPは必要ありませんでした。ここではAirPlay2の導入方法です。
ビルドインストールしないとならないため少し分かりにくいですよね。(make make install)
手順に従って実行して、エラーメッセージが出たらよく読んで進めていきます。ラズパイやOS、出力先によっても異なりますので注意してください。
iPhoneのミュージックアプリからAirPlay2を経由して、Pi 5に繋いだモニターのスピーカーから出力する例です。
PipWireとPulseAudio
ちょっと複雑でなかなか理解が進みません。
Raspberry Pi OSも他のLinuxシステム同様に、PulseAudioまたはPipeWireがサウンドサーバーとしてインストールされています。PipWireに移行する途中?という感じです。
これが厄介で、GUIの環境だとShairport Syncに問題を引き起こします。
逆にRaspberry Pi OS LiteなどはGUIもPulseAudioもシステムにありません。PulseAudioがない環境が望ましいとのこと。詳しくは次のサイトに書いてあります。
GitHub
shairport-sync/ADVANCED TOPICS/PulseAudioAndPipeWire.md at master · mikebrady/shairport-sync AirPlay and AirPlay 2 audio player. Contribute to mikebrady/shairport-sync development by creating an account on GitHub.
AirPlay2(shairport-sync)のサポート
AirPlay2は主にAppleの製品と接続できます。
iOS搭載デバイス(iPhone、iPad)
macOS 10.15 (Catalina) 以降
HomePod mini
Apple TV
メタデータ
ミュージックソース
WindowsのiTunes
リモートコントロール用
10.15(Catalina)より前のmacOS
複数のインスタンスを同じシステムでホストできない
メタデータとミュージック以外は受信できない
shairport-sync/AIRPLAY2.md at master · mikebrady/shairport-sync
やり直すには
既にshairport-syncをビルドインストールしてしまった場合は、実行ファイルとサービスファイルを削除してから再度ビルドインストールしましょう。間に一旦再起動を挟みます。
Raspberry Pi OSの例:
/usr/local/bin/shairport-sync/lib/systemd/system/shairport-sync.service
古いサービスファイルの削除
古いAirPlay1をインストールしたことが無ければ、恐らく無いと思います。もしインストールしたことがある場合は既にあるshairport-syncを削除します。
which shairport-sync
複数表示されたらすべて削除しておきます。
仮に/usr/local/bin/shairport-syncを削除するコマンド。
sudo rm /usr/local/bin/shairport-sync
/etc/systemd/system/shairport-sync.service/etc/systemd/user/shairport-sync.service/lib/systemd/system/shairport-sync.service/lib/systemd/user/shairport-sync.service/etc/init.d/shairport-sync
記事執筆時点のRaspberry Pi OS bookwormだと、/lib/systemd/system/shairport-sync.serviceにあると思います。これも削除しておきます。無ければ構いません。
削除した場合は一旦再起動します。
必要なライブラリ類のインストール
ここからがインストールです。
shairport-syncとNQPTPをビルドインストールするのに必要なライブラリやツールソフトをインストールしておきます。
いわゆる依存関係に必要なファイルです。
sudo apt update
sudo apt upgrade
sudo apt install --no-install-recommends build-essential git autoconf automake libtool \
libpopt-dev libconfig-dev libasound2-dev avahi-daemon libavahi-client-dev libssl-dev libsoxr-dev \
libplist-dev libsodium-dev libavutil-dev libavcodec-dev libavformat-dev uuid-dev libgcrypt-dev xxd
■Pi 5は8GBモデルがオススメ
Shairport Syncのビルドインストール
configureで使うフラグオプションの-with-alsa(alsaへの出力)と、--with-pa(PulseAudioオーディオバックエンド)で、--sysconfdir=/etcは設定ファイルはetcの中がデフォルトというフラグオプションです。
他のフラグや詳しくは以下のURLで確認してください。
shairport-sync/CONFIGURATION FLAGS.md at master · mikebrady/shairport-sync
パターンとして2つ。
1つは通常通り、ビルドインストールしたサービスを有効にして使用するパターン。もう1つは、サービスは動作させず、GUIで直接起動するパターンです。
パターン1
一般的なLinuxでは以下のようにサービスとしてシステムのデーモンとして実行させます。
エラーが出たり、Raspberry Pi OS GUI版の場合などはパターン2を試してみてください。
cd ~
git clone https://github.com/mikebrady/shairport-sync.git
cd shairport-sync
autoreconf -fi
./configure --sysconfdir=/etc --with-alsa \
--with-soxr --with-avahi --with-ssl=openssl --with-systemd --with-airplay-2 --with-pa
make
sudo make install
サービスの有効化。
sudo systemctl enable shairport-sync
これは通常通りのビルドインストールです。
shairport-sync/BUILD.md at master · mikebrady/shairport-sync
パターン2
Raspberry Pi 5で試しているビルドインストールと設定をもう1つのパターンとして載せておきます。これで上手く行きました。
ケースバイケースですが、エラーで困ったら、こちらのパターンも試してみてください。
エラーの例
sudo systemctl status shairport-sync
Failed to create secure directory (/home/shairport-sync/.config/pulse): No such file or directory
fatal error: could not establish a service on port 7000 -- program terminating. Is another instance of Shairport Sync running on this device?
または、音が出ない。
パターン1と違うのは、直接-with-alsa(alsaへの出力)と--with-pa(PulseAudioオーディオバックエンド)を使わず、PipWireのバックエンドとして使う方法です。
更に、デーモンとして実行せず、GUIで自動起動からshairport-syncを起動させます。
PipeWireの実験的なサポートがあります。必要なライブリを先にインストールします。
sudo apt install libpipewire-0.3-dev
configureのフラグを変更したビルドインストールコマンド。
cd ~
git clone https://github.com/mikebrady/shairport-sync.git
cd shairport-sync
autoreconf -fi
./configure --sysconfdir=/etc --with-pw \
--with-soxr --with-avahi --with-ssl=openssl --with-systemd --with-airplay-2
make
sudo make install
--with-paを外し、-with-alsaを-with-pwへ変更したものです。
この場合、ビルドインストールした後、shairport-sync.confにターゲットデバイス名を直接指定します。
ターゲットデバイス名は、次のコマンドで見つけられるでしょう。(pactl list sources sinks shortまたはpactl list sourcesから探す)
pactl list sources sinks short
217 alsa_output.platform-107c701400.hdmi.hdmi-stereo PipeWire s32le 2ch 48000Hz RUNNING
この例では、HDMIで繋がっているモニターのスピーカーなので"alsa_output.platform-107c701400.hdmi.hdmi-stereo"ですね。
conf内のsink_targetに入力します。
sudo nano /etc/shairport-sync.conf
confファイルの真ん中辺りにあるpw =にあるsink_targetです。
// Parameters for the "pw" PipeWire backend.
// For this section to be operative, Shairport Sync must be built with the following configuration fla>
// --with-pw
pw =
{
application_name = "Shairport Sync"; // Set this to the name that should appear in the Sounds >
node_name = "Shairport Sync"; // This appears in some PipeWire CLI tool outputs.
sink_target = "ターゲットデバイス名"; // Leave this commented out >
};
行頭のコメントアウト(//)を外し、sink_targetに出力先のデバイス名に置き換えます。
pwはPipWireのバックエンドなので、そこから直接alsa_から始まる出力先へ渡すためです。
サービスは無効のまま
この場合は、サービスは無効のままで使います。その代わり、起動時にshairport-syncを起動させることになります。
Raspberry Pi OS bookwormの~/.config/wayfire.iniへ自動起動を記述する。
sudo nano ~/.config/wayfire.ini
[autostart]
shairport = /usr/local/bin/shairport-sync
サービスはdisableのままということになります。(enableやstartはしない)
sudo systemctl status shairport-sync.service
○ shairport-sync.service - Shairport Sync - AirPlay Audio Receiver
Loaded: loaded (/lib/systemd/system/shairport-sync.service; disabled; preset: enabled)
Active: inactive (dead)
この方法はdockerなどでも有効なようです。
今後、PipWireの開発が進めば1つにまとまるかも知れません。記事執筆時点での対処法です。
参考:
理由など:
shairport-sync/ADVANCED TOPICS/PulseAudioAndPipeWire.md at development · mikebrady/shairport-sync
他のコマンド
インストールが完了したらバージョンを確認してみます。
shairport-sync -V
4.3.3-AirPlay2-smi10-OpenSSL-Avahi-ALSA-pa-soxr-sysconfdir:/etc
受信中は次のコマンドでオーディオ情報が返ってきます。
shairport-sync --statistics
NQPTPのビルドインストール
今のAirPlay2はNQPTPというクロック同期管理に使われるツールが必要です。ビルドインストールはgithubに公開されている手順に従います。
GitHub - mikebrady/nqptp: Not Quite PTP
cd ~
git clone https://github.com/mikebrady/nqptp.git
cd nqptp
autoreconf -fi
./configure --with-systemd-startup
make
sudo make install
そしてサービスを有効化して再起動しておきます。
sudo systemctl enable nqptp
sudo systemctl start nqptp
サービスでエラーがないか確認する。
sudo systemctl status nqptp
sudo systemctl status shairport-sync.service
NQPTPアプリは、ポート319/UDPと320/UDPへアクセスが必要です。PTPサービスデーモンをはじめ、同じポートを使用する他のユーザーと共存できない排他利用です。
もしもファイアーウォールで閉じているなら該当のポートを開けてください。
PTP ( Precision Time Protocol )はクロック同期に使用されるプロトコルです。NTPと連携した時刻設定が有名です。GPSレシーバーを使った記事で用語として知りました。
PTPプロトコル
Wi-Fiの省電力をオフ
Wi-Fiの省電力状態へ移行すると、AirPlayのリストに出なくなることが予想されるのでパワーセーブをオフにしておきます。
Raspberry Pi OS bookwormの場合は以下。
sudo iw dev wlan0 set power_save off
iPhoneなどから確認
iPhoneでミュージックアプリの出力先をPi5にインストールしたshairport-syncへ変更して確認する。画像の場合はホスト名がPi5nvmeになっています。

Pi 5のHDMIのスピーカーから聞こえたら成功です。
HDMIのスピーカーなので接続しているモニターが点いていないと鳴りません。
ラズパイでAirPlay
AirPlay2(shairport-sync)は、Raspberry Pi 2またはPi Zero 2以上のパワーを持つシステムに対応しているため、現行で手に入るモデルなら問題ありません。
AirPlayには1と2があるので、ちょっと混乱しますね。




