|

楼主 |
发表于 2009-4-20 09:08
|
显示全部楼层
对Linux操作系统alsa架构的介绍
ALSA标准是一个先进的linux声音体系。它包含内核驱动集合,API库和工具对Linux声音进行支持。ALSA包含一系列内核驱动对不同的声卡进行支持,还提供了libasound的API库。用这些进行写程序不需要打开设备等操作,所以编程人员在写程序的时候不会被底层的东西困扰。与此相反OSS/Free 驱动在内核层次调用,需要指定设备名和调用ioctl。为提供向后兼容, ALSA 提供内核模块模仿 OSS/Free 驱动,所以大多数的程序不需要改动。 ALSA 拥有调用插件的能力对新设备提供扩展,包括那些用软件模拟出来的虚拟设备。 ALSA还提供一组命令行工具包括mixer, sound file player和工具控制一些特别的声卡的特别的作用。
ALSA API被主要分为以下几种接口:
控制接口 :提供灵活的方式管理注册的声卡和对存在的声卡进行查询。
Stream 接口 :提供管理数字音频的捕捉和回放。
原始 MIDI 接口:支持MIDI(Musical Instrument Digital Interface),一种标准电子音乐指令集。 这些API提供访问声卡上的MIDI总线。这些原始借口直接工作在The MIDI事件上,程序员只需要管理协议和时间。
记时接口: 为支持声音的同步事件提供访问声卡上的定时器。
音序器接口:一个比原始MIDI接口高级的MIDI编程和声音同步高层接口。它可以处理很多的MIDI协议和定时器。
混音器接口:控制发送信号和控制声音大小的声卡上的设备。
声卡的缓存和数据的传输:
一块声卡有一个声卡内存用来存储记录的样本。当它被写满时就产生中断。内核驱动就使用DMA将数据传输到内存中。同样地,当在播放时就将内存中的声音样本使用DMA传到声卡的内存中!声卡的缓存是环状的,这里只讨论应用程序中的内存结构:ALSA将数据分成连续的片段然后传到按单元片段传输。
典型的声音程序结构:
open interface for capture or playback
set hardware parameters
(access mode, data format, channels, rate, etc.)
while there is data to be processed:
read PCM data (capture)
or write PCM data (playback)
close interface |
|