AAudio 或 OpenSL

2024-04-04

我开始用 C++ 实现我的游戏音频部分,我看到有 2 个可用的音频框架 AAudio (https://developer.android.com/ndk/guides/audio/aaudio/aaudio.html https://developer.android.com/ndk/guides/audio/aaudio/aaudio.html) 和 OpenSL (https://developer.android.com/ndk/guides/audio/opensl/index.html https://developer.android.com/ndk/guides/audio/opensl/index.html).

这两者之间有哪些区别?


OpenSL ES

Android 2.3 (Gingerbread) 及以上版本的设备均支持 OpenSL。然而,OpenSL(高性能音频)的快速混音器自 Android 4.2(或 4.3?)起可用,并且并非所有设备都原生支持。

这是什么意思?根据我的观察,当不使用快速混音器时,Java AudioTrack 是faster(具有较低的延迟)比 OpenSL。

当使用快速混音器时,音频延迟实际上很好而且很低。为了实现这一点,您的设备必须支持快速混合器,并且配置参数应该匹配。

另一个需要考虑的问题是 GearVR 上的“裂纹”,可能是因为线程优先级发生了变化。

要使用 OpenSL 实现音频,您可能需要参考 NDK 示例,或者更好地参考此处https://github.com/Over17/AndroidAudioFastPathSample https://github.com/Over17/AndroidAudioFastPathSample- 修复为实际使用快速路径。

AAudio

将在今年某个时候发布的 Android 8 Oreo 上得到支持。除非您不希望您的游戏仅与 Android O 兼容,否则您可能不想走这条路。

我还没有太多实践经验。

Oboe

Oboe 是 Google 开发的一个库,它根据设备支持的内容使用 AAudio 或 OpenSL 作为后端,并具有包装 API 的 C++ 接口。使用它而不是直接使用 AAudio 是有意义的。

动机

为什么您真的想要为您的游戏提供原生音频部分?如果它不是合成器、专业音频应用程序或 VR 游戏,我真的不会为原生 C++ 音频而烦恼,而会选择 JavaAudioTrack。它可靠,与所有设备兼容,并且对于非专业应用程序具有可接受的延迟。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AAudio 或 OpenSL 的相关文章

随机推荐

  • 如何使用 Solr 选择不同的字段值?

    我想做与此 SQL 相同的操作 但使用 Solr 作为我的数据存储 SELECT DISTINCT txt FROM my table 什么语法会强制 Solr 只给我不同的值 http localhost 8983 solr select
  • Maven java 项目构建,但不运行

    我正在从头开始创建一个maven项目 首先学习如何使用maven 主项目不包含源代码文件 但它有两个模块 app 和 util 应用程序取决于 util 我想要一个来自应用程序的 jar 并且如果可能的话没有清单文件 我可以使用 mvn c
  • C# 替换字符串的一部分

    如何替换具有可能未知的起始索引的字符串的一部分 例如 如果我有以下字符串
  • 如何在数据框中添加新的计算列? [复制]

    这个问题在这里已经有答案了 我正在尝试根据我拥有的数据计算一个人的年龄 Data columns in Person Dataframe TodaysDate non null datetime64 ns YOB non null floa
  • 如何在 TimePickerDialog android 中禁用键盘?

    我在我的应用程序中使用时间选择器和日期选择器 我想在这两个中禁用键盘 我可以使用以下代码禁用日期选择器中的键盘 datePickerDialog getDatePicker setDescendantFocusability ViewGro
  • 简单参数化查询出错 - Java/ SQL

    继我之前的一个问题之后方法设计 https stackoverflow com questions 5490214 method design clarity or multifunction建议我将 SQL 查询实现为参数化查询 而不是简
  • Perl 中数组是如何实现的?

    Perl 数组是一种抽象数据类型 Perl数组的内部机制是什么 是用动态数组还是链表实现的 由于数组元素可以随机访问 因此我假设动态指针数组或对标量的引用是有意义的 但是 如果在数组头部进行移位和取消移位操作 数组是否必须通过这些操作移动其
  • 服务层相互依赖

    我正在设计一个使用服务层的 asp net mvc 应用程序 如果我们有一个服务依赖于另一个服务怎么办 例如 假设我们有以下模型 class UserService IUserService implementation requires
  • Angular ui-grid 表、客户端分页和滚动

    我正在尝试将一个小项目从 jquery 移植到 angularjs 我使用 DataTables 绘制从虚拟机接收到的诊断数据 这是一个示例 DataTables 可以轻松地对数据进行分页 这样做的好处是在导航时不捕获鼠标滚动 这是当页面包
  • 获取/读取 laravel 5.8 存储非公共文件夹文件以查看?

    尝试从我的视图访问 storage app folder1 a png public function viewStorageFiles fileFullPath Storage disk local gt path folder1 a p
  • Laravel 5.4 迁移错误

    我面临着一个无法解决的问题 我的应用程序使用 Ubuntu 16 04 PHP 7 1 MySQL 和 NGINX 托管在我的服务器上 我的应用程序运行完美 当我 ssh 到我的服务器和应用程序根目录时 我运行以下命令 php artisa
  • 为什么Python的shelf要求所有键都是字符串?

    有据可查 Python 的 shelve 模块要求所有键都是字符串 并且有各种解决方法 请参阅线程here https stackoverflow com questions 4013452 how do i take integer ke
  • Domino R9.0.1 FP4:禁用与 ImportConvertHeaders 相关的日志记录?

    最近 我们安装了FP4 现在控制台上有很多消息 当使用 XPages 从浏览器打开或保存邮寄文档时 就会发生这种情况 邮件中的富文本字段采用 MIME 格式 许多行出现引用 ImportConvertHeaders 例如 25 06 201
  • 在 Firefox 中以编程方式单击 标签不起作用

    我有一个问题click jquery 的函数 我创建一个 a 元素与document createElement a 并想致电click 关于该元素的功能 关于这个元素 我想创建一个 Excel 文件并将其保存在桌面上 My code bo
  • iOS 7:如何为 UIControlStateHighlighted 设置 UIBarButtonItem backButtonBackgroundImage?

    我正在尝试在正常和突出显示状态下设置后退按钮的背景图像 void configureBackButtonInNavigationItem UINavigationItem item UIBarButtonItem backBarButton
  • 使用 Vim 命令打开标记中的当前文件

    我一直在尝试为 Brett Terpstra 的 Marked 应用程序创建一个命令 不幸的是我无法让它工作 上标记奖励包 http support markedapp com kb how to tips and tricks marke
  • 使用 Python 将 JSON 插入 MySQL

    我有一个 Python 中的 JSON 对象 我正在使用 Python DB API 和 SimpleJson 我正在尝试将 json 插入 MySQL 表中 目前出现错误 我相信这是由于 JSON 对象中的单引号 造成的 如何使用 Pyt
  • 如何识别该图像中的矩形?

    我有一张带有水平线和垂直线的图像 事实上 这张图片是BBC网站转换成水平线和垂直线的 我的问题是我希望能够找到图像中的所有矩形 我想编写一个计算机程序来查找所有矩形 有谁知道如何做到这一点或提出有关如何开始的想法 作为一个人 这个任务对于我
  • 为什么 Bootstrap 的滚动间谍不工作?

    我有一个简单的 Bootstrap 模式设置 在模式中我有内容nav并设置了滚动间谍 但是 它不起作用 我看到它被激活 但导航从未更新 完整的源代码在这里太长了 你将无法看到我得到的效果 所以我设置了一个jsfiddle http jsfi
  • AAudio 或 OpenSL

    我开始用 C 实现我的游戏音频部分 我看到有 2 个可用的音频框架 AAudio https developer android com ndk guides audio aaudio aaudio html https developer