【Android 高性能音频】高性能音频简介 ( 高性能音频问题引入 | 使用场景 | 相关开发库及技术 )

2023-03-27 17:28:52 浏览数 (1)

文章目录
  • 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 开发库的示例 ;

0 人点赞