文章目录- I 高性能音频使用场景
- II 高性能音频开发库
- III 相关开发资料
I 高性能音频使用场景
Android 手机的音频问题 :
- 1. 普通音频功能 :
- ① 常用音频开发方式 : 当前使用 android 手机的音频库时 , 调用 MediaPlayer , AudioTrack 等 Java 库播放音频 , 音频流 ;
- ② 音频延迟 : 其延迟基本在秒级 , 也就是我们点击播放按钮后 , 要等带 0.2 ~ 0.5 秒 , 才有声音从音频播放设备发出声音 ;
- ③ 延迟可接受情景 : 如果是播放音频 文件 或者对实时性要求不高的流文件 , 这个延迟是可以接受的 ;
- 2. 高性能音频功能 :
- ① 使用场景 : 但是如果用于一些对延迟要求较高的场景 , 如 对讲机 , 声音合成器 , 电子乐器开发 , 视频音频会议 ;
- ② 性能要求 : 这些要求在指定操作后 ( 如触摸触发操作 ) , 在 50ms , 甚至 10ms 以内必须能听到声音发出 , 这里就需要使用高性能音频技术了 ;
iOS 的音频系统优化的很好 , 其延迟基本在 10ms 左右 , 而且调用普通 API 就可以实现 ; Android 目前也开始发力推出了一系列的高性能音频库 , 如最初的 OpenSL ES , 8.0 之后推出的 AAudio , 目前最新的 Oboe 兼容前两者 ;
开发层级 : 使用 Java 层的 API 是无法实现高性能音频的 , 必须使用 NDK 开发库才可以 , 上述讲的 OpenSL ES , AAudio , Oboe 都是 C/C 库 ;
II 高性能音频开发库
1. OpenSL ES : 该开发库符合 OpenSL ES™ API 规范 , 在 8.0 以下的系统中使用 , 使用 C/C 开发 ;
2. AAudio : 是轻量级的高性能音频库 , 仅能在 8.0 以上的系统中使用 , 该开发库 API 比较小 , 方便开发使用 ;
3. Oboe : 对上面两个 高性能音频开发库进行了封装 , 在 8.0 以上的系统中自动调用 AAudio 开发库 , 在 8.0 以下系统中调用 OpenSL ES 开发库 ;
III 相关开发资料
Android NDK 高性能音频官方文档 : https://developer.android.google.cn/ndk/guides/audio
OpenSL ES 文档 : https://www.khronos.org/registry/OpenSL-ES/specs/OpenSL_ES_Specification_1.1.pdf
示例代码 :
- ① OpenSL ES 官方示例 : 下面两个示例在 NDK 示例中 ;
- audio-echo : https://github.com/android/ndk-samples/tree/master/audio-echo
- native-audio : https://github.com/android/ndk-samples/tree/master/native-audio
- ② AAudio 官方示例 : https://github.com/googlearchive/android-audio-high-performance
- ③ Oboe 官方示例 : https://github.com/google/oboe
博客的下载链接中有 Google 提供的 全套的 高性能音频示例 , 包括 OpenSL ES , AAudio , Oboe 开发库的示例 ;