Android AudioServer各个关键类
AudioServer进程由audioserver.rc拉起来的.AudioServer大体分为分为三部分:
AudioFlingerAudioPolicyServiceAAudioService
AudioFlinger
AudioFlinger是 Android 音频系统架构中的核心组件之一。它作为 Android 的音频服务端(Audio Server)运行,向下连接硬件抽象层(Audio HAL),向上为应用程序提供音频输入和输出的服务。
它的主要作用包括以下几个方面:
音频混音(Mixing):在 Android 系统中,通常会有多个应用同时播放声音(例如边听音乐边收到消息提示音)。AudioFlinger 负责将来自不同应用(AudioTrack)的多个音频流混合成一个单一的音频流,然后再发送给底层硬件播放。
音频输入与输出管理:它负责管理所有的音频播放(Playback)和录音(Capture)请求。应用层使用的 AudioTrack(用于播放)和 AudioRecord(用于录音)最终都会建立与 AudioFlinger 的连接,并进行音频数据的读写交互。
与硬件抽象层(HAL)交互:AudioFlinger 不直接操作底层物理硬件,而是通过调用音频硬件抽象层(Audio HAL)的标准接口,将处理好的音频数据传输给具体的音频硬件芯片(如 DSP / Codec)进行播放,或者从硬件读取录音数据。
音量控制与音效处理:它负责处理系统的主音量控制、各个音频流(如媒体、闹钟、铃声)的独立音量调节。此外,AudioFlinger 还支持挂载各种音频效果器(Audio Effects),例如均衡器、混响、低音增强等。
执行音频路由策略:虽然“音频该从哪个设备输出”(比如是从扬声器、有线耳机还是蓝牙耳机输出)的决策是由另一个核心组件 AudioPolicyService 来制定的,但 AudioFlinger 负责执行这些策略,建立和切换相应的音频播放或录制通道(Thread)。
DeviceEffectManager
DeviceEffectManager是 Android 音频系统里专门负责管理设备级音效(Device-Level Audio Effects)的组件。
需要区分一下传统的“会话级音效”和“设备级音效”:
- 会话级音效(Session Effects):通常绑定到特定的应用或音频流(Audio Session)。比如你打开某个音乐播放器调节了均衡器,这个音效只对当前播放器的声音生效。
- 设备级音效(Device Effects):直接绑定到特定的物理音频设备(如手机内置扬声器、特定型号的蓝牙耳机、Type-C 耳机等),不管当前是哪个应用在发声,只要声音从这个设备输出(或输入),就会应用该音效。
DeviceEffectManager的核心作用就是围绕这些“设备级音效”展开的:
- 管理设备专属音效的生命周期:它负责创建、维护和销毁针对特定音频输入/输出设备的音效实例。例如,手机厂商可能会为内置扬声器配置一个专门的防破音或低频增强算法,
DeviceEffectManager负责在系统底层加载并管理这个算法模块。 - 动态响应设备状态和路由变化:它与
AudioPolicyService紧密配合。当音频设备发生连接、断开,或者音频播放路由发生切换(比如从扬声器切换到了蓝牙耳机)时,DeviceEffectManager会监听到这些事件,并动态地挂载(Attach)或卸载(Detach)对应设备的音效。 - 处理 HAL 层的设备音效配置:它负责读取和解析系统中关于硬件设备的音效配置文件(通常在 vendor 分区),并将具体的音效参数下发给 Audio HAL(硬件抽象层)或 DSP 去执行。
- 隔离应用层与硬件层的处理逻辑:它使得设备专属的声学调优(如扬声器保护、特定耳机的定制 EQ)可以独立于应用层运行,上层应用不需要关心底层连接了什么设备,由
DeviceEffectManager统筹把关硬件级别的声音体验。
IAfDeviceEffectManagerCallback
IAfDeviceEffectManagerCallback的核心作用是作为DeviceEffectManager 与 AudioFlinger 主类之间的通信桥梁。
- IAf:代表InterfaceAudioflinger,是 Android 较新版本中为了解耦 AudioFlinger 而引入的前缀,表示它是 AudioFlinger 内部组件的抽象接口。
- DeviceEffectManager:设备音效管理器
- Callback:回调接口。
classIAfDeviceEffectManagerCallback:publicvirtualRefBase<