0
0

More than 1 year has passed since last update.

Mac の 「オーディオ再生」を判定する or 検知する (OSコマンド)

Last updated at Posted at 2022-05-03

ご紹介するトピック

macOS の OSコマンドで、以下2点を行うコマンドの使い方です。

  1. Macでオーディオ出力中を判定する
  2. Macでオーディオ再生の 「開始」 / 「停止」 を監視する

ほとんどのMacBookユーザーが検討するであろう Amphetamine を使用していますが、細かいところで満足できなくなり、蓋を閉じた時の挙動を制御することを検討中です。 MacBookの蓋を閉じた時、音楽などを再生中ならスリープせず、再生が終わればスリープする。そんな事をしたくて調べています。

環境

  • MacBook Pro 2019
  • macOS Monterey 12.2.1

1. Macでオーディオ出力中を判定する

sample.sh
#!/bin/bash
pmset -g | grep -e "sleep" | grep -e "coreaudiod"
# 行が見つかればオーディオ再生中

説明

  • 現時点で オーディオ出力しているか否か を判定します。
  • pmset コマンドは、macOSの電源管理設定コマンド。
  • -g オプションで現在の電源関連の設定値を出力します。
  • コマンド出力に「スリープ」に関する設定が含まれており、スリープ防止プロセスの名前が付記されています。
  • スリープ防止プロセスに「coreaudiod」が含まれていると、「出力中」という事になります。
  • オーディオ出力を止めれば、上記から「coreaudiod」は消えます。
    ※ スリープ防止と言っても、MacBookの蓋を閉じた時のスリープには効きません。

補足

  • 判定できるオーディオ出力の音源は何でも良さそうです。 音を出していれば。
    ミュージック.appでの音楽再生、ブラウザでの動画再生、他の機器(iPhone等)からAirPlay経由で受信した音源の再生など判定できました。
  • オーディオの出力先も何でも良さそうです。本体のスピーカー、Bluetoothスピーカー、AirPlayの再生先でも判定できました。

その他

  • オーディオ出力をミュートした場合は 「出力していない」 扱いになります。 (個人的にはその方が良い)
  • 再生は即時反映されますが、出力停止の反映は、数秒かかります。

2. Macでオーディオ再生の 「開始」 / 「停止」 を監視

sample.sh
log stream --style compact \
| grep --line-buffered -e "CoreAudio" \
| grep --line-buffered -e "::StartIO" -e "::StopIO"

説明

  • 音を出すプロセスからの 出力開始 / 出力停止 リクエストを拾うコマンド使用法です。
  • log stream は、macOS の システムログを tail -f のように、待ち受け表示します。
  • システムログには、coreaudiod のイベントが頻繁に書き込まれています。
  • その中にオーディオ出力の 「開始」 / 「停止」 のイベントが含まれており、それを拾います。
  • grep は、抽出結果をバッファリングするので --line-buffered をつけます。

注意点

  • 厳密には、coreaudiod が、音を出すプロセスからの StartIO / StopIO リクエストを受け付けた/処理したイベントを拾っているだけ、オーディオ出力の有無を総合的に判断できるわけではありません。
  • OSの通知音(ポーン等)でも StartIO / StopIO が発生します。
  • 音楽の再生などでは、曲と曲の切れ目でも StopIO / StartIO が発生します。
  • つまり、音楽再生など、イメージしているオーディオ出力以外にも、時報読み上げ、通知音、何かの警告音など、細かいことに反応する事が想定されます。
  • ちょっと敏感で使えないかも。

近いうちに、活用編を投稿したいものです。。。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0