我开始用C++实现游戏音频部分,并且我已经看到有2种可用的音频框架AAudio(https://developer.android.com/ndk/guides/audio/aaudio/aaudio.html)和OpenSL(https://developer.android.com/ndk/guides/audio/opensl/index.html)。
两者之间有什么区别?
最佳答案
OpenSL ES
从Android 2.3(Gingerbread)开始的设备支持OpenSL。但是,从Android 4.2(或4.3?)开始,可以使用适用于OpenSL(高性能音频)的快速混音器,并且并非所有设备都原生支持该混音器。
这是什么意思?根据我的观察,当不使用快速混合器时,Java AudioTrack比OpenSL更快(具有更低的延迟)。
使用快速混音器时,音频等待时间实际上不错且很短。为此,您的设备必须支持快速混音器,并且配置参数应该匹配。
另一个要考虑的问题是GearVR上的“开裂”,可能是因为线程优先级已更改。
要使用OpenSL实现音频,您可能需要引用NDK示例,或者在这里更好引用https://github.com/Over17/AndroidAudioFastPathSample-它已固定为实际使用快速路径。
AAudio
Android 8 Oreo将受支持,该操作系统将于今年的某个时候发布。除非您不希望您的游戏仅与Android O兼容,否则您可能不想这样做。
我还没有太多实践经验。
双簧管
Oboe是Google开发的库,根据设备支持的功能使用AAudio或OpenSL作为后端,并具有包装API的C++接口(interface)。使用它而不是直接使用AAudio是有意义的。
动机
您为什么真正想要游戏的 native 音频部分?如果不是合成器,专业音频应用程序或VR游戏,我真的不会为本地C++音频而烦恼,而是选择JavaAudioTrack。它是可靠的,与所有设备兼容,并且对于非专业应用程序具有可接受的延迟。