Linux 音频ALSA技术说明--part1[转&学习]

转载:点击打开链接


1       ALSA Overview

      ALSA(Advanced Linux Sound Architecture(高级Linux声音体系)的缩写)是为声卡提供驱动的Linux内核组件,以替代原先的OSS(开放声音系统)。ALSA除了像OSS那样提供一组内核驱动程序模块以外,还专门为简化应用程序的编写提供了相应的库函数,与OSS提供的基于ioctl的原始编程接口相比,ALSA函数库使用起来要更加方便一点  [QW--我就是想知道怎么使用 ,嘿嘿]。

1.1   ALSA features

      ALSA has the following significant features: 

1.Efficient support for all types of audio interfaces, from consumer sound cards to professional multichannel audio interfaces. (支持多种声卡设备--QW--从通用音频卡到混合通道音频接口)

2.Fully modularized sound drivers. (模块化的内核驱动程序)

3.SMP and thread-safe design. (支持SMP和多线程)[SMP--多处理系统

4.User space library (alsa-lib) to simplify application programming and provide higher level functionality. (提供应用开发函数库以简化应用程序开发)

5.Support for the older Open Sound System (OSS) API, providing binary compatibility for most OSS programs. (支持OSS API,兼容OSS应用程序)

1.2   ALSA子项目

      ALSA具有更加友好的编程接口,并且完全兼容于OSS,对应用程序来讲无疑是一个更佳地选择。ALSA系统包括以下7个子项目,其中只有驱动包是必须的:

      ----------------   驱动包alsa-driver                                                 

      ------------------开发包alsa-libs

      ------------------开发包插件alsa-libplugins                                   

     -------------------- 设置管理工具包alsa-utils

      -------------------其他声音相关处理小程序包alsa-tools               

      -------------------特殊音频固件支持包alsa-firmware

      --------------------OSS接口兼容模拟层工具alsa-oss.

      alsa-driver指内核驱动程序,包括硬件相关的代码和一些公共代码,非常庞大。[QW--尼玛,辰汉说是商业机密,不给提供阿

      alsa-libs指用户空间的函数库,提供给应用程序使用,应用程序应包括头文件asoundlib.h。并使用共享库libasound.so。

      alsa-utils包含一些基于ALSA的用于控制声卡的应用程序,如alsaconf(侦测系统中声卡并写一个适合的ALSA配置文件),aplay(基于命令行的声音文件播放),arecord(基于命令行的声音文件录制)等。[QW--测了N多遍话筒就是不好使啊,录音录制不了阿

1.3   ALSA接口 [QW--这些接口都不是给用户使用的阿,都是给alsa-lib使用的,所以主要功夫还应该下在lib上啊

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

      信息接口(proc/asound)

      控制接口(dev/snd/controlCX):提供管理声卡注册和请求可用设备的通用功能

      混音器接口(dev/snd/mixerCXDX)

      PCM接口dev/snd/pcmCXDX):管理数字音频回放(playback)和录音(capture)的接口[QW--现在我就是用的这个接口啊

      Raw迷笛接口(dev/snd/midiCXDX):支持MIDI(Musical Instrument Digital Interface),标准的电子乐器。这些API提供对声卡上MIDI总线的访问。这个原始接口基于MIDI事件工作,由程序员负责管理协议以及时间处理。

      音序器接口(dev/snd/seq)

      定时器接口(dev/snd/timer):为同步音频事件提供对声卡上时间处理硬件的访问。

      和OSS类似,上述接口也以文件的方式被提供,不同的是这些接口被提供给alsa-lib使用,而不是直接给应用程序使用的。应用程序最好使用alsa-lib或者更高级的接口。

1.4   ALSA体系结构

      下图所示为ALSA声卡驱动与用户空间体系结构的简图,从中可以看出ALSA内核驱动与用户空间库及OSS之间的关系

 

 

 [QW--此处缺图]

ALSA体系结构

 

 

 

 

1.5   ALSA-driver文件结构[QW--辰汉电子没有提供阿,说是机密阿

 

      从code文件夹中找到alsa-driver-1.0.23.tar.bz2,在linux下解压,我们可以得到alsa-driver-1.0.23文件夹,我们可以看到ALSA驱动文件的目录结构:

sound

/core

    /oss

    /seq

         /oss

/include

/drivers

    /mpu401

    /op13

    /opl4

    /pcsp

/vx

/i2c

    /other

/synth

    /emux

/pci

   /(cards)
       /isa 

   /(cards)

/arm

/ppc

/sparc

/usb

/pcmcia/(cards)

/oss

下面我们来看一下各个目录的具体作用:

core目录

      这个目录包含了中间层,ALSA的核心驱动。

core/oss

      关于PCM和mixer的OSS模拟的模块保存在这个目录里面。Raw midi OSS模拟也被包含在ALSA rawmidi代码中,因为它非常小。音序器代码被保存在core/seq/oss目录里面

*core/ioctl32(老版本里面的)

      这个目录包含32bit-ioctl到64bit架构(如x86-64,ppc64,sparc64)的转换。对于32bit和alpha的架构,他们是不被编译的。

core/seq

      它和它的子目录主要是关于ALSA的音序器。它包含了音序器的core和一些主要的音序器模块如:snd-seq-midi,snd-seq-virmidi等等。它们仅仅在内核配置中当CONFIG_SND_SEQUENCER被设定的时候才会被编译。我们在使用的ALSA驱动中也没有使用。

core/seq/oss

      包含了OSS音序器的模拟的代码。

core/seq/instr

      包含了一些音序器工具层的一些模块。

include目录

      这里面放的是ALSA驱动程序开放给用户空间,或者被其他不同目录引用的共同头文件。

Drivers目录

这个目录包含了不同架构的系统中的不同驱动共享的文件部分。它们是硬件无关的。在子目录里面,会放一些不同组件的代码,他们是根据不同的bus和cpu架构实现的。

i2c目录

      这里面包含了ALSA的i2c组件。虽然LINUX有i2c的标准协议层,ALSA还是拥有它关于一些card的专用i2c代码,因为一些声卡仅仅需要一些简单的操作,而标准的i2c的API函数对此显得太过复杂了。

synth目录

      它包含了synth(合成器)的中间层模块

pci目录

      它和它的一些子目录文件负责PCI声卡和一些PCI BUS的上层card模块。

isa目录

      它和它的一些子目录文件是处理ISA声卡的上层card模块。

arm,ppc和sparc目录

      这里放置一些和芯片架构相关的一些上层的card模块。

usb目录

      这里包含一些USB-AUDIO驱动。在最新版本里面,已经把USB MIDI 驱动也集成进USB-AUDIO驱动了。

pcmcia目录

      PCMCIA卡,特别是PCCcard驱动会放到这里。CardBus驱动将会放到pci目录里面,因为API函数和标准PCI卡上统一的。

oss目录

      和ALSA无关。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值