alsa声卡学习笔记

原创 2012年03月21日 14:23:05

ALSA由下面几部分组成:

1.       Driver 内核驱动程序,包括硬件相关的和一些公共代码。有近30万行代码,太庞大的了,只选择性的看了core里一些代码。比如粗略的浏览了一遍《Writing an ALSA Driver》,写得不错。

2.       Library 用户空间的函数库,这是给应用程序使用的。要包含头文件asoundlib.h,链接共享库libasound.so。

3.       Lib-plugins 提供了两个插件,一个用jack模拟alsa接口,一个用oss来模拟alsa接口。高!alsa可以作为jack的后端,jack也可以作为alsa的后端,alsa可以模拟oss,oss也可以模拟alsa。

4.       Utilities一些基于alsa的命令行小程序,可以作为示例代码参考。

5.       Tools 一些小工具, 比如vxloader可以用来加载Firmware。

6.       Firmware 一些设备的Firmware,这些Firmware由内核在适当的时候通过hotplug加载。Firmware其实就是一些程序,每个设备实际上就是一个独立的嵌入式系统,声卡也一样,有自己的程序。但为了节约成本和方便升级,这些设备可能只有RAM而没有ROM,在起动设备时,由系统(如linux)把设备的Firmware加载到设备的RAM里,设备才能运行。

目前ALSA内核提供给用户空间的接口有:

1.       Information Interface (/proc/asound)
2.       Control Interface (/dev/snd/controlCX)
3.       Mixer Interface (/dev/snd/mixerCXDX)
4.       PCM Interface (/dev/snd/pcmCXDX)
5.       Raw MIDI Interface (/dev/snd/midiCXDX)
6.       Sequencer Interface (/dev/snd/seq)
7.       Timer Interface (/dev/snd/timer)
和OSS类似,也是以文件的方式提供的,但这些接口是给alsalib使用的,而不是给应用程序使用的。应用程序应该使用alsalib,或者更高级的接口,比如jack提供的接口。
8.       OSS Compat 与OSS兼容的代码。

$ cd /dev/snd
$ ls -l

crw-rw----+ 1 root audio 116, 8 2011-02-23 21:38 controlC0
crw-rw----+ 1 root audio 116, 4 2011-02-23 21:38 midiC0D0
crw-rw----+ 1 root audio 116, 7 2011-02-23 21:39 pcmC0D0c
crw-rw----+ 1 root audio 116, 6 2011-02-23 21:56 pcmC0D0p
crw-rw----+ 1 root audio 116, 5 2011-02-23 21:38 pcmC0D1p
crw-rw----+ 1 root audio 116, 3 2011-02-23 21:38 seq
crw-rw----+ 1 root audio 116, 2 2011-02-23 21:38 timer
$

    我们可以看到以下设备文件:

  • controlC0 -->                 用于声卡的控制,例如通道选择,混音,麦克风的控制等
  • midiC0D0  -->                用于播放midi音频
  • pcmC0D0c --〉               用于录音的pcm设备
  • pcmC0D0p --〉               用于播放的pcm设备
  • seq  --〉                        音序器
  • timer --〉                       定时器

其中,C0D0代表的是声卡0中的设备0,pcmC0D0c最后一个c代表capture,pcmC0D0p最后一个p代表playback,这些都是alsa-driver中的命名规则。



ALSA学习可以参考:

ALSA project homepage
http://www.alsa-project.org/main/index.php/Main_Page

ALSA project - the C library reference Modules
http://www.alsa-project.org/alsa-doc/alsa-lib/modules.html

ALSA Programming HOWTO
http://www.suse.de/~mana/alsa090_howto.html

ALSA Wiki

https://wiki.archlinux.org/index.php/Advanced_Linux_Sound_Architecture_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#Software_mixing_.28dmix.29

A Tutorial on Using the ALSA Audio API
http://www.equalarea.com/paul/alsa-audio.html

ALSA 驱动分析

http://blog.csdn.net/droidphone




ALSA声卡07_分析调用过程_学习笔记

1、编译新的strace工具分析aplay和amixer应用程序对声卡的调用过程 (1)因为旧的strace工具不能识别不能识别alsa声卡驱动程序里面的ioctrl. (2)编译过程参考http:/...

ALSA声卡09_从零编写之参数设置_学习笔记

1、参数设置分析 (1)open: soc_pcm_open 依次调用cpu_dai, dma, codec_dai, machine的open或startup函数 只在dma的open函...

ALSA声卡08_从零编写之框架_学习笔记

1、整体框架 (1)图示((DAI(全称Digital Audio Interface)接口))  在嵌入式系统里面,声卡驱动是ASOC,是在ALSA驱动上封装的一层,包括以下三大块 (2)程序框...

ALSA声卡12_从零编写之添加音量控制_学习笔记

1、设置音量时应用程序的调用过程 (1)strace分析: amixer cset numid=1 30 (设置音量) /dev/snd/controlC0 open SNDRV_CTL_...

ALSA声卡笔记3--ASoC驱动重要结构体关系图

ALSA与ASOC如何关联 1、(如何写alsa声卡驱动) (1)构造snd_card结构体,snd_card_create()构造snd_card结构体并自动创建控制接口。调用函数snd_ctrl...

linux alsa机制学习笔记1

  • 2014年11月04日 21:57
  • 76KB
  • 下载

linux alsa机制学习笔记2

  • 2014年11月04日 21:59
  • 92KB
  • 下载

ALSA声卡笔记1---ALSA驱动框架

1、声卡驱动程序sound.c (1)入口函数里通过register_chrdev()函数注册file_operations 结构体 (2)file_operations 结构体,里面只有open函...

Linux中用ALSA驱动声卡流程详解

一、什么是ALSA ;   Advanced Linux Sound Architecture 的简称为 ALSA ,译成中文的意思是 Linux 高级声音体系(这是我直译的,可能译的不对);一谈到...

ALSA(Advanced Linux Sound Architecture)声卡编程介绍

linux下音频编程很好的入门例程,发扬光大。  http://mysuperbaby.iteye.com/blog/932729 英文原文: http://www.linuxjournal....
  • wen0605
  • wen0605
  • 2013年01月16日 15:47
  • 2085
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:alsa声卡学习笔记
举报原因:
原因补充:

(最多只允许输入30个字)