性能对于音频开发来说非常重要,低延迟高质量才能确保音频播放流畅,提供给用户更好的用户体验。在学习相关API之前,先了解一下音频的一些基础概念。
下面看看Android官方提供的高性能API有哪些以及它们的差别。
SoundPool可以用来播放一组声音,这些声音必须是存在与本地,因为在播放之前会需要先调用SoundPool.load()方法将音频加载到内存,由于是预先加载好的,而且也无需在播放时编解码,所以性能是很不错的,另外SoundPool还有以下优点:
但是缺点也很明显:
总而言之,SoundPool适合播放本地预先配置的一些简短的提示声音。
AudioTrack和AudioRecord是Android系统中比较底层的音频API,AudioTrack用于音频播放,AudioRecord用于录制音频,它们都只能处理未经压缩的原始音频数据,即PCM格式。
AudioTrack支持两种播放模式
OpenSL ES 是一个跨平台、针对嵌入式系统优化过的高性能音频库,它有专门为Android系统的实现,包含在Android NDK开发工具中
主要注意的是NDK中的OpenSL ES并不包含所有标准OpenSL ES的功能和特性。Open SL ES的优势是效率高,由于是C/C++实现的,除了平台专有的功能,都可以实现跨平台,提高开发效率。
官网指南:OpenSL ES
注释AAudio 是在 Android O 版本中引入的全新 Android C API。它是专为需要低延迟的高性能音频应用而设计。开发者可以通过读写AAudio的流来输出音频到设备或从设备中读取音频,AAudio流由以下几项定义:
AAudio是一个非常不错的音频API,但是由于它是在Android 8.1版本才引入的,所以不能兼容很多低版本的设备。
Oboe 是Google开发的一个用于构建高性能音频应用的C++库,它支持Android 4.1及以上的版本,几乎可以兼容市面上99%的设备。如果运行设备是Android 8.1及以上版本,它会使用AAudio来实现,如果低于Android 8.1则会使用OpenSL ES来实现,而且Oboe设计使用了类似AAudio的API,未来如果要切换到AAudio也是十分方便。