您的位置:首页 > 其它

alsa用户态tinyalsa

2014-09-16 14:04 281 查看

sound card

先看下kernel提供的声卡

/dev/snd $ ls
controlC0
controlC1
controlC2
controlC3
pcmC0D0c
pcmC0D0p
pcmC0D1c
pcmC0D1p
pcmC0D2c
pcmC0D3c
pcmC0D4p
pcmC1D0c
pcmC1D0p
pcmC2D0c
pcmC2D0p
pcmC3D0c
pcmC3D0p
timer


这里有四张声卡

controlC0
controlC1
controlC2
controlC3


最后一个C是card

每一张声卡下面有多个device,如card0

pcmC0D0c
pcmC0D0p
pcmC0D1c
pcmC0D1p
pcmC0D2c
pcmC0D3c
pcmC0D4p
pcmC0D0c   C0D0c card device caputre

pcmC0D0p   C0D0p card device playback

tinyalsa

android audio hal可以通过tinyalsa和kernel alsa交互。tinyalsa代码在external/tinyalsa

主要关注两个文件pcm.c mixer.c

audio hal向底层读写数据就是通过PCM Interface

pcm.c 操作的文件是pcmC%uD%u%c

主要使用linux提供的open/close/ioctl/mmap

主要函数pcm_open/pcm_close/pcm_is_ready/pcm_read/pcm_write

打开声卡就调用pcm_open

想声卡写数据就调用pcm_write

mixer.c 操作的文件是controlC%

设置mixer control

主要函数mixer_ctl_set_enum_by_string mixer_ctl_set_value

像打开audio patch、设置pga音量都是都通过Control Interface

<ctl name="AD IISMUX" val="0" />
<ctl name="ADCL Mixer AILADCL Switch" val="0" />
<ctl name="ADCR Mixer AIRADCR Switch" val="0" />
<ctl name="ADCL Mixer AuxMICADCL Switch" val="0" />
<ctl name="ADCR Mixer AuxMICADCR Switch" val="0" />
<ctl name="ADCL Mixer HPMICADCL Switch" val="0" />
<ctl name="ADCR Mixer HPMICADCR Switch" val="0" />
<ctl name="ADCL Mixer MainMICADCL Switch" val="0" />
<ctl name="ADCR Mixer MainMICADCR Switch" val="0" />
<ctl name="HPL Mixer ADCRHPL Switch" val="0" />
<ctl name="HPR Mixer ADCLHPR Switch" val="0" />
<ctl name="HPL Mixer DACLHPL Switch" val="0" />
<ctl name="HPR Mixer DACRHPR Switch" val="0" />
<ctl name="SPKL Mixer ADCLSPKL Switch" val="0" />
<ctl name="SPKL Mixer ADCRSPKL Switch" val="0" />
<ctl name="SPKL Mixer DACLSPKL Switch" val="0" />
<ctl name="SPKL Mixer DACRSPKL Switch" val="0" />
<ctl name="HP Mic Function" val="0" />
<ctl name="HeadPhone Function" val="0" />
<ctl name="Line Function" val="0" />
<ctl name="Mic Function" val="0" />
<ctl name="Speaker Function" val="0" />
<ctl name="Digital FM Function" val="0" />
<ctl name="Aux Mic Function" val="0" />
<ctl name="Earpiece Function" val="0" />
<ctl name="SPKL Playback Volume" val="10" />
<ctl name="SPKR Playback Volume" val="10" />
<ctl name="HPL Playback Volume" val="8" />
<ctl name="HPR Playback Volume" val="8" />
<ctl name="DACL Playback Volume" val="7" />
<ctl name="DACR Playback Volume" val="7" />
<ctl name="ADCL Capture Volume" val="12" />
<ctl name="ADCR Capture Volume" val="12" />
<ctl name="EAR Playback Volume" val="10" />


tinyalsa另外一个会涉及到的是pcm_config

可以参考这篇wiki

http://blog.csdn.net/azloong/article/details/17614859
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  alsa