AAudio和Oboe的关系
AAudio和Oboe的关系
AAudio 是由 Google 提供的一个底层音频 API,旨在为 Android 应用提供高性能和低延迟的音频输入输出功能。它直接与 Android 操作系统的音频层交互,提供了比之前的 API(如 OpenSL ES)更优秀的性能。
Oboe 则是一个构建在 AAudio 和 OpenSL ES 之上的 C++ 封装库。Oboe 的设计目的是简化 Android 上的实时音频应用开发,同时确保这些应用能够尽可能地利用 AAudio 带来的性能优势。如果设备不支持 AAudio 或者在某些情况下 AAudio 不适用时,Oboe 可以自动回退到使用 OpenSL ES,从而保证了良好的兼容性。
Oboe 的主要特点
- 简化API:Oboe 提供了一个更加简洁和易于使用的 API 来处理音频流,隐藏了直接使用 AAudio 或 OpenSL ES 的复杂性。
- 跨平台兼容性:尽管 Oboe 主要针对 Android 开发,它的设计也考虑到了跨平台的可移植性。
- 性能优化:通过尽量使用 AAudio,Oboe 能够实现更低的延迟和更高的效率。
使用 Oboe
如果你正在开发一个新的 Android 音频应用,并且需要低延迟和高保真度,推荐首先尝试 Oboe 而不是直接使用 AAudio。这是因为 Oboe 提供了更高层次的抽象,使得代码更易于编写和维护,同时也能够智能地选择最佳的底层 API(即 AAudio 或 OpenSL ES)来满足你的需求。
示例代码片段(Oboe)
以下是一个简单的例子,展示了如何使用 Oboe 创建并启动一个音频流:
1 |
|
这个示例中,SimplePlayback 类实现了 oboe::AudioStreamCallback 接口,用于定义当音频数据准备好时应执行的操作。createStream 方法设置了一些基本参数并打开了音频流。onAudioReady 回调函数则负责填充音频缓冲区的数据。
总之,虽然 AAudio 提供了强大的底层能力,但 Oboe 作为一个更高层次的封装库,可以让你更容易地利用这些能力,同时保持良好的兼容性和性能。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Fleming's Blog!

