2025 年 3 月 27 日より、AOSP のビルドとコントリビューションには aosp-main
ではなく android-latest-release
を使用することをおすすめします。詳細については、AOSP の変更をご覧ください。
アプリ デベロッパーにとってのオーディオ レイテンシ
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
オーディオ レイテンシを可能な限り低減するには、Oboe の使用をおすすめします。
Oboe
Oboe はネイティブ オーディオを使用しており、Android 8.1 以降では AAudio 上に、それ以前のバージョンの Android では OpenSL ES 上に構築されます。デバイスのレイテンシを可能な限り低減するには、setPerformanceMode(oboe::PerformanceMode::LowLatency)
と setSharingMode(oboe::SharingMode::Exclusive)
を設定します。
Oboe の詳細については、スタートガイド、README.md
、完全ガイドをご覧ください。Oboe を使用したサンプルアプリについては、サウンドボード アプリをご参照ください。
注: AudioTrack を使用して、レイテンシの影響を受けやすいアプリケーション向けの出力オーディオ ストリームを Java で作成する場合は、PERFORMANCE_MODE_LOW_LATENCY
モードを使用してください。
実装チェックリスト
Android ネイティブ オーディオは、次の手順で使用します。
-
Android NDK をダウンロードしてインストールします。
-
Oboe のスタートガイドに沿って操作します。
-
Oboe ビルダーで
setPerformanceMode(oboe::PerformanceMode::LowLatency)
と setSharingMode(oboe::SharingMode::Exclusive)
を呼び出します。
- android.media.AudioManager.getProperty(java.lang.String) が返す推奨のネイティブ バッファサイズとサンプルレートを使用します。
注: 入力にも同じバッファサイズとサンプルレートを使用する必要があります。
-
CPU 使用率の急上昇や無制限のブロッキングが発生しないように、コールバック ハンドラを短く保ちます。優先度の逆転は回避してください。
-
入力コールバック ハンドラと出力コールバック ハンドラ間、およびコールバック ハンドラとアプリケーションの他の部分との通信が行われるようにするため、ノンブロッキング アルゴリズムの使用を検討します。
その他のリソース
source.android.com
サイト source.android.com は、主に Android デバイスをビルドする OEM と、OEM にコンポーネントを提供する SoC ベンダー向けに用意されています。
ただし、このサイトにはレイテンシに関する有用な情報が豊富に含まれているため、確認することをおすすめします。オーディオ レイテンシに掲載された記事をご覧ください。
android-ndk
Android ネイティブ オーディオの使い方について不明な点がある場合は、ヘルプグループ android-ndk でご質問ください。
Oboe のバグを報告する
Oboe の使用時に問題が起きた場合は、バグを報告してください。
動画
- Oboe スタートガイド
- Low Latency Audio - Because Your Ears Are Worth It
- Android Dev Summit 2018
- Winning on Android - How to optimize an Android audio app
- Android Developer Challenge 2018
- Android の高性能オーディオ(Google I/O 2013)
- この動画は全体がレイテンシに関するものです。
- Android で優れたマルチメディア エクスペリエンスを実現する(Google I/O 2014)
- 最初の 14 分間で、一般的な音声と特に入力レイテンシについて説明しています。
- オーディオ レイテンシ: バッファサイズ(Google Dev の 100 日間)
- オーディオ レイテンシ、バッファサイズ、タスク スケジューリングの関係を説明しています。
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-03-26 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-03-26 UTC。"],[],[],null,["# Audio latency for app developers\n\nFor the lowest possible audio latency, we recommend you use [Oboe](https://developer.android.com/games/sdk/oboe).\n\nOboe\n----\n\n[Oboe](https://github.com/google/oboe) uses native audio and is built\non AAudio for Android 8.1+ and OpenSL ES for older versions of Android. To achieve the lowest\npossible latency for a device, set `setPerformanceMode(oboe::PerformanceMode::LowLatency)`\nand `setSharingMode(oboe::SharingMode::Exclusive)`.\nSee the [Getting started guide](https://github.com/google/oboe/blob/main/docs/GettingStarted.md),\n[`README.md`](https://github.com/google/oboe/blob/main/README.md),\nand [Full guide](https://github.com/google/oboe/blob/main/docs/FullGuide.md) for more\ninformation on Oboe. Refer to the [Soundboard app](https://github.com/google/oboe/tree/main/samples/SoundBoard)\nfor a sample app using Oboe.\n\n**Note:** If you use [AudioTrack](https://developer.android.com/reference/android/media/AudioTrack)\nfor creating output audio streams in Java for latency sensitive applications, use the [`PERFORMANCE_MODE_LOW_LATENCY`](https://developer.android.com/reference/android/media/AudioTrack#PERFORMANCE_MODE_LOW_LATENCY)\nmode.\n\n\u003cbr /\u003e\n\nImplementation checklist\n------------------------\n\nTo use Android native audio:\n\n1. Download and install the [Android NDK](https://developer.android.com/tools/sdk/ndk/index.html).\n2. Follow the [Getting started guide](https://github.com/google/oboe/blob/main/docs/GettingStarted.md) for Oboe.\n3. Call `setPerformanceMode(oboe::PerformanceMode::LowLatency)` and `setSharingMode(oboe::SharingMode::Exclusive)` on the Oboe builder.\n4. Use the recommended native buffer size and sample rate returned by [android.media.AudioManager.getProperty(java.lang.String)](http://developer.android.com/reference/android/media/AudioManager.html#getProperty(java.lang.String)).\n\n **Note:** The same buffer size and sample rate should also be used for input.\n5. Keep your callback handlers short, without bursty CPU usage or unbounded blocking. Avoid [priority inversion.](/docs/core/audio/avoiding_pi)\n6. Consider using [non-blocking algorithms](/docs/core/audio/avoiding_pi#nonBlockingAlgorithms) to communicate between input and output callback handlers, and between the callback handlers and the rest of your application.\n\nOther resources\n---------------\n\n### source.android.com\n\n\nThe site [source.android.com](/)\nis primarily designed for OEMs building Android\ndevices, and the SoC vendors who supply components to these OEMs.\n\n\nHowever, there is a wealth of useful information about latency at this site, so\nyou may want to review it. See the articles at\n[Audio latency.](/docs/core/audio/latency/latency)\n\n### android-ndk\n\n\nIf you have questions about how to use Android native audio, you can ask at the discussion group\n[android-ndk](https://groups.google.com/forum/#!forum/android-ndk).\n\n### Report bugs on Oboe\n\n\nIf you have issues using Oboe, you can\n[file a bug](https://github.com/google/oboe/issues).\n\n### Videos\n\n[Getting started with Oboe](https://www.youtube.com/playlist?list=PLWz5rJ2EKKc_duWv9IPNvx9YBudNMmLSa)\n[Low Latency Audio - Because Your Ears Are Worth It](https://www.youtube.com/watch?v=8vOf_fDtur4)\n: Android Dev Summit 2018.\n\n[Winning on Android - How to optimize an Android audio app](https://www.youtube.com/watch?v=tWBojmBpS74)\n: Android Developer Challenge 2018.\n\n[High performance audio on Android](https://youtu.be/d3kfEeMZ65c)\n(Google I/O 2013)\n: The whole video is about latency.\n\n[Building great multi-media experiences on Android](https://youtu.be/92fgcUNCHic)\n(Google I/O 2014)\n: The first 14 minutes are about audio in general and input latency in particular.\n\n[Audio latency: buffer sizes](https://youtu.be/PnDK17zP9BI)\n(100 Days of Google Dev)\n: Describes the relationship between audio latency, buffer sizes, and task scheduling."]]