ALSA各文件作用
来源:互联网 发布:unity3d导出fbx插件 编辑:程序博客网 时间:2024/06/10 10:23
sound/core/pcm_native.c 对下层的PCM驱动提供包装,为上层提供统一的接口,snd_pcm_f_ops_playback文件操作结构提供播放功能的函数,snd_pcm_f_ops_capture文件操作结构提供录音功能的函数。
sound/core/control.c对下层的Control驱动提供包装,为上层提供统一的接口,snd_ctl_f_ops文件操作结构提供控制功能函数,其中主要是snd_ctl_ioctl函数。
播放的过程大致如下:
Snd_pcm_f_ops_playback.write即snd_pcm_write调用snd_pcm_lib_write
snd_pcm_lib_write调用Snd_pcm_lib_write1
Snd_pcm_lib_write1通过snd_pcm_lib_write_transfer把数据写入DMA buffer中,然后调用snd_pcm_start开始DMA传输数据到WM9713里去。
录音的过程大致如下:
Snd_pcm_f_ops_capture.read即snd_pcm_read调用snd_pcm_lib_read
snd_pcm_lib_read调用snd_pcm_lib_read1
snd_pcm_lib_read1调用snd_pcm_start从WM9713传输数据到DMA内存中,然后调用snd_pcm_lib_read_transfer拷贝数据到用户的buffer.
Control接口主要让用户空间的应用程序(alsa-lib)可以访问和控制音频codec芯片中的多路开关,滑动控件等。对于Mixer(混音)来说,Control接口显得尤为重要,从ALSA 0.9.x版本开始,所有的mixer工作都是通过control接口的API来实现的。
Controls的定义
要自定义一个Control,我们首先要定义3个回调函数:info,get和put。然后,定义一个snd_kcontrol_new结构:
- static struct snd_kcontrol_new my_control __devinitdata = {
- .iface = SNDRV_CTL_ELEM_IFACE_MIXER, //control的类型
- .name = "PCM Playback Switch", //control的名字。因为control的作用是按名字来归类的。ALSA已经预定义了一些control的名字。
- .index = 0, //保存该control的在该卡中的编号
- .access = SNDRV_CTL_ELEM_ACCESS_READWRITE, //该control的访问类型
- .private_value = 0xffff, //包含了一个任意的长整数类型值。该值可以通过info,get,put这几个回调函数访问。
- .info = my_control_info, //用于获取control的详细信息,alsa已经为我们实现了一些通用的info回调函数
- .get = my_control_get,
- .put = my_control_put
- };
- ALSA各文件作用
- alsa学习--4.用alsa播放wav文件
- ALSA
- alsa
- alsa
- ALSA
- alsa
- ALSA
- ALSA
- alsa
- alsa
- 各文件内容和作用
- .settings各文件的作用
- Linux各文件的作用
- alsa音频相关文件的移植
- alsa音频相关文件的移植
- UNIX系统下各文件的作用
- linux各文件文件夹的作用
- java递归算法实现
- 实现矩阵对角线输出
- SQL Server 触发器入门详解
- 将文件转换成二进制,再由二进制转换成文件
- Learn Python The Hard Way学习(30) - Else和If
- ALSA各文件作用
- applicationContext.xml
- iOS应用突然间无法启动的怪异问题 LOG:A valid provisioning profile for this executable was not found
- 架构之美第四章-架构与美
- XCODE 4.3.1 调试IOS3的PHONE
- 转 parted创建GPT分区
- Get和Set Cookie
- dwr.xml
- 转变发展方式,提升发展质量