首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AAudio或OpenSL

AAudio或OpenSL
EN

Stack Overflow用户
提问于 2017-05-03 16:26:17
回答 2查看 10K关注 0票数 5

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

这两者之间的区别是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-09 20:36:22

OpenSL ES

从Android2.3(姜饼)开始的设备都支持OpenSL。然而,用于OpenSL (高性能音频)的快速混音器从Android4.2(或4.3?)开始可用,并且并不是所有设备本身都支持它。

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

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

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

要用OpenSL实现你的音频,你可能想要参考NDK示例,或者更好的是这里的https://github.com/Over17/AndroidAudioFastPathSample -它被修复为实际使用快速路径。

AAudio

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

我还没有太多的实践经验。

双簧管

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

动机

为什么你真的想在你的游戏中加入一个原生音频部分?如果它不是合成器、专业音频应用程序或VR游戏,我真的不会费心使用原生的C++音频,而是选择JavaAudioTrack。它是可靠的,与所有设备兼容,并且对于非专业应用程序具有可接受的延迟。

票数 5
EN

Stack Overflow用户

发布于 2018-11-03 03:09:46

如果你需要Android的原生音频接口,那么我们目前推荐使用双胞胎。在较新的设备上调用AAudio,在较旧的设备上调用OpenSL ES。Oboe API是C AAudio接口到C++的直接映射。

双胞胎包括在不同Android平台上的各种Open SL ES问题的变通方法。

源代码可以在GitHub上获得,并且正在积极开发中。

https://github.com/google/oboe

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43754910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档