如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
ALSA框架介绍——音频通路
陈金泉2011-3-3
内容:
1、简单介绍android音频状态与音频通路、codec。
2、通过ALSA的controls控制codec实现通路切换。
2.1、control
2.2、widget
2.3、audio_map
2.4、通路切换
2.5、alsa_amixer
1、简单介绍android音频状态与音频通路、codec、声卡注册
1.1、android音频状态与音频通路
Android的音频通路管理主要是在AudioPolicyManager中完成的,包括音量管理,音频策略(strategy)管理,输入输出设备管理。
Android音频模式状态图:
Android的音频模式状态包括:NORMAL、IN_CALL、RINGTONE。
AudioPolicyManager的mPhoneState成员变量记录了当前音频模式状态,在音频通路切换时的设备选择时会使用到。
在这3种音频模式状态下一共有10种音频数据流,定义如下:
VOICE_CALL=0,
SYSTEM=1,
RING=2,
MUSIC=3,
ALARM=4,
NOTIFICATION=5,
BLUETOOTH_SCO=6,
ENFORCED_AUDIBLE=7,
DTMF=8,
TTS=9,
Android把10种streamtype归纳为4种路由策略,getStrategy(stream_type)根据stream_type,返回对应的routing_strategy值,也就是返回stream_type对应的路由策略。
AudioPolicyManager中有两个成员变量:mAvailableOutputDevices和mAvailableInputDevices,他们记录了当前可用的输入和输出设备。
getDeviceForStrategy()则结合routing_strategy、mPhoneState以及mAvailableOutputDevices或mAvailableInputDevices,返回可用的device。
所以android设置音频通路时会先根据getStrategy(stream_type)和getDeviceForStrategy()函数获取相应的输出、输入设备,然后通过setOutputDevice(mHardwareOutput,newDevice)函数调用到alsa_default.cpp中的s_route、s_open函数控制到底层。
s_open函数用会调用deviceName(handle,devices,mode),这个函数会根据Devices的值来组合成字符串。然后通过snd_pcm_open获取asound.conf中相应的pcm配置里面的controls,并对调用到codec驱动当中对codec进行配置。
例子:
Music(NORMAL)->STRATEGY_MEDIA->DEVICE_OUT_WIRED_HEADSET
->AndroidPlayback_Headset_normal
Ring(RINGTONE)->SONIFICATION->DEVICE_OUT_SPEAKER和DEVICE_OUT_WIRED_HEADSET
->AndroidPlayback_Speaker_Headset_ringtone
1.2、codec
Codec中文译名是编译码器,由英文编码器(coder)和译码器(decoder)两词的词头组成的缩略语。指的是数字通信中具有编码、译码功能的器件。
Wm8900芯片内部框图:
Wm8900内部包括有:ADC、DAC、OutputMixer、InputMixer、InputPGA、LINEOUT2、HPOUT等
音频输入口:INPUT1、INPUT2、INPUT3、I2S_DAC
音频输入口:HPOUT、LINEOUT1、LINEOUT2、I2S_ADC
Codec输入输出选择、音量控制、各个部分的power会都会通过control、widgets注册到不同的list中供ALSA和用户使用。
2、通过ALSA的controls控制codec实现通路切换。
2.1、control
Codec中会把一部分功能的设置信息,以control的形式通过snd_soc_add_controls函数添加到声卡中,我们可以通过asound.conf去控制这些control。
如:
SOC_SINGLE("LeftInputPGASwitch",WM8900_REG_LINVOL,6,1,1),
#defineSOC_SINGLE(xname,reg,shift,max,invert)\
{ .iface=SNDRV_CTL_ELEM_IF
快乐****蜜蜂
实名认证
内容提供者
最近下载