2016年8月1日
Androidの10ms問題?解決しました! : Superpowered Media Serverの紹介
(2016-6-10)by Gabor Szanto
本記事は、原著者の許諾のもとに翻訳・掲載しております。
私たちはとても人気のあるシリーズ記事の中で、 Androidのオーディオアーキテクチャ問題を説明しました 。どんなカテゴリのアプリも、粗悪で評判の悪いプラットフォームで作ってほしくないからです。そして、 Android M(Marshmallow)の最近の進歩 の記事では、新たな発見を更新し、最近では AndroidのUSBオーディオとMIDI解決法 の記事も発表しました。これにより、オーディオアプリのプロのクリエーターにデバイス11億台規模の市場を開放したこととなりました。
私たちが行ってきた、4238種類以上のAndroidモデル/ビルドの、テストと技術分析と オーディオレイテンシ測定データベース により、「Androidの往復オーディオレイテンシ問題の解決のため、Googleは大きな進歩を生んできた」ということを示しました。しかし、抜本的な変化がない限り、現在のメディアサーバ内部が劇的に改良される様子はないので、この進歩は今、スローダウンしているように思えます。今のところ、オーディオレイテンシに関して、Android Nには進展はないようです。
私たちの元には世界中から毎日のように、Androidオーディオの10ms問題を解決してほしいと、開発者たちから懇願のメールが送られてきますが、ついに、Androidオーディオの10ms問題を解決し、 今すぐにでも それをダウンロードし試せるようになったことを、自信を持ってここに宣言いたします。
注釈:
タイトル:Androidの10ms問題?
8msにまで改善しました
Superpowered Android 6.0 Marshmallowを実行したGoogle Nexus 9における実際のレイテンシデータ
この画像を埋め込みたい場合は、以下のコードをコピーしてください。
<a href="http://superpowered.com/superpowered-android-media-server"><img src="http://bit.ly/24Fg1Km" alt="Android Media Server" title="Android Media Server Audio Path Latency" /></a><br />Learn more about <a href="http://superpowered.com/superpowered-android-media-server">Android's 10 Millisecond Problem and Solution</a>.
目次
- Androidの10ms問題? 8msにまで改善しました
- よくある誤解
- Android向けのSuperpowered Media Server
- 技術面の議論
- どのように機能するか
- デモをインストール
- よくある質問
往復オーディオレイテンシの低さの定義とAndroidのベンチマーク
往復オーディオレイテンシの低さを示すための、有用な定義は以下の通りです。
+オーディオインプット(時間)
+オーディオプロセッシング(時間)
+オーディオアウトプット(時間)
=10ms以下
人がアプリを自然に夢中になれると感じるには、インタラクションのレンテンシが10ms以下である必要があります。たとえ、あと数ms増えても、リスナーやアプリのユーザに不快感を与えてしまいます(理由までは分かりませんが、そういうふうに感じてしまうのです)。ここで知っておきたいのは、2007年にiPhoneが登場して、iOSはずっと低レイテンシを保っていることです。
2016年6月現在で、公式に発表されている ベスト なAndroidのオーディオレイテンシは以下の数値になっています。
モデル | Androidバージョン | バッファサイズ(フレーム) | 往復レイテンシ(ms) |
---|---|---|---|
Nexus 9 | 6.0.0 (MRA58K) | 128 | 15 |
Nexus 6P | 6.0.0 (MDA89D) | 192 | 18 |
よくある誤解
なぜAndroidは低レイテンシでないかという疑問に関して、一番よくある誤解は、以下の3つに集中しています。
ハードウェアに問題がある
Linuxオーディオに問題がある
ALSAドライバだからである
私たちの研究開発によると、上記3つにはそれぞれに小さな問題は存在するものの、前述の問題は解決できず決定的な解決法とは言えません。Superpowered Incの公式見解では、これら3つに関しては完全に許容できる範囲としています。
根本的には、Androidオーディオスタックが、基本的なアーキテクチャの問題を抱えているのです。Android誕生時の技術的な決め事から発生したものになります。これは、GoogleがAndroidを買収する前からの話です。
Androidオーディオの10ms以下問題:Android向けのSuperpowered Media Server
Android向けのSuperpowered Media Serverと一体化したAndroidと、今までのAndroidの違いを比べるには、3つのオーディオパスでオーディオレイテンシを測定します。
- 内蔵スピーカーから内蔵マイク。これは”普通”の使い方。
- ヘッドフォンジャックにつないだオーディオアウトプットと内蔵マイク。これでAndroidデバイスとつながったヘッドセットとなる。
- オーディオループバックのドングル。ヘッドフォンジャックにつなげたドングルで、オーディオのインとアウトに同時に送信する。
オーディオパス | Superpoweredなし | Superpoweredあり |
---|---|---|
内蔵スピーカーから内蔵マイク | 32ms | 24ms |
ヘッドフォンジャックにつないだオーディオアウトプットと内蔵マイク | 15ms | 9ms |
オーディオループバックのドングル | 15ms | 9ms |
Huawei Nexus 6Pの往復オーディオレイテンシ
オーディオパス | Superpoweredなし | Superpoweredあり |
---|---|---|
内蔵スピーカーから内蔵マイク | 25ms | 19ms |
ヘッドフォンジャックにつないだオーディオアウトプットと内蔵マイク | 14ms | 8ms |
オーディオループバックのドングル | 14ms | 8ms |
HTC Nexus9の往復オーディオレイテンシ
技術面の議論
Android向けのSuperpowered Media ServerはAndroid HAL(オーディオドライバを扱う)とAndroidメディアサーバ(オーディオを扱うシステムコンポーネント)との間に挿入しています。
これでアプリケーションはAndroidメディアサーバを回避することができるようになり、アプリに以下のような利益をもたらしています。
- 往復レイテンシが大幅に短縮。
- CPUの負荷が減るので電池の持ちが良くなる(今のAndroidオーディオスタックは小さなバッファサイズに対してCPUのコストが高すぎる)。
- “プル”アーキテクチャのおかげで安定性が向上する(ドロップアウトは少ない)。
Superpowered Media Serverはオーディオシステムのルーティングやシステムアプリケーション、通知、その他のAndroidのオーディオ機能には影響を与えません。このメディアサーバは既存のAndroidのオーディオ機能と100%互換性があり、オーディオ機能と関係のないアプリケーションには絶対に影響を与えません。
分かりやすく言えば、Superpowered Media Serverと一緒にビルドされたAndroidではどんなアプリでも問題なく機能するということです。これは、アプリがSuperpowered Media Serverのオーディオパスを使用すると決めていてもいなくても同じです。Androidメディアサーバのすべての機能がそのまま使えるのです。
最後に、Superpoweredオーディオのアクセスをどのアプリも要求しなければ、Superpowered Media ServerにCPUオーバーヘッドは発生しません。
Superpowered Media Serverには以下の特徴があります。
- Androidメディアサーバを変更しない。
- オーディオドライバを変更しない。
- HALを変更しない。その時使用しているHALを使う。
- バッファサイズや、システムのオーディオ設定を変更しない。
どのように機能するか
Superpowered Media ServerはHALを使用し、新しいやり方でユーザアプリケーションと接続します。今回の発表は、以下のことをお伝えするのが目的です。
- 今すぐにでも 、基本的なAndroidオーディオのアーキテクチャに関する問題は解決できる。
- 多くのAndroidデバイスでは、既存のオーディオドライバやHALアーキテクチャで十分である。
- ほとんどのAndroidデバイスでは、既存のオーディオハードウェアで十分である。
- バッファサイズを変えることなく、往復レイテンシを大幅に改善することができる。
そして一番重要なのは、新しいSuperpowered Media Serverのオーディオパスは「プル型」として機能し、一方で既存のAndroidメディアサーバは「プッシュ型」であるということです。プル型を使うと、オーディオドライバが、メディアサーバとユーザアプリケーションが次のオーディオバッファを生成すべき時を指示します。一方でプッシュ型では、メディアサーバ、もしくはユーザアプリケーションが、オーディオドライバの準備ができていてもいなくでも、オーディオドライバに次のオーディオバッファを押し込みます。
プッシュ型は、役割が逆転してしまっているのです。
プル型はドロップアウトのリスクを小さくし、「オーディオデバイスのリズムの中で」オーディオを扱うので、Mac OSXのようなプロ向けのオーディオシステムの標準となっているのです。
インストール
インストール手順は比較的簡単で、新たにAndroidをビルドする必要はありません。Androidのuserdebugビルド、またはroot化した運用ビルドならどれでもインストールすることができます。
Superpowered Media Serverのデモは、現在、以下のデバイスをサポートしています。
- Android Mデバイス。必要であれば、Android Lデバイスにも実装可能。
- Qualcomm HALまたはNvidia Tegra HALを搭載したデバイス。他のデバイスにもインストールできるが、起動はできない。
Samsung Galaxyデバイスにインストールすることは、お勧めしません。なぜなら、HAL/オーディオドライバが、Samsung Professional Audio SDKのオーディオショートカットをサポートするために、レイテンシをさらに増加させるからです。
パッケージには以下のものが含まれています。
- インストールの手順(readme.txt)。
- Superpowered Media Serverのバイナリ。わずか43KB(当然キロバイト)。
- Superpoweredレイテンシ測定アプリの修正版。
- Superpoweredレイテンシ測定アプリの修正されたソースコード。
- GoogleのDr. Rick O’Rangのレイテンシおよびオーディオ不具合測定アプリの修正版。
- Dr. Rick O’Rangアプリの修正されたソースコード。
Superpowered Media Serverオーディオパスを使用するために、利用可能な場合はレイテンシおよびオーディオ不具合測定アプリの修正版が用意されています。
アクセスのリクエストには、 mediaserver@superpowered.com にメールしてください。
よくある質問
これは、完全な置き換えソリューションですか?
違います。Superpowered Media Serverは、Androidのサービススペースに埋め込まれ、AudioFlingerには全く手を付けません。ですから、正常な機能、軽微な統合、シームレスな動作、後方互換、およびパフォーマンスの向上が可能です。
Superpowered Media Serverのオーディオ品質はスピードとトレードオフですか?
違います。Superpowered Media Serverは、10msを切る並外れたパフォーマンスを提供しながら、AndroidのAudioFlingerと全く同様に不具合やドロップアウトとは無縁です。
Superpowered Media Serverは、Androidカーネルでよくあるカーネルスケジューリングの例外にどのように対処していますか?
Superpowered Media Serverは、AudioFlingerのサーバースレッドとOpenSL ESクライアントのオーディオプロセッシングスレッドと全く同じスレッドのスケジューリングポリシーを使用しています。
それはつまり、現状の解決方法と同じようにカーネルスケジューリングの例外に対処するということです。
Superpowered Media Serverはスリープをどのように処理しますか?
Superpowered Media Serverは、プル方式を採用しています。AudioFlingerとは異なり、各状態間ではスリープしません。AudioFlingerは「プッシュ」方式で設計されているので、(入力オーディオや利用可能な出力バッファなどの)ALSAバッファイベントへの実際の接続を持っていません。
Superpowered Media Serverのスレッドは、ALSAバッファイベントですぐにブロックが解除され、適切なスレッドスケジューリング設定と組み合わせると、クライアントがオーディオを処理したり入力したりするための最大処理時間を提供します。
この方式は、ドロップアウトのリスクを減らし、もっぱら、Core Audioなどのリアルタイムプロオーディオシステムに使われています。
OEMパートナーは、デバイスのHALまたはデバイスのハードウェアを変更する必要がありますか?
デバイスのHALまたはハードウェアの変更は必要ありません。
Superpowered Media Serverは、他のデバイスオーディオ機能にどのような影響を与えますか?
システムサウンドなど他のオーディオ機能には影響を与えません。デバイスの機能は以前のまま動作します。
どうやって入手できますか?
mediaserver@superpowered.com にメールしてください。
Superpoweredとは?
私たちは、AndroidとiOS向けのSuperpowered Audio SDKを使用した1億5000万件以上のアプリインストールと何千ものアプリによって、アプリユーザスペースのオーディオレイテンシを低減しています。
今度は、Superpowered Media ServerでAndroidのサービススペースのオーディオレイテンシを減らそうとしています。
株式会社リクルート プロダクト統括本部 プロダクト開発統括室 グループマネジャー 株式会社ニジボックス デベロップメント室 室長 Node.js 日本ユーザーグループ代表
- Twitter: @yosuke_furukawa
- Github: yosuke-furukawa