alsa用户态tinyalsa

来源:互联网 发布:java 高级程序员 书 编辑:程序博客网 时间:2024/05/16 09:25

sound card

先看下kernel提供的声卡

/dev/snd $ lscontrolC0controlC1controlC2controlC3pcmC0D0cpcmC0D0ppcmC0D1cpcmC0D1ppcmC0D2cpcmC0D3cpcmC0D4ppcmC1D0cpcmC1D0ppcmC2D0cpcmC2D0ppcmC3D0cpcmC3D0ptimer

这里有四张声卡

controlC0controlC1controlC2controlC3

最后一个C是card

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

pcmC0D0cpcmC0D0ppcmC0D1cpcmC0D1ppcmC0D2cpcmC0D3cpcmC0D4p
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 0
原创粉丝点击