alsa用户态tinyalsa

本文介绍Android系统中AudioHAL如何通过TinyALSA与内核层声卡设备交互。主要内容包括声卡设备的结构、TinyALSA中的关键文件pcm.c和mixer.c的作用及其实现方式,并列举了一些具体的mixer control配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.youkuaiyun.com/azloong/article/details/17614859

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值