概述的官方文档见:
audio 的playback可以分为四条路线:
1)java 路线,Java.AudioTrack->JNI.AudioTrack->libaudioclient(native).AudioTrack 。
2)c/c++ ndk 路线,libaaudio.AAudio->libaudioclient(native).AudioTrack 。
3)3rd party lib 路线,opensles , 详见:
OpenSL ES Overview - The Khronos Group IncOpenSL ES™ is a royalty-free, cross-platform, hardware-accelerated audio API tuned for embedded systems. It provides a standardized, high-performance, low-latency method to access audio functionality for developers of native applications on embedded mobile multimedia devices, enabling straightforward cross-platform deployment of hardware and software audio capabilities, reducing implementation effort, and promoting the market for advanced audio
https://www.khronos.org/opensles/https://developer.android.com/ndk/guides/audio/opensl?hl=zh-cn
https://developer.android.com/ndk/guides/audio/opensl?hl=zh-cn4)3rd party lib 路线,google oboe ,oboe 是 google 较新的一个独立于 aosp 的工程,它对 opsles和libaaudio.AAudio 进行了统一封装,会首先尝试使用 AAudio ,如果走不通则使用opensles 。
四个相关的模块:
libaaudio /frameworks/av/media/libaaudio
libaudioclient /frameworks/av/media/libaudioclient
libaudiohal /frameworks/av/media/libaudiohal
libaudioprocessing /frameworks/av/media/libaudioprocessing
java路线使用起来较为方便,但是如果不适用透传模式(编码的pcm直接传到AudioTrack里解码)的话,则可能会需要通过反射来使用 AudioTrack 的 write 函数。这种情况一般是使用 MediaCodec 做解码,如果是 java.MediaCodec 则不需要反射,如果是 native.MediaCodec 则需要反射。
JAVA-AudioTrack:
\frameworks\base\media\java\android\media\AudioTrack.java
JNI-AudioTrack:
/frameworks/base/core/jni/android_media_AudioTrack.h
/frameworks/base/core/jni/android_media_AudioTrack.cpp
libaudioclient(native)-AudioTrack:
/frameworks/av/media/libaudioclient
libaudioclient 提供了 JAVA - JNI 封装,没有提供 ndk 封装。
android 没有提供 native AudioTrack 的 ndk ,但是提供了另外一个 ndk AAudio , AAudio 对 AudioTrack 进行了封装,因此可以把 AAudio 当作 AudioTrack 的 ndk 来使用。
libaaudio:
/frameworks/av/media/libaaudio
ndk : include/aaudio/AAudio.h
略
略
https://source.android.com/docs/core/audio/implement?hl=zh-cn
https://developer.android.com/reference/android/media/AudioTrack
Android Audio: Play a WAV file on an AudioTrack « Mind The Robot