写点什么

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

2018 年 10 月 28 日

谷歌已经发布了第一个生产就绪的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   

感谢冬雨对本文的审校。

2018 年 10 月 28 日 04:141150

评论 1 条评论

发布
暂无评论
发现更多内容

架构师入门学习感悟五

莫问

第8周 作业2

Yangjing

极客大学架构师训练营

性能优化三第九周作业「架构师训练营第 1 期」

天天向善

神经网络泛化

计算机与AI

神经网络 学习

架构师训练营第 1 期第九周总结

Leo乐

极客大学架构师训练营

作业-第5周

arcyao

极客时间架构师训练营 - 第五期作业

文江

首次排查 OOM 实录

AI乔治

Java 架构 OOM

第九周总结

alpha

极客大学架构师训练营

架构师第2期第5周作业一

老坛酸菜

极客大学架构师训练营

native关键字作用到底是什么?

秦怀杂货店

Java 源码 源码刨析 native

关于开发排期

张明森

架构师训练营第 1 期 - 第 9 周课后练习

Anyou Liu

极客大学架构师训练营

第九周总结

fmouse

极客大学架构师训练营

第九周作业

alpha

极客大学架构师训练营

架构师训练营第 1 期第九周作业

Leo乐

极客大学架构师训练营

微服务手册:分库分表从分析到实践,不再停留只会说分库分表

互联网应用架构

分库分表

Java核心基础——动态代理、静态代理

老农小江

java基础 代理模式

Week 9 设计秒杀系统

黄立

三步法解析Axios源码

执鸢者

前端 axios

Week5 - 技术选型 - 缓存,队列,负载均衡

evildracula

学习 架构

架構師訓練營第 1 期 - 第 09 周作業

Panda

架構師訓練營第 1 期

这种算法都看不懂!9张图是如何展示出来的

周老师

Java 编程 程序员 架构 面试

JVM垃圾回收及秒杀系统

天天向上

极客大学架构师训练营

架构一期第九周作业

Airs

架构师训练营第 1 期 - 第 9 周学习总结

Anyou Liu

极客大学架构师训练营

第九周作业

fmouse

极客大学架构师训练营

极客时间架构师培训 1 期 - 第 9 周作业

Kaven

极客时间架构师训练营 1 期 - 第 9 周总结

Kaven

斐波那契查找

ilovealt

算法和数据结构

架构师训练营第五周作业

丁乐洪

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