ALSA概述

1:概念
ALSA是Advanced Linux Sound Architecture 的缩写,目前是linux主流的音频体系架构。
参考网站:http://www.alsa-project.org/
内核空间,ALSA提供了ALSA Driver core,用户空间,ALSA提供了ALSA lib库,为用户程序提供统一的编程接口,简化应用程序编写的难度。
SOC(system on chip),片上系统即嵌入式系统,即表示硬件、又可以表示软件。针对SOC,在ALSA Driver core的基础上进行了封装和增强,形成ALSA SOC架构,简称ASOC。
ALSA架构把音频驱动分为三个部分:platform driver、codec driver、machine driver。

同一个platform和codec,由于硬件接法的不同,machine也会不一样。同一个platform上可以接各种codec,当codec改变时只需要移植codec driver和修改部分machine driver即可,不需要修改platform driver。同理,codec移植到不同的platform上时,codec driver也不需要修改。


2:ALSA代码文件结构
sound
            /core
                     /oss
                    /seq
            /ioctl32
            /include
            /drivers
            /i2c
            /synth
                    /emux
            /pci
                    /(cards)
            /isa
                    /(cards)
            /arm
            /ppc
            /sparc
            /usb
            /pcmcia /(cards)
            /oss
            /soc
                    /codecs
core    该目录包含了ALSA驱动的中间层,它是整个ALSA驱动的核心部分
core/oss  包含模拟旧的OSS架构的PCM和Mixer模块
core/seq        有关音序器相关的代码
include          ALSA驱动的公共头文件目录,该目录的头文件需要导出给用户空间的应用程序使用,通常,驱动模块私有的头文件不应放置在这里
 drivers           放置一些与CPU、BUS架构无关的公用代码
i2c                 ALSA自己的I2C控制代码
pci                 pci声卡的顶层目录,子目录包含各种pci声卡的代码
isa                 isa声卡的顶层目录,子目录包含各种isa声卡的代码
soc                针对system-on-chip体系的中间层代码
soc/codecs    针对soc体系的各种codec的代码,与平台无关

3:ALSA 设备文件结构
/dev/snd
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,pcmC0D0p中的p表示playback,pcmC0D0c中的c表示capture




一个声卡设备可以实现挂载多个子设备,设备类型在include/sound/core.h文件里定义设备的类型如下:
typedef int __bitwise snd_device_type_t;
#define SNDRV_DEV_TOPLEVEL ((__force snd_device_type_t) 0)
#define SNDRV_DEV_CONTROL ((__force snd_device_type_t) 1)
#define SNDRV_DEV_LOWLEVEL_PRE ((__force snd_device_type_t) 2)
#define SNDRV_DEV_LOWLEVEL_NORMAL ((__force snd_device_type_t) 0x1000)
#define SNDRV_DEV_PCM ((__force snd_device_type_t) 0x1001)
#define SNDRV_DEV_RAWMIDI ((__force snd_device_type_t) 0x1002)
#define SNDRV_DEV_TIMER ((__force snd_device_type_t) 0x1003)
#define SNDRV_DEV_SEQUENCER ((__force snd_device_type_t) 0x1004)
#define SNDRV_DEV_HWDEP ((__force snd_device_type_t) 0x1005)
#define SNDRV_DEV_INFO ((__force snd_device_type_t) 0x1006)
#define SNDRV_DEV_BUS ((__force snd_device_type_t) 0x1007)
#define SNDRV_DEV_CODEC ((__force snd_device_type_t) 0x1008)
#define SNDRV_DEV_JACK          ((__force snd_device_type_t) 0x1009)
#define SNDRV_DEV_COMPRESS ((__force snd_device_type_t) 0x100A)
#define SNDRV_DEV_LOWLEVEL ((__force snd_device_type_t) 0x2000)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值