このページでは、入力レイテンシと出力レイテンシを測定する一般的な方法について説明します。
出力レイテンシを測定する
出力レイテンシを測定する場合、以下で説明するとおり、精度や実行の容易さに応じてさまざまな方法があります。なお、テスト環境のサンプルについては、テスト回路を参照してください。
LED とオシロスコープのテスト
このテストでは、デバイスの LED インジケーターに関連するレイテンシを測定します。本番環境デバイスに LED がない場合は、プロトタイプのフォーム ファクタ デバイスに LED をインストールします。プロトタイプ デバイスの回路が露出している場合、精度をさらに向上させるには 1 つのオシロスコープ プローブを直接 LED に接続して、光センサーのレイテンシを回避します。
本番環境デバイスおよびプロトタイプ デバイスに LED をインストールできない場合は、次の回避策をお試しください。
- 汎用入出力(GPIO)ピンを同じ目的で使用する。
- JTAG または別のデバッグ ポートを使用する。
- 画面のバックライトを使用する。バックライトにも無視できないレイテンシがあるため、遅延の読み取りが不正確になるリスクがあります。
このテストは、次の手順で実施します。
- 音声の出力と同時に定期的に LED を点滅させるアプリを実行します。
注: 有用な結果を得るには、テストアプリで正しい API を使用し、高速なオーディオ出力パスを実行することが重要です。レイテンシ短縮のための設計をご覧ください。
- LED の隣に光センサーを配置します。
- デュアルチャンネル オシロスコープのプローブを有線ヘッドフォン ジャック(ライン出力)と光センサーに接続します。
- オシロスコープを使用して、ライン出力信号と光センサー信号のレイテンシを測定します。
時間の差は、LED のレイテンシと光センサーのレイテンシがどちらもゼロであると仮定した場合の、おおよそのオーディオ出力レイテンシです。通常、LED と光センサーはそれぞれ 1 ミリ秒以下の比較的低いレイテンシを持ち、この遅延は無視できます。
ラウンドトリップ レイテンシを測定する
ラウンドトリップ レイテンシとは、出力レイテンシと入力レイテンシの合計値です。
ラーセンテスト
最も簡単なレイテンシ テストとして、音声フィードバック(ラーセン効果)テストがあります。このテストでは、インパルスの応答ループのタイミングを調整することで、出力と入力の合計レイテンシのおおよその値を得ることができます。このテストはその性質上、詳細な分析には不向きですが、他のテストの較正や、上限値を設定する場合に有効です。
この方法では、コンポーネントの時間が分割されません。これは、出力レイテンシと入力レイテンシが独立している場合に重要となります。したがって、この方法は出力レイテンシまたは入力レイテンシの正確な値を別々に測定する場合には推奨されませんが、概算値を計測する際に有用な場合があります。
デバイス上のスピーカーへの出力レイテンシは、ヘッドセット コネクタへの出力レイテンシよりも大幅に大きくなることがあります。これは、スピーカーの補正と保護によるものです。
このテストは、次の手順で実施します。
- マイクから音声をキャプチャし、キャプチャしたデータを即座にスピーカーで再生するアプリを実行します。
- マイクで鉛筆をたたくなど、外部で音を発生させます。このノイズによりフィードバック ループが発生します。あるいは、ソフトウェアを使用してループにインパルスを挿入することも可能です。
- 出力レイテンシ、入力レイテンシ、アプリでのオーバーヘッドの合計値を求めるため、フィードバック パルス間の時間を測定する。
Larsen テスト用のアプリを入手するためのリソースの一部を以下に掲載します。
- Dr. Rick O'Rang ループバック アプリは、音声フィードバック テスト用の Android アプリです。Google Play からアプリをダウンロードするか、GitHub からソースコードを取得できます。
-
また、slesTestFeedback.cpp に実装例を公開しています。このアプリはコマンドライン アプリであり、プラットフォーム ビルド環境を使用してビルドされていますが、他の環境にコードを応用するのは難しくありません。また、
audio_utils
ライブラリにある非ブロック FIFO コードが必要です。
音声ループバック ドングル
Dr. Rick O'Rang 音声ループバック ドングルは、ヘッドセット コネクタでのラウンドトリップ レイテンシを測定する際に有用です。下の画像は、ループにインパルスを 1 回挿入し、フィードバック ループを発生させた際の結果を示しています。振動の周期がラウンドトリップ レイテンシです。特定のデバイス、ソフトウェア リリース、テスト条件を指定するものではありません。ここに表示された結果は挿入しないようにしてください。
![ラウンドトリップの測定](https://source.android.google.cn/static/docs/core/audio/images/round_trip.png?authuser=4&hl=ja)
図 1. ラウンドトリップの測定
ノイズを軽減するために USB ケーブルを取り外し、音量レベルを調整して、安定した発振が得られるようにする必要がある場合があります。
入力レイテンシを測定する
入力レイテンシは、出力レイテンシよりも測定が困難ですが、次のテストが有用である可能性があります。
1 つのアプローチとしては、最初に LED とオシロスコープを使用した方法で出力レイテンシを判定し、次に音声フィードバック(Larsen)テストを用いて出力レイテンシと入力レイテンシの合計値を判定します。これら 2 つの測定値の差異が入力レイテンシになります。
ほかにも、プロトタイプ デバイスで GPIO ピンを使用するという方法があります。デバイスに外部から音声信号を送るのと同時に GPIO 入力のパルスを発信します。GPIO 信号と音声データが到着するまでの時間差を比較するアプリを実行します。
レイテンシを短縮する
音声レイテンシを低減するには、スケジューリング、割り込み処理、電源管理、デバイス ドライバといった設計にシステム全体で特別な注意を払うようにします。目標としては、SCHED_FIFO
音声スレッドがプラットフォームの任意の箇所において数ミリ秒を超える時間ブロックされないようにします。こうした体系的なアプローチによって、音声レイテンシを削減しつつ、予測可能な全体パフォーマンスという副次的なメリットを得ることができます。
オーディオ アンダーランが実際に発生した場合は、多くの場合に特定の条件下でのみ、または切り替え時にのみ検出可能です。新たなアプリを起動し、さまざまなディスプレイをすばやくスクロールして、システムに負荷がかかるようにします。ただし、一部のテスト条件では設計目標を超えるほどの大きな負荷が発生しないことに注意してください。大きな負荷がかかるため、このような場合はアンダーランが許容される場合があります。
アンダーランをテストする場合:
- DSP はアプリ プロセッサの後に構成して、レイテンシを最小限に抑えます。
- 画面のオン / オフ、USB のオン / オフ、WiFi のオン / オフ、Bluetooth のオン / オフ、テレフォニーとデータ無線のオン / オフなど、さまざまな条件下でテストを実行します。
- アンダーランの発生がわかりやすい、聞き慣れた比較的静かな音楽を選択します。
- 感度を上げるため、有線ヘッドフォンを使用します。
- 「耳の疲れ」を感じないように、休憩を取るようにします。
アンダーランの根本的な原因を見つけた場合は、その部分のバッファ数とサイズを減らします。バッファの数とサイズを削減してからアンダーランを分析し、アンダーランの原因を修正するというアプローチは、効率的ではありません。
ツール
systrace
は、システムレベルのパフォーマンス グリッチを診断するための優れた汎用ツールです。
なお、dumpsys media.audio_flinger
の出力には「単純移動統計」と呼ばれる有用なセクションも含まれています。これには、各音声ミックスおよび I/O サイクルの経時的な変動性に関する概要が含まれています。すべての時間測定値が平均サイクルまたは公称サイクル時間とほぼ等しくなるのが理想的です。最小値が非常に低い場合、あるいは最大値が非常に高い場合、問題の兆候を示している可能性があります。スケジューリングの待ち時間が長いか、割り込みが無効になっているおそれがあります。+/- 3 の標準偏差を超える変動が強調される出力の末尾部分は、判別を行ううえで特に有用です。