OpenSL ES™标准与Android Java框架中的MediaPlayer和MediaRecorderAPI提供类似的音频功能。OpenSL ES提供C语言接口和C++绑定,让您可以从使用任意一种语言编写的代码中调用API。
AAudio是在Android O版本中引入的全新 Android C API。此API专为需要低延迟的高性能音频应用而设计。
Oboe 是一个 C++ 封装容器,提供与 AAudio非常相似的API。该封装容器在AAudio可用时对其进行调用,并在AAudio不可用时回退到OpenSL ES。
通过对比,应该是选用Oboe最好,因为总是可用的,而且实时性更好。
oboe
https://github.com/google/oboe
编译很简单,build_all_android可以快速编译出4个版本的库
build_all_android.sh
-arm64-v8a
-armeabi-v7a
-x86
-x86_64
OPMediaPlayer
OPMediaPlayer对Oboe有一个非常简单的封装,可以直接拿过来用。
https://github.com/Bentis/OPMediaPlayer
- PlayAudioEngine
- OPMediaPlayer
AAudio
AAudio Android demo: https://github.com/googlesamples/android-audio-high-performance/tree/master/aaudio
其中EchoAudioEngine实现了AAudio的play,record功能,用起来也是很方便,可以搜索这两个函数:
- openPlaybackStream
- openRecordingStream
OpenSL ES
使用入门文档: https://developer.android.google.cn/ndk/guides/audio/opensl/getting-started?hl=zh-cn
OpenSL ES Android demo: https://github.com/googlesamples/android-ndk/tree/master/audio-echo
audio-echo/app/src/main/cpp目录下有audio player,audio recorder的完整实现
- AudioPlayer
- AudioRecorder
参考
NDK Android OpenSL ES音频采集与播放
-https://www.jianshu.com/p/77b7ec203566
Android 耳返实践 OpenSL ES AAudio Oboe
-https://blog.csdn.net/king1425/article/details/87986818