測定の方法
SuperpoweredのAudio Latency Test Appを使用している。原理は単純で本体スピーカーから音声を出力し、本体マイクから音声を拾うまでのタイムラグを取得するもの。
TWSやヘッドホンでは十分な音量が取れずにスマートフォンやタブレットのマイクできちんと音を拾えない場合があり、大きなズレが発生してしまうことがあるので数回試行して結果の良いものの数字を掲載している。
ソースはテキストではなくスクリーンショットで取得しているが一枚一枚貼るのは面倒なのでZipファイルでまとめたもののGoogle ドライブへのリンクをページ下部に掲載しておく。
数字の見方
掲載している数字はオーディオ出力の単命令から実際に音声が出力されるまでのレイテンシなので、タッチサンプルレートやディスプレイの応答速度、描画遅延は考慮されていない。半導体製品は製造ばらつき、取っている電圧、温度条件などでも遅延が発生するため、本来はより厳密に条件を合わせた状態で測定することが望ましいものだが、そこまで厳密にやっていないので絶対の数値と取らないで欲しい。
また、実際のオーディオ出力までにはアプリケーション側で音声にエフェクトをかけたり、ミキサーでまとめる必要があるため遅延は更に肥大化する。「Apple製品には音声遅延がない」という言説をネットコミュニティで拝見する場合があるが、iPhoneやiPadであっても普通にスピーカーから音を出すだけで20~30ms台の遅延が発生し、ユースケース次第では数百ms程度の遅延が発生する場合がある。
若干古いが、AV.Watchに掲載されているCRI・ミドルウェアのSonicSYNCの解説記事が分かりやすいと思うので、是非読んでみて欲しい。ここでは深く解説しない。
記事中でGoogleのPixelシリーズで遅延が小さいことに触れられているが、これはバッファサイズ(サンプル数)の影響が大きい。
ちなみに、音は空気中を340m/秒ほどで進む。本来、楽器を鳴らしてから音が耳に届くまでも微細なタイムラグは存在するため、どんなに遅延を極限まで減らしたとしても1~2ms程度の遅延は存在するほうが現実の条件に近いということになる。
AAudioとは
Android 8.0(Oreo)で実装された低レイテンシが要求されるアプリケーション向けのオーディオ API。C++で呼び出すことが出来、つまりNDKで実装されるゲームアプリやシンセサイザーアプリなどで採用されている。
昔に比べればだいぶデベロッパーの認知も進んで使用されるようになってきたが、製作が古かったり、非NDKのアプリでは使用されていない。そういった環境ではやはりAndroid固有の遅延は存在すると言える。
一応、アプリケーションにC++コードが含まれているかはCPU Info (Google Play)のようなアプリで簡単に確認出来る。
USB デジタル オーディオのレイテンシ
基本的にUSB デジタル オーディオは再送を考えず、レート変換を行わないアイソクロナス転送を利用しているため、どのシステムソフトウェア環境でもほとんどレイテンシが発生しません。およそ2.5ms程度がUSB デジタル オーディオのオーバーヘッドであると考えられます。
DACのレイテンシ
デジタル/アナログ変換を行うDACチップもその素性によっては大幅な遅延を発生させます。単純に極めて安価で性能の低いチップも存在しますし、比較的高額な製品でもフィルターを挿入、つまり音の味付けを行った結果遅延が発生してしまうものも存在します。こういったDAC製品をオーディオマニアの方は音の立ち上がりが悪い/歪んでいるとか言うようです。
ラウンドトリップ レイテンシ
Pixel 6a
- 本体スピーカー 67ms
- 本体スピーカー(AAudio) 22ms
- Google USB-C - 3.5 mm アダプター + Final E500(有線イヤホン) AAudio 16ms
- Ecola (ダイソーで購入) USB-C Adapter + Final E500 AAudio 51ms
本体にイヤホンジャックが存在せず、DAC搭載のアダプターが必要となる。アダプター側の素性によっては遅延が相当に増大する。百均などでもDAC搭載アダプターは購入できるのだが、本来はAppleかGoogleの純正アダプターを使用するほうが望ましい。現在はApple純正のUSB-C - 3.5mm アダプターのほうが安価に購入できるはずだ。
Pixel Tablet
- 本体スピーカー 66ms
- スピーカードック 127ms
- 本体スピーカー(AAudio) 22ms
- スピーカードック(AAudio) 27ms
どうも内部的にはUSB ドッキングステーションとして扱われているようだが、スピーカードック接続時には若干遅延が増大する。スピーカードック接続時のみ空間オーディオに対応しており、空間オーディオ再生時はバーチャライザーのデコードのために遅延がさらに増大する可能性もある。
Pixel 5a
- 本体スピーカー(AAudio) 26ms
Pixel 8a
- 本体スピーカー 61ms
- 本体スピーカー(AAudio) 18ms
- Google USB-C - 3.5 mm アダプター + Final E500(有線イヤホン) AAudio 14ms
Pixel 6aやTabletより若干遅延が低減されている。CPUのシングルスレッド性能向上やLPDDR5が5Xに更新されている恩恵と思われる。
AQUOS sense (初代) SH-01K Android 9
- 本体スピーカー 43ms
- 本体スピーカー(AAudio) 40ms
Snapdragon 430にメモリ3GBの超低性能、レガシー端末。バッファサイズ 192、サンプルレート 48000Hz。
on TWS
Pixel Buds Pro (Bestechnic LBRT 左右同時伝送)
- Pixel 6a AAC(AAudio) 312ms
- Pixel Tablet AAC 366ms
- Pixel 8a AAC(AAudio) 312ms
下記、Opusコーデックへの自動切り替えはソフトウェアアップデートで後日提供されたもののためこの計測を行った時点では非対応だった。
Pixel Buds Pro 2 (伝送方式不詳)
- Pixel 8a AAC(AAudio) 366ms
- Pixel 8a AAC 411ms
- Pixel Tablet Opus(AAudio) 179ms
- Pixel Tablet AAC 411ms
Pixel 8aでの接続において初代Pixel Buds Proより遅延が悪化してしまっている。HD オーディオ切り替えスイッチがデバイスの設定から消失しているのだが、Pixel TabletのようなOpus対応デバイスではどうもAAudio利用時、Opusに自動で切り替えている模様。
Opusコーデックは廉価版のaシリーズを除くPixel 6以降のPixel スマートフォンで対応。いわゆる低遅延モードとはまた別の機能として提供されているはず。
Opusコーデック自体は本来、ヘッドトラッキングを活用する空間オーディオを低遅延で実装するためのオプション機能としてAOSPに提供されているもの。
Creative Zen Air Pro (Airoha MCSync 左右同時およびLEAudio 左右独立)
- Pixel 6a + Creative Zen Air Pro AAC接続(AAudio) 231ms
- Pixel Tablet + Creative Zen Air Pro AAC接続(AAudio) 239ms
- Pixel Tablet + Creative Zen Air Pro LC3接続(AAudio) 195ms
- Pixel 8a + Creative Zen Air Pro AAC接続(AAudio) 232ms
- Pixel Tablet + Creative Zen Air Pro LC3接続(AAudio) 160ms
計測が困難なレベルでPixel 8aのハードウェア オフロードが全く安定しないのでソフトウェア オフロードで接続して計測した。
SOUNDPEATS GoFree2 (チップセット不詳) いずれもPixel 6aでの計測
- LDAC(品質優先):495ms
- LDAC(品質優先) + ゲームモード:429ms
- AAC:253ms
- AAC + ゲームモード:201ms
- SBC:216ms
- SBC + ゲームモード:106ms
いずれもAAudioでの計測。
Redmi Buds 5 Pro (Airoha MCSync 左右同時伝送) いずれもPixel 8aでの計測
- LDAC(品質優先):424ms
- AAC:290ms
- SBC:255ms
LC3(LEAudio)接続時にマイクオンになると接続が途切れる不具合があるため、LC3は非計測。ゲームモード非搭載の製品。AAudioのみでの計測。