alsa用户态tinyalsa
来源:互联网 发布:java 高级程序员 书 编辑:程序博客网 时间:2024/05/16 09:25
sound card
先看下kernel提供的声卡
/dev/snd $ lscontrolC0controlC1controlC2controlC3pcmC0D0cpcmC0D0ppcmC0D1cpcmC0D1ppcmC0D2cpcmC0D3cpcmC0D4ppcmC1D0cpcmC1D0ppcmC2D0cpcmC2D0ppcmC3D0cpcmC3D0ptimer
这里有四张声卡
controlC0controlC1controlC2controlC3
最后一个C是card
每一张声卡下面有多个device,如card0
pcmC0D0cpcmC0D0ppcmC0D1cpcmC0D1ppcmC0D2cpcmC0D3cpcmC0D4ppcmC0D0c 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
- alsa用户态tinyalsa
- ALSA 用户空间之 TinyAlsa
- ALSA 用户空间之 TinyAlsa
- ALSA 用户空间之 TinyAlsa
- ALSA用户空间之TinyAlsa
- alsa-lib、tinyalsa以及基于alsa的用户空间编程
- ALSA and TinyAlsa
- ALSA and TinyAlsa
- ALSA and TinyAlsa
- ALSA and TinyAlsa
- ALSA and TinyAlsa
- ALSA and TinyAlsa
- tinyalsa
- linux中的alsa工具与Android中的tinyalsa工具
- ALSA用户空间编程
- ALSA用户空间编程
- alsa 用户空间编程
- ALSA用户空间编程
- IOS解压缩和压缩文件
- configure交叉编译
- startup_LPC17XX.s 启动文件分析
- iPhone6分辨率与适配
- 编程题目《[usaco2008jan_silver]架设电话线》题解
- alsa用户态tinyalsa
- 20140916 【 STL - 暴力 】 bestcoder #1 + hdoj 4858 项目管理
- Ego2014916001——golang开发环境搭建(支持交叉编译环境)
- iOS开发技巧 -- 复用代码片段
- js判断是否在微信浏览器中打开
- STL algorithm算法includes(23)
- linux proxy apt.conf
- IBATIS动态SQL
- Storm OutputCollector并发问题导致NullPointerException的解决