音訊延遲 (適用於應用程式開發人員)

為盡可能降低音訊延遲,建議您使用 Oboe

Oboe

Oboe 使用原生音訊,並針對 Android 8.1 以上版本使用 AAudio,針對較舊的 Android 版本使用 OpenSL ES。如要讓裝置的延遲時間縮到最短,請設定 setPerformanceMode(oboe::PerformanceMode::LowLatency)setSharingMode(oboe::SharingMode::Exclusive)。如要進一步瞭解 Oboe,請參閱入門指南README.md完整指南。如需使用 Oboe 的範例應用程式,請參閱 Soundboard 應用程式

注意:如果您使用 AudioTrack 在 Java 中建立輸出音訊串流,以便為延遲敏感的應用程式提供服務,請使用 PERFORMANCE_MODE_LOW_LATENCY 模式。

導入檢查清單

如要使用 Android 原生音訊:

  1. 下載並安裝 Android NDK
  2. 請參閱 Oboe 的入門指南
  3. 在 Oboe 建構工具上呼叫 setPerformanceMode(oboe::PerformanceMode::LowLatency)setSharingMode(oboe::SharingMode::Exclusive)
  4. 使用 android.media.AudioManager.getProperty(java.lang.String) 傳回的建議原生緩衝區大小和取樣率。

    注意:輸入內容也應使用相同的緩衝區大小和取樣率。

  5. 請確保回呼處理常式簡短,且不會造成 CPU 使用量激增或無限阻斷。避免優先順序反轉
  6. 建議您使用非阻斷演算法,在輸入和輸出回呼處理常式之間,以及回呼處理常式與其他應用程式之間進行通訊。

其他資源

source.android.com

source.android.com 網站主要適用於建構 Android 裝置的原始設備製造商 (OEM),以及向這些 OEM 供應元件的 SoC 供應商。

不過,這個網站提供許多有關延遲的實用資訊,建議您查看。請參閱「音訊延遲」一文。

android-ndk

如果您對如何使用 Android 原生音訊有任何疑問,歡迎前往討論群組 android-ndk 提問。

在 Oboe 上回報錯誤

如果您在使用 Oboe 時遇到問題,可以回報錯誤

影片

開始使用 Oboe
低延遲音訊:讓你聽得更清楚
2018 年 Android 開發人員高峰會。
在 Android 平台上勝出 - 如何最佳化 Android 音訊應用程式
2018 年 Android 開發人員挑戰賽。
Android 上的高效能音訊 (2013 年 Google I/O 大會)
整部影片都是關於延遲時間。
在 Android 上打造出色的多媒體體驗 (Google I/O 2014)
前 14 分鐘會介紹一般音訊和輸入延遲。
音訊延遲:緩衝區大小 (100 Days of Google Dev)
說明音訊延遲、緩衝區大小和工作排程之間的關係。