我开始用C++实现我的游戏音频部分,我已经看到有两个音频框架可用AAudio (https://developer.android.com/ndk/guides/audio/aaudio/aaudio.html)和OpenSL (https://developer.android.com/ndk/guides/audio/opensl/index.html)。
这两者之间的区别是什么?
发布于 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。它是可靠的,与所有设备兼容,并且对于非专业应用程序具有可接受的延迟。
发布于 2018-11-03 03:09:46
如果你需要Android的原生音频接口,那么我们目前推荐使用双胞胎。在较新的设备上调用AAudio,在较旧的设备上调用OpenSL ES。Oboe API是C AAudio接口到C++的直接映射。
双胞胎包括在不同Android平台上的各种Open SL ES问题的变通方法。
源代码可以在GitHub上获得,并且正在积极开发中。
https://stackoverflow.com/questions/43754910
复制相似问题