alsa用户态tinyalsa

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值