我开始用 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(使用前将#替换为@)