您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > Linux下音频设备编程
第8章Linux下音频设备编程本章着重阐述了Linux下对音频设备的编程方法。读完本章,读者将了解以下内容:音频信号的数字化和相关概念;音频总线接口IIS的控制原理和控制程序;Linux下音频设备编程的特点和操作方法;MPlayer媒体播放器在嵌入式Linux上的移植实例。8.1音频信号基础音频信号是一种连续变化的模拟信号,但计算机只能处理和记录二进制的数字信号,而由自然音源得到的音频信号必须经过一定的变换,成为数字音频信号之后,才能送到计算机中做进一步的处理。数字音频信号模拟音频信号数字化的典型方法是对时间坐标按相等的时间间隔做采样,对振幅做量化,单位时间内的采样次数称为采样频率。这样,一段声波被数字化后就可以变成一串数值,每个数值对应相应抽样点的振幅值,按顺序将这些数字排列起来就是数字音频信号了。这就是模拟-数字转化(ADC)过程。数字-模拟转化(DAC)过程则相反,将连续的数字按采样时的频率和顺序转换成对应的电压。通俗一点讲,音频ADC/DAC就是录音/放音。放音是数字音频信号转换成模拟音频信号,以驱动耳机、功放等模拟设备,而录音则是要将麦克风等产生的模拟音频信号转换成数字音频信号,并最终转换成计算机可以处理的通用音频文件格式。采样就是每隔一定时间读一次声音信号的幅度,而量化则是将采样得到的声音信号幅度转换为数字值。从本质上讲,采样是时间上的数字化,而量化则是幅度上的数字化。采样频率的选择应该遵循奈奎斯特(Nyquist)采样理论:采样频率高于输入信号最高频率的两倍,就能从采样信号序列重构原始信号。为了保证声音不失真,采样频率应该在40kHz左右。常用的音频采样频率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz等,如果采用更高的采样频率,还可以达到DVD的音质。量化是对模拟音频信号的幅度进行数字化,量化位数决定了模拟信号数字化以后的动态范围,常用的有8位、12位和16位。量化位越高,信号的动态范围越大,数字化后的音频信号就越接近原始信号,但所需要的存储空间也越大。声道数是反映音频数字化质量的另一个重要因素,它有单声道、双声道和多声道之分。双声道又称为立体声,在硬件中有两条线路,音质和音色都要优于单声道,但数字化后占据的存储空间的大小要比单声道多一倍。多声道能提供更好的听觉感受,不过占用的存储空间也更大。音频文件格式1.MP3MP3的全称应为MPEG1Layer-3音频文件。MPEG(MovingPictureExpertsGroup)在汉语中译为活动图像专家组,特指活动影音压缩标准,MPEG音频文件是MPEG1标准中的声音部分,也叫MPEG音频层,它根据压缩质量和编码复杂程度划分为三层,即Layer-1、Layer-2、Layer-3,且分别对应MP1、MP2、MP3这三种声音文件,并根据不同的用途,使用不同层次的编码。MPEG音频编码的层次越高,编码器越复杂,压缩率也越高,MP1和MP2的压缩率分别为4:1和6:1~8:1,而MP3的压缩率则高达10:1~12:1,也就是说,一分钟CD音质的音乐,未经压缩需要10MB的存储空间,而经过MP3压缩编码后只有1MB左右。不过MP3对音频信号采用的是有损压缩方式,为了降低声音失真度,MP3采取了“感官编码技术”,即编码时先对音频文件进行频谱分析,然后用过滤器滤掉噪音电平,接着通过量化的方式将剩下的每一位打散排列,最后形成具有较高压缩比的MP3文件,并使压缩后的文件在回放时能够达到比较接近原音源的声音效果。2.WMAWMA就是WindowsMediaAudio编码后的文件格式,由微软开发。WMA针对的不是单机市场,而是网络。它的竞争对手就是网络媒体市场中著名的RealNetworks。微软声称,在只有在64kbps的码率情况下,WMA可以达到接近CD的音质。与以往的编码不同,WMA支持防复制功能,它支持通过WindowsMediaRightsManager加入保护,可以限制播放时间和播放次数甚至于播放的机器等。由于WMA支持流技术,即一边读一边播放,因此WMA可以很轻松的实现在线广播。WMA有着优秀的技术特征,在微软的大力推广下,这种格式被越来越多的人所接受。3.WAV这是一种古老的音频文件格式,由微软开发。WAV文件格式符合RIFF(ResourceInterchangeFileFormat,资源互换文件格式)规范。所有的WAV都有一个文件头,这个文件头保存了音频流的编码参数。WAV对音频流的编码没有硬性规定,除了PCM之外,还有几乎所有支持ACM规范的编码都可以为WAV的音频流进行编码。在Windows平台下,基于PCM编码的WAV是被支持得最好的音频格式,所有音频软件都能完美支持。由于本身可以达到较高的音质的要求,WAV也是音乐编辑创作的首选格式,适合保存音乐素材。因此,基于PCM编码的WAV被作为一种中介的格式,常常使用在其他编码的相互转换之中,例如,MP3转换成WMA。4.OggVorbisOGG是一个庞大的多媒体开发计划的项目名称,涉及视频音频等方面的编码开发。整个OGG项目计划的目的就是向任何人提供完全免费的多媒体编码方案,OGG的信念就是开源和免费。Vorbis是OGG项目中音频编码的正式命名,目前Vorbis已经开发成功,并且开发出了编码器。OggVorbis是高质量的音频编码方案,官方数据显示:OggVorbis可以在相对较低的数据速率下实现比MP3更好的音质,而且它可以支持多声道。多声道音乐的兴起,给音乐欣赏带来了革命性的变化,尤其在欣赏交响时,会带来更多临场感。这场革命性的变化是MP3无法适应的,因为MP3只能编码2个声道。与MP3一样,OggVorbis是一种灵活开放的音频编码,能够在编码方案已经固定下来后继续对音质进行明显的调节和新算法的改良。因此,它的声音质量将会越来越好。与MP3相似,OggVorbis更像一个音频编码框架,可以不断导入新技术,逐步完善。5.RARA就是RealAudio格式,这是因特网上接触得非常多的一种格式。这种格式完全针对网络上的媒体市场,支持非常丰富的功能。这种格式最大的特点是可以根据听众的带宽来控制码率,在保证流畅的前提下尽可能提高音质。RA可以支持多种音频编码,其中包括ATRAC3。和WMA一样,RA不但支持边读边放,也同样支持使用特殊协议来隐匿文件的真实网络地址,从而实现只在线播放而不提供下载的欣赏方式。6.APEAPE是Monkey’sAudio提供的一种无损压缩格式。由于Monkey’sAudio提供了Winamp的插件支持,因此这就意味着压缩后的文件不再是单纯的压缩格式,而是与MP3一样可以播放的音频文件格式。这种格式的压缩比远低于其他格式,但由于能够做到真正无损,因此获得了不少发烧用户的青睐。现在有不少无损压缩方案,APE是其中有着突出性能的格式,它具有令人满意的压缩比,以及飞快的压缩速度,成为不少朋友私下交流发烧音乐的惟一选择。7.AACAAC(高级音频编码技术,AdvancedAudioCoding)是杜比实验室为音乐社区提供的技术,声称最大能容纳48通道的音轨,采样率达96kHz。AAC在320kbps的数据速率下能为5.1声道音乐节目提供相当于ITU-R广播的品质。AAC是遵循MPEG-2的规格所开发的技术,与MP3比起来,它的音质比较好,也能够节省大约30%的存储空间与带宽。8.ATRAC3ATRAC3(AdaptiveTransformAcousticCoding3)由日本索尼公司开发,是MD所采用的ATRAC的升级版,其压缩率(约为ATRAC的2倍)和音质均与MP3相当。压缩原理包括同时掩蔽、时效掩蔽和等响度曲线等,与MP3大致相同。ATRAC3的版权保护功能采用的是OpenMG。目前,对应ATRAC3的便携式播放机主要是索尼公司自己的产品。不过,该公司已于2000年2月与富士通、日立、NEC、Rohm、三洋和TI等半导体制造商签署了制造并销售ATRAC3用LSI的专利许可协议。WAVE文件格式剖析WAVE文件作为多媒体中使用的声波文件格式之一,是以RIFF格式为标准的。RIFF可以看成是一种树形结构,其基本构成单位为chunk,犹如树形结构中的节点,每个chunk由辨别码、数据大小,以及数据所组成。WAVE文件的“RIFF”格式辨别码为“WAVE”,整个文件由两个chunk所组成,辨别码分别是“fmt”和“data”。在“fmt”chunk下包含了一个PCM波形格式的数据结构,在此之后是包含原始声音信息的采样数据,这些数据是可以直接送到IIS总线的数字音频信号。WAVE文件各部分内容及格式如表8.1所示。常见的声音文件主要有两种,分别对应于单声道和双声道。对于单声道声音文件,采样速率是11.025kHz,采样数据为8位的短整数(shortint);而对于双声道立体声声音文件,采样速率为44.1kHz,每次采样数据为一个16位的整数(int),高8位和低8位分别代表左右两个声道。WAVE文件数据块包含以脉冲编码调制(PCM)格式表示的样本。WAVE文件是由样本组织而成的。在WAVE文件中,声道0代表左声道,声道1代表右声道。在多声道WAVE文件中,样本是交替出现的。例如,对于8位双声道的立体声,存储数据格式依次为:0声道(左)、1声道(右)、0声道(左)、1声道(右)。对于16位立体声,存储数据依次为:0声道(左)低字节、0声道(左)高字节、1声道(右)低字节、1声道(右)高字节。8.2基于IIS接口的音频系统IIS接口控制原理S3C2410X内置了一个IIS总线控制器,该控制器实现到一个外部8/16位立体声音频编解码器接口,支持IIS总线数据格式和MSB-justified数据格式。S3C2410X中有两条串行数据线,一条是输入信号数据线,一条是输出信号数据线,以同时发送和接收数据。IIS接口有3种工作方式:正常传输模式,正常模式下使用IISCON寄存器对FIFO进行控制。如果传输FIFO缓存为空,IISCON的第7位被设置为“0”,表示不能继续传输数据,需要CPU对缓存进行处理。如果传输FIFO缓存非空,IISCON的第7位被设置成“1”,表示可以继续传输数据。同样,数据接收时,如果FIFO满,标识位是“0”,此时,需要CPU对FIFO进行处理,如果FIFO没有满,那么标志位是“1”,这个时候可以继续接收数据。DMA模式,通过设置IISFCON寄存器可以使IIS接口工作于这种模式下。在这种模式中,FIFO寄存器组的控制权掌握在DMA控制器上,当FIFO满了,由DMA控制器对FIFO中的数据进行处理。DMA模式的选择由IISCON寄存器的第4位和第5位控制。传输/接收模式,这种模式下,IIS数据可以同时接收和发送音频数据。IIS总线控制器结构如图8.2所示,各功能说明如下:两个5比特预除器IPSR,IPSA_A用于产生IIS总线接口的主时钟,IPSA_B用做外部CODEC时钟产生器。16字节FIFO,在发送数据时数据被写进TxFIFO,在接收数据时数据从RxFIFO中读取。主IISCLK产生器SCLKG,在主模式下,有主时钟产生串行位时钟。通道产生器和状态机CHNC,IISCLK和IISLRCK有通道状态机产生并控制。16比特移位寄存器(SFTR),在发送数据时,并行数据经由SFTR变成串行数据输出;在数据接收时,串行数据由SFTR转变成并行数据。音频接口电路设计音频接口程序设计1.放音放音程序代码如下:#include2410addr.h#include2410lib.h#includedef.h“#include2410iis.hvoidChangeDMA2(void);voidIIS_PortSetting(void);void_WrL3Addr(U8data);void_WrL3Data(U8data,inthalt);void__irqDMA2_Done(void);void__irq
本文标题:Linux下音频设备编程
链接地址:https://www.777doc.com/doc-1307002 .html