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