Oboe,安卓上的低延迟音频应用开发库

阅读数:662 2018 年 10 月 28 日 04:14

谷歌已经发布了第一个生产就绪的Oboe 版本。Oboe 是一个C++ 库,它用来构建在99% 的安卓设备上都有着最低可能延迟的高性能音频应用。

需要构建音乐类游戏,音频应用等的开发者通常不得不处理延迟问题。Oboe 的目标是通过提供一个简单的与安卓 API 16+(Jelly Bean)版本兼容的 API 来解决这些延迟问题。在底层,Oboe 利用了 API 27+(Oreo MR1)里 AAudio 的性能和特性,在 API 16+ 上使用了 OpenSL ES

Oboe,安卓上的低延迟音频应用开发库

AAudio 是一个安卓上的 C 语言 API,它被设计用来开发要求低延迟的高性能音频应用。在安卓版本 O 中引入了它。应用通过读写流与 AAudio 交互。

安卓上的 OpenSL ES 是 Khronos Group 的 OpenSL ES API 规范的一种特定实现。类似 AAudio,这个库也被设计用来开发要求低延迟的高性能音频应用。另外,OpenSL ES 还暴露了一些与 MediaPlayer MediaRecorder API 中音频特性类似的特性。

使用 Oboe 需要安卓 NDK 版本 r17 或以上。它可以通过 Android Studio SDK 管理器安装,或者直接安装

安装安卓 NDK 版本 r17 或以上以后,克隆 GitHub 仓库,添加如下命令到 CMakeLists.txt 文件的末尾(如果你没有这个文件,那么应该为项目添加 C++ 支持)。

复制代码
cmake_minimum_required(VERSION 3.4.1)
# 构建我们的本地库
add_library (native-lib SHARED src/main/cpp/native-lib.cpp )
# 指定我们的本地库依赖的库,包含 Oboe
target_link_libraries (native-lib log oboe)
# 构建 Oboe 库
set (OBOE_DIR ../../../oboe)
add_subdirectory (${OBOE_DIR} ./oboe)
# 让 Oboe 公有头文件对我们的应用可见
include_directories (${OBOE_DIR}/include)

开发者可以用 Oboe 的以下几行代码创建一个音频流:

复制代码
AudioStreamBuilder builder;
AudioStream *stream = nullptr;
Result result = builder.openStream(&stream);

可以在文档 API 指南代码样例上找到更多细节。此外,你可以在 codelab 上使用 Oboe 开发一个简单的音乐游戏;这个游戏的目标是通过点击屏幕复制听到的拍手模式。

查看英文原文 https://www.infoq.com/news/2018/10/android-oboe   

感谢冬雨对本文的审校。

收藏

评论

微博

用户头像
发表评论

注册/登录 InfoQ 发表评论