关键词不能为空

当前您在: 主页 > 英语 >

ALSA框架介绍-音频通路

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-03-02 21:30
tags:

-

2021年3月2日发(作者:拟)


手机事业部




ALSA


框架介绍——音频通路






















































陈金泉



2011-3-3


内容:



1


、 简单介绍


android


音频状态与音频通路、


codec




2

< p>
、通过


ALSA



con trols


控制


codec


实现通路切 换。




2.1



control


2.2



widget


2.3



audio_map


2.4


、通路切换



2.5



alsa_amixer < /p>


本文档为瑞芯微电子手机事业部成员撰写及提供,不得用于工作之外的使用及交流。



1



手机事业部




1


、简单介绍


android


音频状 态与音频通路、


codec


、声卡注册



1



1



android


音频状态与音频通路



Android


的音频通路管理主要是在


A udioPolicyManager


中完成的,包括音量管理,音频

< br>策略(


strategy


)管理,输入输出设备管理。< /p>




Android


音频模式状态图:




Android


的音频模式状态包括 :


NORMAL



IN_CALL



RINGTONE



AudioPolicyManager



mPhoneState


成员变量记录了当前音频模式状态,在音频


通路切换时的设备选择时会使用到。



在这


3


种音频模式状态下一共有


10

< p>
种音频数据流,定义如下:











VOICE_CALL








= 0,










SYSTEM












= 1,










RING














= 2,










MUSIC













= 3,










ALARM













= 4,










NOTIFICATION






= 5,










BLUETOOTH_SCO





= 6,


本文档为瑞芯微电子手机 事业部成员撰写及提供,不得用于工作之外的使用及交流。



2



手机事业部












ENFORCED_AUDIBLE = 7,











DTMF














= 8,










TTS















= 9,




Android

< br>把


10



stream typ e


归纳为


4


种路由策略,


getStrategy(stream_type)


根据

< br>stream_type


,返回对应的


routing_ strategy


值,也就是返回


stream_type


对应


的路由策略。



AudioPolicyManager


中有两个成员变量:


mAvailableOutputDevices



mAva ilableInputDevices


,他们记录了当前可用的输入和输出设备。



getDeviceForStrategy()


则结合


routing_strategy



mPhoneState


以及


mAvailab leOutputDevices



mAvailableIn putDevices


,返回可用的


device




所以


android< /p>


设置音频通路时会先根据


getStrategy(stream _type)



getDeviceForStrategy( )


函数获取相应的输出、输入设备,然后通过


setOutpu tDevice(mHardwareOutput, newDevice)


函数调用 到


alsa_



s_route



s_open


函 数控制到底层。



s_open


函数用 会调用


deviceName(handle, devices, mode)


,这个函数会根据


Devices


的值来组合 成字符串。然后通过


snd_pcm_open


获取

< p>


中相应的


pcm


配置里面 的


controls


,并对调用到


co dec


驱动当中对


codec


进行配置 。



本文档为瑞芯微电子手机事业部成员撰写及提供,不得用于 工作之外的使用及交流。



3



手机事业部




例子:



Music

< br>(


NORMAL




-> STRATEGY_MEDIA ->




DEVICE_OUT_WIRED_HEADSET



->



AndroidPlayback_Headset_normal



Ring



RINGTONE




->



SONIFICATION



-> DEVICE_OUT_SPEAKER




DEVICE_OUT_WIRED_HEADSET



->




An droidPlayback_Speaker_Headset_ringtone



本文档为瑞芯微电子手机事业部成员撰写及提供,不得用于工作之外的使用及交流。



4



手机事业部




1.2



codec


Codec


中文译名是编译码器,由英文编码器(


co der


)和译码器(


decoder


) 两词的


词头组成的缩略语。指的是数字通信中具有编码、译码功能的器件。



Wm8900


芯片内部框图:





Wm8900

内部包括有:


ADC



DAC



Output Mixer



Input Mixer



Input PGA


、< /p>


LINEOUT2



HPOUT





音频输入口:< /p>


INPUT1



INPUT2

< p>


INPUT3



I2S _DAC


音频输入口:


HPOUT



LINEOUT1



LINEOUT2



I2S_ADC



Codec


输入输出选择、音量控制、各个部分的


po wer


会都会通过


control


、< /p>


widgets



册到不同的

< p>
list


中供


ALSA


和 用户使用。




本文档为瑞芯微电子手 机事业部成员撰写及提供,不得用于工作之外的使用及交流。



5



手机事业部




2


、通过


ALSA



controls


控制


codec

实现通路切换。



2.1



control

< p>
Codec








< p>








control




< p>



snd_soc_add_controls


函数添加到声卡中,我们可以通过



去控 制这些


control




如:



SOC_SINGLE(



#define SOC_SINGLE(xname, reg, shift, max, invert)


{


.iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname,



.info = snd_soc_info_volsw, .get = snd_soc_get_volsw,



.put = snd_soc_put_volsw,



.private_value =



SOC_SINGLE_VALUE(reg, shift, max, invert) }




1



iface


字段定义了


control


的类型, 形式为


SNDRV_CTL_ELEM_IFACE_XXX


, 通


常是


MIXER



2



name


是名称标识字符串,


control


的名称非常重要,因为


control


的作用由名称


来区分。


name


定义的标准是


“SOURCE DIRECTION FUNC TION”




源、方向、功能





3

< p>


info


函数可以得到对应

control


的详细信息。




4



get()


函数用于得到


control


的目前值并返回用户空间。




5



put()


函数 用于从用户空间写入值,如果值被改变,该函数返回


1


,否则返 回


0


;如果


发生错误,该函数返回错误 码。




6



private_value


保存了改


control


用于设置


codec


的 详细信息。


这些也就是与


codec


直 接相关的信息。



reg


表示寄存器地 址;


shift


表示数据偏移量;


ma x


表示数据最大值;


invert


表示 是否倒置。



所有的


control< /p>


都是通过



snd_soc_add_controls(codec,


wm8900_snd_controls,


ARRAY_S IZE(wm8900_snd_controls))



数< /p>







中。



本文档为瑞 芯微电子手机事业部成员撰写及提供,不得用于工作之外的使用及交流。





6



手机事业部




2.2



widget


< p>
Widget


可以认为是


codec


内部各个部件,需要根据


audio_map


对应的


path


来调用。


Widget


的管理和控制都是在


soc- dapm.c


中去实现的。



通过


snd_soc_dapm_new_controls


函数添加到


codec->dapm_widgets


中。




SND_SOC_DAPM_PGA(


0),


SND_SOC_DAPM_PGA


会直接把


widg et


对应的信息添加到


codec->dapm_widget s



,包括


id



reg



shift



max


等。


id


用来区分不同的


widget


类型,不同的


id


控制方式


也不同。



codec


通过


snd_soc_add_controls



wm890 0_add_widgets


两个函数把来添



control



widgets

到不同的


list


里。



wm8900_add_widgets


中除了把


wm8900_dapm_widgets


结构体里面的所有


widgets


信息添加到


list


里 ,还通过


snd_soc_dapm_add_routes


函 数把


audio_map


里的信息添加到


list


里。



本文档为瑞芯微电子 手机事业部成员撰写及提供,不得用于工作之外的使用及交流。



7



手机事业部




2.3



audio_map


2.3.1



audio_map

< p>
介绍




重点说下


audio_map


,因为


audio_ma p


是一个帮助我们切换通路的很重要的部分。


我们可以根据


audio_map


来控制


codec


实现通路而不用去了解


codec


具体内部 需要怎么


配置寄存器来实现连接。这样就可以不用怎么去了解


c odec


芯片。



< br>audio_map


的类型


snd_soc_dapm_ route


定义为:




struct snd_soc_dapm_route {



const char *sink;



const char *control;



const char *source;


};



可以理解为:目的地,控制条件,源头。




Codec


的通路(连接方式)非常 多,以


WM8900


为例举个例子。从


HP_L


输出(目


的地


sink



的信号可能来自


MIC


DAC


(源头


source




而这个取决于


codec


的配置


(控


制条件


control


)。



每个通路在


codec


内部又被分成了好几个部分,也就是前面 说到的


widgets


,每个


widg et


都可以做为一个数据流的源头或者目的地。




这些


widgets


可能的


path


都在


audi o_map


罗列出来了。



如下是


WM8900


一部分


audio_map< /p>




/* Outputs */


{


{


{


{


本文档为瑞芯微电子手机事业部成员撰写及提供,不得用于工作之外的使用及交流。



8



手机事业部





{


{


{


{



{


{


{


{



{


{


{


{


{

< br>


{


{


{


{


{



{


{


{


{




audio_map


中可以看出,对于


LI NEOUT2


LP


,可以是


Headphone < /p>


Amplifier



source


,也可以是


Left Output Mixer

< br>的


sink




本文档为瑞芯微电子手机事业部成员撰写及提供,不得用于工作之外的使用及交流。


9

-


-


-


-


-


-


-


-



本文更新与2021-03-02 21:30,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/693351.html

ALSA框架介绍-音频通路的相关文章