見出し画像

[macOS用]BlackHoleの遅延性能を計測してみた

はじめに

この記事について。前半はBlackHoleに関する概要の紹介。後半がメインとなる遅延性能を計測した内容になります。BlackHoleについて熟知されている方は後半からお読みください。

BlackHoleについて

BlackHoleはGPL-3.0で公開されているmacOS用のオープンソースソフトウェアです。配布元では下記のように紹介されています。

BlackHole is a modern macOS virtual audio driver that allows applications to pass audio to other applications with zero additional latency.
(翻訳)「BlackHoleは遅延を加えることなく(ゼロレイテンシー)、アプリケーションから他のアプリケーションへ音を渡すことができるmacOS用のモダンな仮想オーディオドライバーです」

他のmacOS用の仮想オーディオドライバーであるSoundflowerと同様の機能を実行することが可能です。
特徴は最新のmacOS Catalina に対応しているだけでなく、「モダンな」と紹介されているように、最新のmacOSに最適化されたツールで非常に高い性能を持ちます。

インストール方法

インストーラーを使う方法とbrew(macOS用のCLIを使ったパッケージ管理)を使う方法があります。CLIに不慣れな方は通常のアプリと同じようにインストーラーを使ったインストールを推奨します。

[GitHubのBlackHoleのリポジトリ]

[BlackHoleのインストーラーがダウンロードできるサイト]

上記のサイトでメールアドレスと指名を登録するとダウンロードリンクが記載されたメールが送られてきます。

Soundflowerからの乗り換え

これまでSoundflowerを使っていた方はBlackHoleに乗り換えるためにアンインストールを推奨します。手順に明記されている訳ではないですが、理由は2つ。

1つは、CoreAudio上に表示されるデバイス数を減らすため。もう1つは一度BlackHoleを使うとSoundflowerに戻る理由は特にないため。

過去にSoundflowerをインストールしてアンインストール方法を忘れた人のために、アンインストール方法を記載しておきます(自分もどうやってインストールしたか覚えていないくらいだったので)。

Soundflower アンインストール方法

1. 下記のサイトからインストーラーをダウンロード(Soundflower-2.0b2.dmg)

2. インストーラーを開き、「Uninstall Soundflower.scpt」をダブルクリック
3. 下記のようなウィンドウが開くので「Run the Script」を実行。Result欄に"Done!"が表示されたら完了

画像1

4. 再起動してCoreAudioのデバイス一覧にSoundflowerが表示されないことを確認

遅延の計測方法

ここから記事の後半。遅延性能計測の内容について解説していきます。

遅延性能を計測した構成は下記の図になります。

画像2

macOSの中で実行しているのはAudacityのみです。BlackHoleはドライバーとして動作するため。テストサウンドの再生と録音をAudacityを使っています。

[Audacity]:クロスプラットフォームのオーディオ用ソフトウェア。BlackHoleと同様のオープンソースソフトウェア。
https://www.audacityteam.org

今回行った性能の計測方法は、Audacityのオンラインマニュアルに「Latency Test」として公開されています。
https://manual.audacityteam.org/man/latency_test.html

計測に使用したテストサウンドはAudacityのリズムトラックを使って作成しました。テンポを秒速と同じBPM:60に。音色を電子音(短)を指定。それ以外はデフォルトで16少節分(64秒)の長さで作成。

画像4

作成したテストサウンド(図の上段)を再生しながら、空のトラック(図の下段)に録音を行います。

画像5

この計測を行うにあたり、1点だけAudacityの設定を変更しています。環境設定内の「バッファーサイズ」と「レイテンシー補償」です。

スクリーンショット 2020-04-19 18.19.24

レイテンシー補償についてはマニュアルにも計測時はゼロにするよう指定がありますが、バッファーサイズはそのままにするよう記載されています。
本来バッファーはその名の通り、ソフトウェア処理に余裕を持たせるために使いますが、今回はソフトウェアの性能そのものを計測したいためこの余裕分が余計になります。そのため今回のテストではバッファーサイズもゼロとしました。
(注意点)バッファーがないため録音終了時点でドロップアウトが発生したとの警告が出ます。ただし、音が出ていない無音部分で発生した場合は影響がないですし、全体を通した遅延は一定しているので今回のテストでは無視することとしました。

画像6

計測結果

計測結果は2つ。BlackHoleのサンプリング周波数を最低の44.1kHzと最高の192kHzの2パターンで計測しました。

波形をサンプル単位で見えるまで拡大し、44.1kHzの場合は1/44,100秒単位、192kHzの場合は1/192,000秒単位で波形の先頭を探しだし、その間隔がどれくらいの値なのかを調べます。
結果は下記の通り。

[44.1kHzの場合]
42サンプル
秒に変換: 42/44,100 → 約0.952 msec

[192kHzの場合]
174サンプル
秒に変換: 174/192,000 → 約0.906 msec

結果は実行したサンプリング周波数によって異なりますが、いずれも1msec以下(1/1000秒以下)となりました。サンプリング周波数が高い方が遅延が少ないことも分かりました。

この結果が固有環境でのものなのかどうかを知るために、異なる環境で同じバージョンのBlackHokleとAudacityを導入し、同様のテストを実行しました。
結果は全く同じ遅延性能となりました。

【テスト端末1】
MacBook Pro (13-inch, 2017, Two Thunderbolt 3 ports): macOS Catalina(v 10.15.4)

[44.1kHz]

画像7

[192kHz]

画像8

【テスト端末2】
MacBook Pro (13-inch, Mid 2010): macOS High Siera(v 10.13.6)

[44.1kHz]

スクリーンショット 2020-04-10 1.03.47

[192kHz]

スクリーンショット 2020-04-10 0.58.37

まとめ

BlackHoleは非常に優秀は遅延性能を持つ、macOS用の仮想オーディオドライバーであることが分かりました。
また、BlackHoleを入力して出力されているにも関わらずその遅延が1msec以下とほぼ無視できるほどの値であり、ゼロレイテンシーを掲げるに相応しい性能です。
もしかするとこの遅延自体、BlackHoleと関係ない部分の遅延の可能性もあります。OSネイティブな機能と言ってもいいくらいかもしれません。
テスト中も音が出なかったりノイズが乗ったりということもなく、安定性の面でも非常に優秀だと思います。

macOSでのライブ配信やキャプチャーなどの利用場面で非常に活躍するツールですので、ガシガシ使っていきましょう!
可能であればOSSへのコントリビュートもお忘れなく。

(参考)過去のツイート


この記事が気に入ったらサポートをしてみませんか?