写点什么

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

  • 2018-10-27
  • 本文字数:1421 字

    阅读完需:约 5 分钟

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

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



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   

感谢冬雨对本文的审校。