我开始在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 – 修复实际使用快速路径.
A音频
将在今年某个时候发布的Android O上得到支持.除非您不希望您的游戏仅与Android O兼容,否则您可能不希望这样.
我还没有多少经验.
动机
为什么你真的想要为你的游戏提供原生音频部分?如果它不是合成器,专业音频应用程序或VR游戏,我真的不会打扰原生C音频并去JavaAudioTrack.它可靠,与所有设备兼容,并且对于非专业应用程序具有可接受的延迟.