11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

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

  • 2018-10-28
  • 本文字数:0 字

    阅读完需:约 1 分钟

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

评论 1 条评论

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

LeetCode题解:26. 删除排序数组中的重复项,双指针,JavaScript,详细注释

Lee Chen

大前端 LeetCode

战斗还是逃避,或许可以考虑一下合作?

escray

学习 面试

week 11学习总结

Geek_2e7dd7

完了,这个硬件成精了,它竟然绕过了 CPU

简爱W

【解Bug之路】——Nginx 502 Bad Gateway

简爱W

大数据技术思想入门(四):分布式文件的元数据是怎么存储的

cristal

Java 大数据 hadoop 分布式

不想做经理的程序员

escray

学习 面试

追逐影子的人,最终只会是影子

小隐乐乐

SQL查询语句执行顺序详解

书旅

MySQL SQL语法 sql查询

图解javascript——基础篇(以思维导图总结js中关键技术点,为面试及工作助力)

执鸢者

Java 大前端

让理性思维走进我们的生活,帮助我们做出更好的决策。

叶小鍵

心理学 基思. 斯坦诺维奇 超越智商 认知科学

七夕节来啦!AI一键生成情诗,去发给你的女朋友吧!

华为云开发者联盟

AI 智能高效 华为云 modelarts 七夕

一个快捷方便的油煎鸡胸肉,懒人标配香喷喷好吃看得见

小霸王其乐无穷

美食 鸡胸肉 懒人

数据库是咋工作的?

简爱W

Flink水位线和时间戳理解-7

小知识点

scala 大数据 flink 模块化流程

POI 之 策略游戏

zhoo299

随笔杂谈

Netty之旅二:口口相传的高性能Netty到底是什么?

一枝花算不算浪漫

Postman生成接口文档

书旅

Postman 接口文档

你可能不知道的计算机基础

书旅

c 常量 计算机 基础

十一周作业

olderwei

极客大学架构师训练营

week 11

Geek_2e7dd7

Docker 最常用的镜像命令和容器命令

哈喽沃德先生

Docker 容器 微服务

java安全编码指南之:基础篇

程序那些事

Java 安全编码 安全编码指南

融云 X- Meetup 技术沙龙广州站:全球通信云技术实践分享

InfoQ_967a83c6d0d7

前端分页组件实现逻辑

书旅

php 大前端 分页

你可能需要一个脱机状态

非著名程序员

学习 程序员 个人成长 工作方式

「零代码」搭建简易招聘管理系统

Tony Wu

效率工具 SaaS 招聘管理 HRIS

动态修改logback的日志级别

thuni

Java springboot logback

请不要随便修改基类

架构师修行之路

Redis 之父关于 CRC64 的神秘往事!

yes

redis CRC

Docker搭建项目环境实战

书旅

Docker Dockerfile Docker-compose

Oboe,安卓上的低延迟音频应用开发库_移动_Diogo Carleto_InfoQ精选文章