Audio系统综述
Audio系统在Android中负责音频方面的数据流传输和控制功能,也负责音频设备的管理。
Audio系统主要的分成几个层次:
1. media中库提供的Audio系统的上层接口
2. AudioFlinger作为Audio系统的中枢
3. Audio库的硬件抽象层提供底层的支持
4. Audio接口通过JNI和Java框架提供给上层
Audio系统的上层接口主要提供了两方面的功能:放音(Track)和录音(Recorder)。
Media库(libmedia.so)的Audio部分的目录中:
frameworks/base/include/media/
frameworks/base/media/libmedia/
这部分的内容被编译成库libmedia.so,提供Audio部分的接口。
Audio Flinger (libaudioflinger.so):
frameworks/base/libs/audioflinger
这部分内容被编译成库libaudioflinger.so。
Audio的JNI部分:
frameworks/base/core/jni
Audio的JAVA部分:
frameworks/base/media/java/android/media
主要包含AudioManager和Audio系统的几个类。
Audio硬件抽象层的接口:
hardware/libhardware_legacy/include/hardware/
Audio系统和上层接口
Audio系统的结构:
libmedia.so提供Audio接口,这些Audio接口既像上层开放,也向本地代码开发。
libaudiofilnger.so提供Audio接口实现。
Audio硬件抽象层提供到硬件的接口,供AudioFlinger 调用。
Audio使用JNI和JAVA对上层提供接口。
Android 的Audio的核心框架在media库中提供,其中对上面主要实现AudioSystem、AudioTrack和AudioRecorder三个类。提供了IAudioFlinger类接口,在这个类中,可以获得IAudioTrack和IAudioRecorder两个接口,分别用于声音的播放和录制。AudioTrack和AudioRecorder分别通过调用IAudioTrack和IAudioRecorder来实现。
AudioTrack和AudioRecorder 都具有start,stop和pause等接口。前者具有write接口,用于声音的播放,后者具有read接口,用于声音的录制。
AudioSystem用于Audio系统的控制工作,主要包含一些set和get接口,是一个对上层的类。