`
jinghuainfo
  • 浏览: 1525454 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Advanced Linux Sound Architecture (ALSA) 研究笔记

 
阅读更多

Advanced Linux Sound Architecture (ALSA) 研究笔记

转载时请注明出处和作者联系方式:http://blog.csdn.net/absurd

作者联系方式:Li XianJing <xianjimli at hotmail dot com>

更新时间:2006-12-19

ALSA并非是最近才出现的新事物,它实际上已经发展很多年了,不过直到在kernel 2.6,才成为OSS名正言顺的替代者。ALSA提供的不只是几个声卡的驱动程序,而是从驱动程序到上层应用程序的一整套解决方案。最近花了点时间去阅读ALSA相关资料和代码,本文记录了一些在研究过程中所记的笔记。

按照ALSA官方网站上的说法,它有如下特点:

1. 有效的支持所有类型的音频接口,从普通的声卡到专业的音频设备。

2. 完全模块化的声卡驱动程序。

3. SMP和线程安全的设计。

4. 一个用户空间的函数库,提供了高层次的编程接口,从而简化了应用程序的开发。

5. 支持较老的OSS API,兼容大多数OSS应用程序。

为什么说ALSA比OSS更有前途呢?从前有人说ALSA会有更好的性能和更少延迟。但设计良好的OSS驱动程序在性能上并不比ALSA驱动程序差,所以现在大家都不在性能上做比较了,而是说ALSA有下面这些优点:

1. 分离了内核代码和用户空间的代码。只有必要的代码才放到内核中,其它代码在alsalib中实现。

2. alsa-kernel/alsa-driver的架构设计得更好,不同驱动程序之间可以共享更多代码。驱动程序的行为也更加统一,对应用程序来说也是有好处的。

3. alsa-lib提供了更易使用的API,让应用程序的开发更为简单

不过OSS似乎也不太服气,不甘心就这样让ALSA抢了风头。Opensound网站上有一篇《关于音频的神话与坊间传说》,写得非常有煽动性和说服力,可以认为是对ALSA支持者的反驳。我个人也认为ALSA上述的优点完全可以通过改进OSS来达到,而不必推倒重来,或者真正的焦点在于OSS没有开放源代码,使得linux爱好者决定自己搞一套。不管怎么样,OSS也不会这么快成为历史,因为它支持所有的unix系统,而且ALSA则侧重于linux系统。

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里,设备才能运行。

7. OSS Compat 与OSS兼容的代码。

目前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提供的接口。

ALSA编程

开发基于ALSA的应用程序时,不要直接使用alsa-driver提供的接口,而应该使用alsalib的函数。alsalib提供了丰富的功能,估计有好几百个函数,幸好常用的并不多。ALSA的howto提供一个简单的播放和录音的示例,值得参考。

TODO:

继续阅读alsa-driver和alsalib的代码。

研究JACK的架构。

~~end~~

分享到:
评论

相关推荐

    Linux-audio-interface.rar_ALSA接口_Audio接口_alsa_linux_linux alsa

    ALSA (Advanced Linux Sound Architecture),Linux 系统上面的音频编程接口

    Linux_ALSA声卡驱动

    ALSA是Advanced Linux Sound Architecture,高级Linux声音架构的简称,它在Linux操作系统上提供了音频和MIDI(Musical Instrument Digital Interface,音乐设备数字化接口)的支持。

    alsa体系架构

    ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构

    alsa-lib-1.0.26.tar.bz2

    ALSA是Advanced Linux Sound Architecture,高级Linux声音架构的简称,它在Linux操作系统上提供了音频和MIDI(Musical Instrument Digital Interface,音乐设备数字化接口)的支持。在2.6系列内核中,ALSA已经成为...

    linux音频alsa学习资料

    ALSA是Advanced Linux Sound Architecture的缩写,高级Linux声音架构的简称, 它在Linux操作系统上提供了音频和MIDI(Musical Instrument Digital Interface,音乐设备数字化接口)的支持。

    linux ALSA.pdf

    ALSA是Advanced Linux Sound Architecture 的缩写, 官网 : http://www.alsa-project.org. 在内核设备驱动层, ALSA提供了alsa-driver. 同时在应用层, ALSA为我们提供了alsa-lib, 应用程序只要调用alsa-lib提供的API...

    arm linux利用alsa驱动并使用usb音频设备

    主要介绍了arm linux利用alsa驱动并使用usb音频设备的相关资料,需要的朋友可以参考下

    writing-an-alsa-driver.zip_The Driver_alsa_audio system

    The Advanced Linux Sound Architecture (ALSA) provides audio and MIDI functionality to the Linux operating system. The attached document describes how to write an ALSA driver.

    freq_table.rar_Table

    Advanced Linux Sound Architecture - ALSA - Driver.

    linux_sound.zip_alsa_alsa播放_linux sound.h

    linux环境alsa设备枚举和声音播放功能库

    linux alsa机制学习笔记2

    linux alsa机制学习笔记2,分析widget route path以及dapm机制

    Linux高级音频架构ALSA源码

    ALSA是Advanced Linux Sound Architecture,高级Linux声音架构的简称,它在Linux操作系统上提供了音频和MIDI(Musical Instrument Digital Interface,音乐设备数字化接口)的支持。在2.6系列内核中,ALSA已经成为...

    alsa driver

    This document describes how to write an ALSA (Advanced Linux Sound Architecture) driver

    Linux Sound Driver Framework

    Linux Sound Driver Introduction (ALSA) It's useful for the dev to develop the Linux Sound Drivers.

    Alsa音频编程【精华】.pdf

    ALSA表示高级Linux声音体系结构(Advanced Linux Sound Architecture)。 它由一系列内核驱动,应用程序编译接口(API)以及支持Linux下声音的实用程序组成。 这篇文章里,我将简单介绍 ALSA项目的基本框架以及它的...

    linux alsa机制学习笔记1

    linux alsa机制学习笔记1,详细记录学习过程,特别详解kcontrol

    Apress Linux Sound Programming

    详细介绍LINUX系统声音编程体系,包括ALSA,PulseAudio,Java Sound,GStreamer等音频编程架构,以及上层音频相关应用的开发和使用。

    alsa_driver.rar_alsa-driver_alsa_driver_linux_linux alsa

    linux alsa 驱动代码的情景分析

    嵌入式linux下基于ALSA架构的语音录制和播放

    本资源是基于嵌入式硬件Devkit8600和嵌入式linux系统软件的QT开发环境下编写的基于ALSA架构的语音录制和播放的源代码,源代码编译时需要asoundlib库,网络上有下载。本资源可适用于基于ALSA架构的嵌入式linux语音...

Global site tag (gtag.js) - Google Analytics