AAudio 或 OpenSL
AAudio or OpenSL
我开始用 C++ 实现我的游戏音频部分,我看到有 2 个音频框架可用 AAudio (https://developer.android.com/ndk/guides/audio/aaudio/aaudio.html) and 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 上的 "crackling",可能是因为线程优先级发生了变化。
要使用 OpenSL 实现您的音频,您可能需要参考 NDK 样本,或者在此处更好 https://github.com/Over17/AndroidAudioFastPathSample - 它已固定为实际使用快速路径。
AAudio
将在 Android 8 Oreo 上提供支持,该产品将于今年某个时候发布。除非你不希望你的游戏只与 Android O 兼容,否则你可能不想走这条路。
我还没有太多的实践经验。
双簧管
Oboe 是由 Google 开发的库,它使用 AAudio 或 OpenSL 作为后端,具体取决于设备支持的内容,并具有包装 API 的 C++ 接口。使用它而不是直接使用 AAudio 是有意义的。
动机
为什么您真的想要游戏的原生音频部分?如果它不是合成器、专业音频应用程序或 VR 游戏,我真的不会理会原生 C++ 音频而选择 JavaAudioTrack。它可靠,与所有设备兼容,并且对于非专业应用程序具有可接受的延迟。
如果您需要 Android 的原生音频接口,那么我们目前推荐使用双簧管。 Oboe 在新设备上调用 AAudio,在旧设备上调用 OpenSL ES。 Oboe API 是 C AAudio 接口到 C++ 的直接映射。
Oboe 包含针对不同 Android 平台上的各种 Open SL ES 问题的解决方法。
源代码在 GitHub 上可用,并且正在积极开发中。
我开始用 C++ 实现我的游戏音频部分,我看到有 2 个音频框架可用 AAudio (https://developer.android.com/ndk/guides/audio/aaudio/aaudio.html) and 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 上的 "crackling",可能是因为线程优先级发生了变化。
要使用 OpenSL 实现您的音频,您可能需要参考 NDK 样本,或者在此处更好 https://github.com/Over17/AndroidAudioFastPathSample - 它已固定为实际使用快速路径。
AAudio
将在 Android 8 Oreo 上提供支持,该产品将于今年某个时候发布。除非你不希望你的游戏只与 Android O 兼容,否则你可能不想走这条路。
我还没有太多的实践经验。
双簧管
Oboe 是由 Google 开发的库,它使用 AAudio 或 OpenSL 作为后端,具体取决于设备支持的内容,并具有包装 API 的 C++ 接口。使用它而不是直接使用 AAudio 是有意义的。
动机
为什么您真的想要游戏的原生音频部分?如果它不是合成器、专业音频应用程序或 VR 游戏,我真的不会理会原生 C++ 音频而选择 JavaAudioTrack。它可靠,与所有设备兼容,并且对于非专业应用程序具有可接受的延迟。
如果您需要 Android 的原生音频接口,那么我们目前推荐使用双簧管。 Oboe 在新设备上调用 AAudio,在旧设备上调用 OpenSL ES。 Oboe API 是 C AAudio 接口到 C++ 的直接映射。
Oboe 包含针对不同 Android 平台上的各种 Open SL ES 问题的解决方法。
源代码在 GitHub 上可用,并且正在积极开发中。