【问题标题】:AAudio or OpenSLAAudio 或 OpenSL
【发布时间】:2017-09-30 23:34:09
【问题描述】:

我开始用 C++ 实现我的游戏音频部分,我发现有 2 个可用的音频框架 AAudio (https://developer.android.com/ndk/guides/audio/aaudio/aaudio.html) 和 OpenSL (https://developer.android.com/ndk/guides/audio/opensl/index.html)。

这两者有什么区别?

【问题讨论】:

    标签: android c++ audio opensl


    【解决方案1】:

    OpenSL ES

    从 Android 2.3 (Gingerbread) 开始的设备支持 OpenSL。但是,用于 OpenSL(高性能音频)的快速混音器从 Android 4.2(或 4.3?)开始可用,并非所有设备都原生支持。

    这是什么意思?根据我的观察,当不使用快速混合器时,Java AudioTrack 比 OpenSL更快(延迟更低)。

    使用快速混音器时,音频延迟实际上很好而且很低。要做到这一点,您的设备必须支持快速混音器,并且配置参数应该匹配。

    另一个需要考虑的问题是 GearVR 上的“噼啪声”,可能是因为线程优先级发生了变化。

    要使用 OpenSL 实现您的音频,您可能需要参考 NDK 示例,或者在这里https://github.com/Over17/AndroidAudioFastPathSample 更好——它已修复为实际使用快速路径。

    音频

    将在今年某个时间发布的 Android 8 Oreo 上得到支持。除非您不希望您的游戏仅与 Android O 兼容,否则您可能不希望采用这种方式。

    我还没有太多的实践经验。

    双簧管

    Oboe 是由 Google 开发的库,它使用 AAudio 或 OpenSL 作为后端,具体取决于设备支持的内容,并具有封装 API 的 C++ 接口。使用它而不是直接使用 AAudio 是有意义的。

    动机

    为什么您真的想要为您的游戏添加原生音频部分?如果它不是合成器、专业音频应用程序或 VR 游戏,我真的不会理会原生 C++ 音频而选择 JavaAudioTrack。它可靠,与所有设备兼容,并且对于非专业应用程序具有可接受的延迟。

    【讨论】:

    【解决方案2】:

    如果您需要适用于 Android 的原生音频界面,那么我们目前建议您使用双簧管。双簧管在较新的设备上调用 AAudio,在旧设备上调用 OpenSL ES。 Oboe API 是 C AAudio 接口到 C++ 的直接映射。

    Oboe 包含针对不同 Android 平台上各种 Open SL ES 问题的解决方法。

    源代码在 GitHub 上可用,并且正在积极开发中。

    https://github.com/google/oboe

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      • 2013-08-23
      • 2018-02-26
      相关资源
      最近更新 更多