如要盡可能降低音訊延遲,建議使用 Oboe。
Oboe
Oboe 使用原生音訊,並以 Android 8.1 (API 級別 27) 以上版本的 AAudio 和 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 使用率暴增或無限期封鎖。避免優先權反轉。
建議使用非封鎖演算法,在輸入和輸出回呼處理常式之間,以及回呼處理常式和應用程式的其餘部分之間進行通訊。
android-ndk
如要瞭解如何使用 Android 原生音訊,請加入討論群組 android-ndk。
回報 Oboe 的錯誤
如果使用 Oboe 時遇到問題,請回報錯誤。
影片
- 開始使用 Oboe
- 低延遲音訊 - 因為你的耳朵值得擁有 (2018 年 Android 開發人員高峰會)
- 在 Android 上大獲成功 - 如何最佳化 Android 音訊應用程式 (2018 年 Android 開發人員挑戰賽)
- Android 上的高效能音訊 (2013 年 Google I/O 大會)
- 在 Android 上打造優質多媒體體驗 (2014 年 Google I/O 大會)
- 音訊延遲:緩衝區大小 (100 Days of Google Dev)