#041
posted on 2021.05.18

Shairport Syncを使ってAirPlayでiPhoneの音声をMacBookで受信して出力。

iPhoneで再生している音声をAirPlayで飛ばしてMacBook Proに繋いでいるスピーカーから出力したかったので、オープンソースのAirPlayオーディオプレイヤーのShairport Syncを使った設定方法のメモ。

 

Shairport SyncのGitHubのドキュメント

 

macOS High Sierra バージョン 10.13.6
Homebrew 3.1.7
Shairport Sync version 3.3.8 で確認。

 

  1. Homebrew(パッケージマネージャー)でShairport Syncをインストール。
  2. shairport-sync.confを編集して初期設定。
  3. Shairport Syncを起動してAirPlayでiPhoneからMacBookへの音声出力を確認。
  4. Shairport Syncをバックグラウンド起動・終了するシェルスクリプトをAutomatorで作成。

 

Shairport Syncをインストール

ターミナルで、macOS(またはLinux)用のパッケージマネージャーのHomebrewを使ってShairport SyncをMacにインストールする。

 

Homebrewのインストール

Shairport Syncをインストールするために、まずHomebrewをインストールする。

Homebrewの公式サイトのトップにあるHomebrewインストール用のシェルスクリプトをコピーしてターミナルでコマンドを実行し、Homebrewをインストールする。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

すでにインストールしてある場合は念のためにHomebrew本体を最新バージョンにアップデートする。

brew update

 

Shairport Syncのインストール

インストールしたHomebrewのbrewコマンドでShairport Syncをインストールする。

brew install shairport-sync

インストールが完了するとMac内「/usr/local/Cellar/shairport-sync/3.3.8/bin/shairport-sync」に実行ファイルが作成される。

※ Shairport Syncのバージョンアップは「brew upgrade shairport-sync」、再インストール(アンインストールしてインストールされる)は「brew reinstall shairport-sync」、アンインストールは「brew uninstall shairport-sync」、バージョン確認は「shairport-sync -V」。

 

Shairport Syncコマンド

ターミナルでShairport Syncコマンドのマニュアルを確認する。

man shairport-sync

Shairport Syncのヘルプを確認する。

shairport-sync -h

 

 

Shairport Syncの初期設定

Shairport Syncを起動する前に、「/usr/local/etc/shairport-sync/shairport-sync.conf」ファイルの内容を編集して初期設定をする。

全ての設定項目がエスケープされているので、必要な項目のみエスケープを外して内容を変更する。

※ 詳細はヘルプ「shairport-sync -h」で確認する。

 

音声出力システムの変更

「output_backend = “alsa”;」の行を編集。

設定できるのは、「pa」、「ao」、「pipe」、「stdout」。

初期設定は「pa」で、PulseAudioというサウンドサーバーが使われるが、音声がほとんど正常には出力できなかったので「ao」(ALSA)に変更。

output_backend = "ao";

※ 初期設定「pa」(PulseAudio)のままでShairport Syncを起動して、「W: [] caps.c: Normally all extra capabilities would be dropped now, but that’s impossible because PulseAudio was built without capabilities support.」というエラーが出る場合は、ターミナルで「brew services start pulseaudio」を実行してpulseaudioを起動してからShairport Syncを起動(再起動)する。

 

表示名の変更

「name = “%H”;」の行を編集。

初期設定のままだと、送信デバイス側のAirPlay設定画面にMacのHostnameで表示されるので任意の名前に変更する。

name = "My MacBook";

 

AirPlay接続時にパスワードを設定

「password = “secret”;」の行を編集。

設定をしない場合は同一LAN内から誰でも接続できるので、必要があれば任意の文字列でパスワードの設定をする。

password = "airpass";

 

音質を変更

「interpolation = “auto”;」の行を編集。

設定できるのは「basic」か「soxr」(SoX resampler)。(パケットデータのサンプリング方法の設定?)

初期設定のままでは音がブツブツと途切れたので「soxr」に変更。マニュアルによると、「soxr」はCUP負荷が大きいので「basic」よりもかなりのマシンパワーが要求される。

interpolation = "soxr";

 

入力音量を100%に変更

「ignore_volume_control = “no”;」の行を編集。

初期設定「no」では送信デバイス側の音量調節が有効、「yes」では送信デバイス側の設定音量に依らず常に100%の音量で送信されてくる。

AirPlay接続の度にiPhone側での音量調整が面倒なので「yes」にしてMac側だけで音量調節する。

ignore_volume_control = "yes";

 

接続切り替えの設定

「allow_session_interruption = “no”;」の行を編集。

「yes」の設定だと、既にデバイスと接続中でも、別のデバイスからの接続を受け入れて切り替える。

allow_session_interruption = "yes";

 

 

Shairport Syncを起動して動作確認

「shairport-sync.conf」ファイルを編集保存したら、shairport-syncコマンドでShairport Syncを起動する。

shairport-sync

(バックグラウンドで起動する場合は、オプションを指定した「shairport-sync -d」のdaemonモードで起動する。)

 

「shairport-sync.conf」ファイルの「name」で設定した名前のデバイスをiPhoneのAirPlayで選んで接続。

iPhoneで何か音楽を再生して、MacBookから音声が出力されるかを確認する。

※ おそらく仕様上、スペックに依らず2〜3秒の遅延が発生する。

 

 

Shairport Syncの起動・終了をAutomatorで管理

毎回ターミナルで実行して起動・終了させるのは面倒なので、Automatorでシェルスクリプトの実行を自動化。

コマンドのオプションを指定してShairport Syncを起動するスクリプトを記述する。「-d」はdaemonモードで起動、「-k」はkillのオプション。

  1. Automatorを起動。
  2. 「新規書類」 > 「アプリケーション」を選択。
  3. 左カラムの「ライブラリ」 > 「ユーティリティ」 > 「シェルスクリプトを実行」を右カラムにドラッグ。
  4. スクリプト入力エリアに「/usr/local/Cellar/shairport-sync/3.3.8/bin/shairport-sync -d」と入力して、起動用の名前を付けて保存。
  5. Automatorのメニューの「ファイル」 > 「複製」で、スクリプトを「/usr/local/Cellar/shairport-sync/3.3.8/bin/shairport-sync -k」に変更して、終了用の名前を付けて保存。

※ 「shairport-sync」の実行ファイルのパスは環境によっては異なる。スクリプト入力エリアに「shairport-sync」の実行ファイルをドラッグするか、キーボードの「option」キーを押しながらファイルを右クリックメニューの「”shairport-sync”のパス名をコピー」で取得できる。

 

起動は「-d」オプションで保存したAutomatorのファイル、終了は「-k」オプションで保存したAutomatorのファイルをダブルクリックするだけで自動的に実行される。

 

 

 

この記事をシェア