JAVA:
Audioservice、Audiomanager和Audiosystem
AudioService:
继承自IAudioService.Stub,IAudioService.Stub类很明显是通过IAudioService.aidl自动生成的。AudioService位于Bn端。
AudioManager:
AudioManager拥有AudioService的Bp端,是AudioService在客户端的一个代理。
几乎所有客户端对AudioManager进行的请求,最终都会交由AudioService实现。
AudioSystem:
AudioService的功能实现依赖AudioSystem类,AudioSystem无法实例化,它是java层到native层的代理。
AudioService将通过它与AudioPolicyService以及AudioFlinger进行交互
C++:
AudioFlinger,AudioPolicyServices和MediaPolicyService
AudioFlinger与AudioPolicyServices:
Android音频系统的两大服务,一个服务是AudioPolicyService,另一个服务是audioflinger。
这两大服务都在系统启动时有MediaSever加载,加载的代码位于:frameworks/base/media/mediaserver/main_mediaserver.cpp
AudioFinger是Audio系统的工作引擎,管理者系统中输入输出音频流,并承担音频数据混音,以及读写Audio硬件等工作以实现数据的输入输出功能。
AudioPolicyService是Audio系统策略控制中心,具体负责掌管系统中声音设备的选择和切换,音量控制等功能。
而真正去执行选择和切换或者音量控制的动作是在AudioPolicyManager中进行的