AAudio或OpenSL

时间:2017-05-03 08:26:17

标签: android c++ audio opensl

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

这两者之间有什么区别?

2 个答案:

答案 0 :(得分:4)

OpenSL ES

从Android 2.3(Gingerbread)开始的设备支持OpenSL。但是,自Android 4.2(或4.3?)以来,OpenSL(高性能音频)的快速混音器可用,并且所有设备都不支持。

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

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

要考虑的另一个问题是"噼啪声"在GearVR上,可能是因为线程优先级发生了变化。

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

<强> A音频

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

我还没有多少经验。

<强>动机

为什么你真的想要一个适合你游戏的原生音频部分?如果它不是合成器,专业音频应用程序或VR游戏,我真的不会理解本机C ++音频并转向JavaAudioTrack。它可靠,与所有设备兼容,并且对于非专业应用程序具有可接受的延迟。

答案 1 :(得分:2)

如果您需要Android的本地音频接口,那么我们当前建议使用Oboe。 Oboe在较新的设备上调用AAudio,在较旧的设备上调用OpenSL ES。 Oboe API是C AAudio接口到C ++的直接映射。

Oboe包括针对不同Android平台上的各种Open SL ES问题的解决方法。

Source可在GitHub上获得并且正在积极开发。

https://github.com/google/oboe