一、AudioFlinger介绍
AudioPolicyService 与 AudioFlinger 是 Android 音频系统的两大基本服务。前者是音频系统策略的制定者,负责音频设备切换的策略抉择、音量调节策略等;后者是音频系统策略的执行者,负责音频流设备的管理及音频流数据的处理传输,所以 AudioFlinger 也被认为是 Android 音频系统的引擎。
AudioFlinger 对外提供的主要的服务接口如下:
-
createTrack:新建输出流管理对象: 找到对应的 PlaybackThread,创建输出流管理对象 Track,然后创建并返回该 Track 的代理对象 TrackHandle
-
createRecord:新建输入流管理对象:找到 RecordThread,创建输入流管理对象 RecordTrack,然后创建并返回该 RecordTrack 的代理对象 RecordHandle
-
openOutput:打开输出流:打开输出流设备,并创建 PlaybackThread 对象
-
openInput:打开输入流:打开输入流设备,并创建 RecordThread 对象
-
closeOutput:关闭输出流:移除并销毁 PlaybackThread 上面挂着的所有的 Track,退出 PlaybackThread,关闭输出流设备
-
closeInput:关闭输入流:退出 RecordThread,关闭输入流设备
-
sampleRate:获取硬件设备的采样率
-
format:获取硬件设备的音频格式
-
frameCount:获取硬件设备的周期帧数
-
latency:获取硬件设备的传输延迟
-
masterVolume:主输出设备的音量
-
masterMute:主输出设备静音
-
setMasterVolume:调节主输出设备的音量
-
setMasterMute:静音主输出设备
-
streamVolume:音频流的音量
-
streamMute:音频流静音
-
setStreamVolume:调节指定类型的音频流的音量,这种调节不影响其他类型的音频流的音量
-
setStreamMute:静音指定类型的音频流
-
setVoiceVolume:调节通话音量
-
setMicMute:静音麦克风输入
-
getMicMute:获取麦克风静音
-
setMode:切换音频模式:音频模式有 4 种,分别是 Normal、Ringtone、Call、Communicatoin
-
setParameters:设置音频参数:往下调用 HAL 层相应接口,常用于切换音频通道
-
getParameters:获取音频参数:往下调用 HAL 层相应接口
-
setAudioPortConfig:
其它接口:
-
setRecordSilenced
-
registerClient
-
getInputBufferSize
-
openDuplicateOutput
-
suspendOutput
-
restoreOutput
-
invalidateStream
-
setVoiceVolume
-
getRenderPosition
-
getInputFramesLost
-
newAudioUniqueId
-
acquireAudioSessionId
-
releaseAudioSessionId
-
queryNumberEffects
-
queryEffect
-
getEffectDescriptor
-
createEffect
-
moveEffects
-
loadHwModule
-
getPrimaryOutputSamplingRate
-
getPrimaryOutputFrameCount
-
setLowRamDevice
-
getAudioPort
-
createAudioPatch
-
releaseAudioPatch
-
listAudioPatches
-
getAudioHwSyncForSession
-
systemReady
-
audioPolicyReady
-
frameCountHAL
-
getMicrophones
-
setMasterBalance
-
getMasterBalance
-
setEffectSuspended
-
setAudioHalPids
-
setVibratorInfos
-
updateSecondaryOutputs
-
getMmapPolicyInfos
-
getAAudioMixerBurstCount
-
getAAudioHardwareBurstMinUsec
-
setDeviceConnectedState
可以归纳出 AudioFlinger 响应的服务请求主要有:
-
音量调节(Audio Volume)
-
静音操作(Audio Mute)
-
音频模式切换(Audio Mode)
-
音频参数设置(Audio Parameters)
-
音效模块(Audio PatchPanel )
-
音频设备管理(Audio Device)
-
音频流管理(Audio Thread)
-
音频路径管理(Audio PatchPanel)
-
音频线程管理(Audio Thread)