為了盡可能降低音訊延遲,我們建議您使用Oboe 。
雙簧管
Oboe使用本機音頻,並基於適用於 Android 8.1+ 的 AAudio 和適用於舊版 Android 的 OpenSL ES 構建。若要實現裝置的最低延遲,請設定setPerformanceMode(oboe::PerformanceMode::LowLatency)
和setSharingMode(oboe::SharingMode::Exclusive)
。有關 Oboe 的更多信息,請參閱入門指南、 README.md
和完整指南。請參閱Soundboard 應用程式以取得使用 Oboe 的範例應用程式。
注意:如果您使用AudioTrack在 Java 中為延遲敏感的應用程式建立輸出音訊串流,請使用PERFORMANCE_MODE_LOW_LATENCY
模式。
實施清單
若要使用 Android 原生音訊:
- 下載並安裝Android NDK 。
- 請遵循雙簧管入門指南。
- 在 Oboe 建構器上呼叫
setPerformanceMode(oboe::PerformanceMode::LowLatency)
和setSharingMode(oboe::SharingMode::Exclusive)
。 - 使用android.media.AudioManager.getProperty(java.lang.String)傳回的建議本機緩衝區大小和取樣率。
注意:輸入也應使用相同的緩衝區大小和取樣率。
- 保持回調處理程序簡短,不會出現突發的 CPU 使用或無限的阻塞。避免優先權倒置。
- 考慮使用非阻塞演算法在輸入和輸出回調處理程序之間以及回調處理程序和應用程式的其餘部分之間進行通訊。
其他資源
來源.android.com
網站source.android.com主要是為構建 Android 設備的 OEM 以及向這些 OEM 提供組件的 SoC 供應商而設計的。
但是,此網站上有大量有關延遲的有用信息,因此您可能需要查看它。請參閱音訊延遲中的文章。
android-ndk
如果您對如何使用 Android 原生音訊有疑問,可以在android-ndk討論群組提問。
報告 Oboe 上的錯誤
如果您在使用 Oboe 時遇到問題,可以提交 bug 。
影片
- 雙簧管入門
- 低延遲音訊 - 因為您的耳朵值得
- 2018 年 Android 開發者高峰會。
- 贏得 Android - 如何優化 Android 音訊應用
- 2018 年 Android 開發者挑戰賽。
- Android 上的高效能音訊(Google I/O 2013)
- 整個影片都是關於延遲的。
- 在 Android 上建立出色的多媒體體驗(Google I/O 2014)
- 前 14 分鐘主要是關於音頻,特別是輸入延遲。
- 音訊延遲:緩衝區大小(Google Dev 100 天)
- 描述音訊延遲、緩衝區大小和任務調度之間的關係。