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