#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)に変更。(「pipe」、「stdout」に関しては未使用なので詳細不明。)

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を起動(再起動)する。(そもそもpulseaudioが無い場合はインストールするか別の設定を選択する。)

 

表示名の変更

「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";

 

遅延の補正

「audio_backend_latency_offset_in_seconds = 0.0;」の行を編集。

「-1.75」〜「1.75」秒の間で設定できるレイテンシーの補正。(バッファリング量の調整?)

体感で4秒くらいの遅延が発生していたので限界までマイナス補正。(1秒あるかないか程度まで遅延が緩和したが、おそらくバッファリングが間に合わないためにブツブツ鳴るときがごく稀にある。)

※ 設定可能範囲外の数値を設定すると、未設定のときと同じだったり、エラーで起動しなくなったりする。

audio_backend_latency_offset_in_seconds = "-1.75";

 

接続デバイス切り替えの設定

「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から音声が出力されるかを確認する。

 

 

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

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

 

Automatorで設定

「Shairport Syncを起動・終了するシュルスクリプト」をAutomatorでアプリケーションとして保存する。

(「-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」実行ファイルのパスは、環境やバージョンで異なるので要確認。

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

 

起動と終了

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

 

 

この記事をシェア
この記事のURL

https://memo.ag2works.tokyo/post-1766/

コピー
この記事のタイトル

Shairport Syncを使ってAirPlayでiPhoneの音声をMacBookで受信して出力。 | memo メモ [AG2WORKS]

コピー
この記事のリンクタグ

<a href="https://memo.ag2works.tokyo/post-1766/" target="_blank" rel="noopener">Shairport Syncを使ってAirPlayでiPhoneの音声をMacBookで受信して出力。 | memo メモ [AG2WORKS]</a>

コピー
※ フィールドをクリックでコピーするテキストの編集ができます。

この記事へのコメント

コメントの書き込みはまだありません。

  • コメント内のタグはエスケープ処理され、文字列として出力されます。
  • セキュリティーのため、投稿者のIPアドレスは取得されます。
  • 管理者が内容を不適切と判断したコメントは削除されます。
  • このフォームにはスパム対策として、Googleの提供するreCAPTCHAシステムが導入されています。
    (Google Privacy Policy and Terms of Service.)