Linux平台下的ALSA声音编程

来源 :计算机光盘软件与应用 | 被引量 : 0次 | 上传用户:zxsa0519
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:linux 2.6内核采用了全新的声音编程API,本文介绍了ALSA音频子系统,详细阐述了ALSA系统的PCM接口,以及基于其上的录音,回放,全双工的音频编程方法。
  关键词:Linux 2.6;ALSA;PCM;声音编程
  中图分类号:TP311文献标识码:A文章编号:1007-9599 (2011) 06-0000-01
  ALSA Audio Programming Under the Linux Platform
  Liu Shi,Li huaizhou,Zhao Xuegong
  (School of Optoelectronic Information,University of Electronic Science&Technology,Chengdu610054,China)
  Abstract:linux 2.6 kernel with a new sound programming API,this paper show the ALSA audio subsystem,described in detail PCM interface of ALSA system,and based on which the recording,playback,full-duplex audio programming.
  Keywords:Linux 2.6;AlSA;PCM;Audio programming
  ALSA(Advanced Linux Sound Architecture)是由内核驱动,标准的API库和一系列实用程序组成。Linux 2.6内核抛弃了旧的OSS,ALSA被合并到了内核中。
  一、ALSA基础
  ALSA由许多声卡的声卡驱动程序组成,同时它也提供一个称为libasound的API库。应用程序开发者应该使用libasound而不是内核中的ALSA接口。因为libasound提供高级且编程方便的编程接口。为了向后兼容,ALSA提供内核模块来模拟OSS。ALSA包含插件功能来扩展新的声卡驱动。
  (一)ALSA接口
  1.控制接口:用来管理已注册的声卡并检查其可用的设备。
  2.PCM接口:用来管理数字音频的录音和回放,这是一个用的最广的接口。
  3.原始MIDI接口:支持标准MIDI,提供了访问声卡MIDI的接口。
  4.时间接口:用来声卡的计时声音事件的同步。
  5.Sequencer接口:高级MIDI和声音合成接口,可以处理更多的MIDI协议。
  6.混音接口:用来声卡设备的信号处理和音量,建立在控制接口之上。
  (二)设备命名
  API库使用逻辑设备名而不是设备文件。设备名字可以是真实的硬件名字也可以是插件名字。硬件名使用hw:i,j格式。其中i是卡号,j是这块声卡上的设备号。插件使用另外的唯一名,如plughw:0,0。
  (三)声音缓存
  每个声卡都有一个硬件缓存区来保存记录的样本。当缓存区足够满时,声卡将产生一个中断。内核声卡驱动使用直接内存(DMA)访问通道将样本传送到内存中的应用程序缓存区。对于回放,应用程序使用DMA将自己的缓存区数据传送到声卡的硬件缓存区中。
  硬件缓存区是环缓存。ALSA维护一个指针来指向硬件和应用程序缓存区中数据操作的当前位置。本文只讨论应用程序缓存区。
  应用程序缓存区的大小可以通过调用库函数来控制。ALSA将缓存区分成一系列周期(period)。一个周期存储一些帧(frames)。每一帧包含时间上一个点所抓取的样本。对于立体声设备,一个帧包含两个通道上的样本。左右通道信息被交替地存储在一个帧内称为交错模式。在非交错模式中,一个通道的所有样本存储在另一个通道的数据之后。如图1示。
  (四)参数
  1.样本长度(sample):样本是记录音频数据最基本的单位,如8位或16位。
  2.通道数(channel):1表示单声道,2则是立体声。
  桢(frame):桢记录了一个声音单元,长度为样本长度与通道数的乘积。
  3.采样率(rate):每秒钟采样次数,该次数是针对桢而言。
  4.周期(period):音频设备一次处理所需要的桢数。
  二、应用程序编程
  一个典型的ALSA的PCM接口应用程序可以用一下伪代码来描述:
  open_the_device();//打开设备
  set_the_parameters_of_the_device();//设置参数(访问模式,数据格式,通道数,采样率,等)
  while(有数据要被处理)
  {
   receive_audio_data_from_the_device()或deliver_audio_data_to_the_device();
  }
  close the device;//关闭接口
  全双工音频:在过去的OSS编程中可直接对/dev/dsp设备进行读写即可实现此过程,而ALSA则显得有点麻烦。整个过程可分为两步:
  1.打开设备并设置参数:在我们选择硬件的时候最好选择plughw:0,0。除非我们要用到4声道时我们才选择hw:0,0设备。
  2.录放循环:录音-处理-播放,我们首先要丢弃所有的输出缓存,并准备好PCM设备。然后进入录放循环过程。
  三、结束语
  本文介绍了Linux下的ALSA声音编程,对Linux音频编程具有一定的指导意义。
  参考文献:
  [1]Jeff Tranter.Introduction to Sound Programming with ALSA[J].LINUX JOURNAL,2004,9
  [2]Matthias Nagorni.ALSA Programming HOWTO,2010,2
  [3]肖文鹏.Linux音频编程指南,2004,2
  [作者简介]刘士(1986-),安徽亳州人,在读硕士研究生,专业:电路与系统,研究方向:Linux嵌入式系统;李怀周(1986-),河南新乡人,在读硕士研究生,专业:电路与系统,研究方向:Linux嵌入式系统;赵学功(1986-),河南商丘人,在读硕士研究生,专业:电路与系统,研究方向:复杂电路系统。
  注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文
其他文献
近几年的中考非常重视利用运动变化的观念理解一些数学概念和性质,许多试题的问题情境中也具有图形的运动.下面以有关直线与圆相切的运动问题为例,进行简单的分析.
控制变量法是在初中物理实验中应用最广泛的一种科学方法,是物理科学探究的重要思维方法,贯穿了初中物理教材的始终,也是近几年来中考试题的热点问题.但是,考查的结果却不尽人意,学
作为计算机技术领域中一门应用及其广泛的技术,计算机图形图像处理与制作专业涉及了平面设计、出版印刷、动漫制作、网页设计等众多的领域,在我国高校教育中是一门新兴的专业,其
题目1如图1所示,C型管中充满了水,开口A、B用手堵住,若手放开,水从()
换元法是一种常用的鹪题方法,其基本思想是用新的变量代换原来的变量,为求解的问题创造条件,使得化难为易,化繁为简,从而使问题获得解决.由于换元法的技巧性颇强,下面仅就初中范围内
在学习过程中,我们经常会遇到与有理数运算有关的题目,这类题目往往计算量较大,数字、结构复杂.要想快速地求得结果,需要我们在计算过程中仔细观察、寻找规律,采用灵活的方法求解.
计算机常见故障有:反复重启需检查硬件是否插好,软件是否兼容等。计算机死机需听声音、检查内存情况、侵染病毒情况。计算机找不到u盘,需在计算机管理中设置。排除故障。
本文所说的渐开线试题,是指与解析几何有关的渗透性中考问题.
数学解题中不注意答案的合理化取舍是容易出错的.现仅就二次函数部分的内容从近年来的中考题中举出数例并略加评析,供大学学习时参考.
摘要:面向新世纪,我国高等职业技术教育进入蓬勃发展的新时期。根据IT行业技术新、发展快的特点,高等职业技术学院要按照社会主义市场经济规律的原则定位人才培养目标,尽量按照新技术或新版本更新课程内容,本文主要探析高职计算机中的信息安全技术,以期对高职计算机教育做一些有力贡献。  关键词:高职;计算机;教育;信息安全技术  中图分类号:G642 文献标识码:A文章编号:1007-9599 (2011)