整个android平台的音频框架图如下,
APP
音乐播放器,录音,音效设置,电话,声音设置,视频播放器等使用声音的软件。
Framework
MediaPlayer和MediaRecorder,AudioTrack和AudioRecorder,提供声音播放和录制。MediaPlayer/MediaRecorder功能更强大,也更易于使用。
AudioManager、AudioService及AudioSystem等类提供声音控制、通道选择、音效设置等功能。
这一层主要是桥接功能,封装native层提供的服务。
Native
AudioTrack、AudioRecorder、MediaPlayer、MediaRecorder、AudioSystem对应java层的相关类,代码放置在frameworks/av/media/libmedia中, C++语言编写,编译后成为libmedia库。
AudioFlinger和AudioPolicyService是核心代码,它们的代码在frameworks/av/services/audioflinger,编译后成为libaudioflinger库,运行在AudioServer系统进程。
MediaPlayerService也是系统服务,提供音视频的播放功能,它的代码位置在frameworks/av/media/libmediaplayerservice。
HAL
HAL是AudioFlinger向下访问的对象,厂商会在这一层实现自己的接口层,桥接硬件驱动和上层框架,形成的文件会编译成audio.primary.*,audio.a2dp.*等so库文件供音频模块加载。