音频嵌入

关键词: 内核 音频

音频嵌入(精选八篇)

音频嵌入 篇1

音频处理方法

把数据送入处理器内核

把数据送入处理器内核有若干种方法。例如,一个前台程序可以对一个串行端口中的新数据进行查询,但这种传输方式在嵌入式媒体处理器中是不常用的,因为这样会降低内核的使用效率。

取而代之的是,与音频编解码器相连的处理器一般用D M A引擎把数据从编解码器的数据口(就像一个串行口)传输到处理器可用的某个存储空间内。这种数据传输是以后台操作的形式完成的,无需处理器内核的干预。这里的唯一开销是对DMA序列的设定以及一旦数据缓冲区的接收或发送完成之后对中断的处理。

块处理与样点处理

样点处理和块处理是处理数字音频数据的两种方法。在样点处理的方法中,只要样点一出现,处理器就处理这个样点。这里,在每个采样周期中的处理操作都会有开销。许多滤波器(例如FIR和IIR,将在下面叙述)是以这样的方式实现的,因为这种方式的有效延迟会很低。

另一方面,块处理是基于把数据传送到处理函数之前对特定长度缓冲区的填充。有些滤波器是用块处理的方式实现的,因为这样比样点处理方式更有效。其中要说明的一点是,块处理方法大大降低了针对每个样点而调用处理函数的开销。而且,许多嵌入式处理器包含有多个ALU,可以对数据块进行并行操作。另外,有些算法从本质上就是以块处理方式操作的。其中一个大家都知道的是傅里叶变换(以及它的实际使用的形式,快速傅里叶变换,或称FFT),这种算法接受时域数据块或空间域(spatial)数据块,然后把这些数据块转换成频域表示。

双缓冲

在基于块处理的、使用DMA与处理器内核进行数据传递的系统中,必须使用双缓冲,以便在DMA传输和内核之间进行仲裁。这会使处理器内核和独立于内核的D M A引擎不会在同一时间对同一数据进行访问,避免了数据一致性问题。为了对长度为N的缓冲区的处理进行改进,我们简单地产生一个长度为2×N的缓冲区。对于一个双向系统,必须生成两个长度为2×N的缓冲区。如图1a中所示,处理器内核正在对in1缓冲区进行处理,并将结果存储在out1缓冲区中,而DMA引擎此时正在对in0进行填充,并对out0中的数据进行传输。图1 b指出,一旦D M A引擎完成对双缓冲区左边半个的操作之后,它就开始把数据传送到in1,并从out1取出数据,而此时的处理器内核正在处理来自in0的数据,并填入out0。这个结构有时被称为“乒乓式缓冲”,因为处理器内核来回地对双缓冲区的左右两半进行处理。

应该注意到,在实时系统中,串行端口的D M A(或者另一个与音频采样率关联的外围设备的D M A)规定了时序预算。基于这个原因,块处理算法必须以这样的方式进行优化,即它的执行时间要小于或等于D M A对双缓冲区的一半进行数据传输所需的时间。

二维(2D)DMA

当数据通过像I 2 S这样的数据链路传输时,它可能会包含多个声道。这些声道可以全是从一条数据线上通过复用而输入到同一个串行端口的。在这种情况下,2D DMA可以用来对数据进行解交织,从而使每个声道在存储器中是线性分配的。可以看一下图2中对这一安排的图示,其中从左右声道来的样点被解复用到两个分离的数据块。这个自动数据安排对于那些使用块处理的系统是极其有用的。

基本操作

在音频处理中有三个基本的构建模块。它们是加法操作、乘法操作和时间延迟。许多更复杂的效果和算法可以用这三个基本操作来实现。加法器显而易见的任务是把两个信号加在一起。乘法可以用于提升或衰减音频信号。在大多数媒体处理器中,可以在一个周期内完成多次加法和乘法操作。

时间延迟有点复杂。在许多音频算法中,当前的输出取决于过去的输入和输出之间的组合。这种延迟效果是用延迟线实现的,而延迟线只不过是存储器中用来保持过去数据的一个数组。例如,一个回声算法可以对每个声道保持500 mS的输入样点。当前输出值可以用当前输入值与稍微衰减的过去样点进行相加后得到。如果音频系统是基于样点的处理方式,那么程序设计人员可以简单地跟踪一个输入指针和一个输出指针(两者之间保持500 mS样点数的间隔),并且在每个采样周期之后增加这两个指针。

由于延迟线要被随后的各组数据重复使用,因此,输入与输出指针将需要从延迟线缓冲区的末尾回绕到起始端。在C/C++中,这通常是在指针增加操作时再附带一次求模操作(%)完成的。

对于那些支持循环缓冲(见图3)的处理器来说,这个回绕操作不会增加额外的处理周期。在这种情况下,一个循环缓冲区的起始位置和长度必须只提供一次。在处理过程中,软件增加或减少缓冲区内的当前指针,如果当前的指针位置落在缓冲区的两个端点之外,则由硬件使指针回绕到缓冲区的起始位置。如果没有这个自动地址生成功能,程序设计人员就必须手动地保持对缓冲区的跟踪,因而会浪费有用的处理周期。

由延迟线结构可以引出一个叫做梳状滤波器的重要的音频构建模块,它本质上是一个带有反馈的延迟线。当多个梳状滤波器同时使用的时候,可以产生混响的效果。

信号的产生

在有些音频系统中,也许需要合成一个信号(例如一个正弦波)。泰勒级数的函数近似法可以用来对三角函数进行仿真。而且,用均匀随机数发生器来产生白噪声是很容易的。

但是,合成的方法也许并不适用于某些给定系统的处理预算。在具有充足存储器的定点系统中,您可以取而代之地使用查表的方法来产生信号。这样做的负面效应是占用了宝贵的存储器资源,所以,作为一种折衷考虑,可以使用混合的方法。例如,您可以存储一个不太精细的函数表,以节省存储器。在运行时,准确的值可以用插值的方法从函数表中提取出来,而插值操作比使用泰勒级数近似法的时间大为缩短。这个混合法提供了在计算时间和存储器资源之间的很好的平衡。

滤波与算法

音频系统中的数字滤波器被用来对指定频带内的声波能量进行衰减或提升。最常用的滤波器形式是高通、低通、带通和点阻。这些滤波器中的任何一种都有两种实现方法。这就是有限冲击响应(FIR)滤波器和无限冲击响应(IIR)滤波器,而且它们组成了搭建像参数均衡器和图示均衡器那样更复杂的滤波算法的构建模块。

有限冲击响应(FIR)滤波器

FIR滤波器的输出是由当前和过去输入之和确定的,而其中的每个输入样点首先要乘以一个滤波器系数。示于图4a中的FIR求和公式,也叫做“卷积”,是信号处理中最重要的操作之一。在这个公式的句法中,x为输入向量,y为输出向量,而h为滤波器系数。图4a表示了FIR的实现结构图。

卷积是在媒体处理中非常常用的操作,因而许多处理器都可以在一个周期内完成一条乘累加(MAC)指令,同时还可以完成多个数据的访问操作(读或写)。

无限冲击响应(IIR)滤波器

与输出仅仅取决于输入的FIR滤波器不同,IIR滤波器则依靠输入和过去的输出。IIR滤波器的基本公式是一个差分方程,如图4b所示。由于当前输出对于过去输出的依从关系,IIR滤波器经常被称为“递归式滤波器”。图4b也给出了IIR滤波器结构的图示。

快速傅里叶变换

我们往往可以更好地描述音频信号的特性,那就是用频率组成。傅里叶变换以时域信号作为输入,并把信号重新安排到频域里,而傅里叶反变换则完成逆向的工作,把频域表示变换回时域。从数学上看,时域中的操作与频域中的操作之间存在一些很妙的特性关系。特别是,时域卷积(或者FIR滤波器)等效于频域的相乘。如果没有傅里叶变换这个特别的优化方法,即快速傅里叶变换(FFT),那么这个信号处理中的珍品就不可能变为实用。事实上,F I R滤波器往往有更高效的实现方法,那就是把输入信号和滤波器系数用F F T变换到频域,然后将两个变换式相乘,最后再用傅里叶反变换把乘积变换回时域。

音频嵌入 篇2

本文介绍在flash文档中嵌入音频文件的两种方法,使其可以在Flash player中正常播放。

1、建立 Sound 对象用 load() 方法加载外部的 MP3 来播放;

2、让 Sound 对象监听 sampleData 事件,这样可以播放由程序动态生成的声音,例如:

下面的示例播放简单的正弦波。

以下是引用片段:

var mySound:Sound = new Sound();

function sineWaveGenerator(event:SampleDataEvent):void {

for ( var c:int=0; c<8192; c++ ) {

event.data.writeFloat(math.sin((Number(c+event.position)/Math.PI/2))*0.25);

event.data.writeFloat(Math.sin((Number(c+event.position)/Math.PI/2))*0.25);

}

}

mySound.addEventListener(Event.SAMPLE_DATA,sineWaveGenerator);

音频嵌入 篇3

在广播电视节目制作中,由于视频信号和音频信号的处理方式、传输通路方式不同,使视音频信号出现不同的延时,产生了声音与图像不同步的现象。传统的解决方案是通过实地测量数字电视系统中视频和音频的延时差,在系统中添置相应的延时器,从而达到视音频的同步,这种方法容易受到线路变化的影响,并且需要相应的音频处理设备。采用数字音频嵌入视频流的方法很好地解决了延时的问题,嵌入音频后的数字电视信号可用一根电缆同时传输视/音信号,节省了音频单独传输所要求的音频分配器,音频矩阵、音频切换器等周边设备。现行大多数产品都是采用ASIC或者ASSP实现,在大量使用时购买成本高。而且随着数字电视的发展视频、音频格式和标准不断更新,这样不仅要重新购买新型芯片而且要重新制板。本文提出了一种基于FPGA的数字音频嵌入IP核设计方案,应用ALTERA公司的cyclone II的经济适用型芯片,价格低、可靠性高。实践证明系统灵活、可靠,只需对代码稍加修改即可满足不同的音频嵌入标准。

1 数字音频嵌入原理

我国采用的625/50PAL制4∶2∶2方式数字分量视频格式中,每个视频帧分为两场:基场和偶场。每场数据一行共有1728个取样点字节,其中对Y,Cb,Cr有效取样点个数为1440字节,剩下的288个字节为HANC (行辅助数据)。在这些辅助数据中仅有8个数据被EAV(有效视频结束)、SAV(有效视频开始)所占用。即剩下的280个数据可以作为辅助数据,除去6,7,8,317,318,319视频切换行、专用行外其数据率为280个点×619行×25帧×10比特=43.33Mb/s。而一对采样率为48kHz的音频数率仅为3.072Mb/s,因此完全可以将音频数据嵌入到数字视频的辅助空间内。视频辅助数据如图1所示。

SMPTE 272M标准规定,在行辅助数据区内最多可以嵌入16个通道的音频数据,每一对音频通道为一路音频,每两路分为一组,这样共可分为4个音频组。在音频嵌入时,音频左、右声道分别影射成3个10比特的音频字,分别为X,X+1,X+2。在此,以20比特音频为例,其音频影射格式如表1所示。

一个辅助数据包最多可容纳255个10比特字。在辅助数据包中,包头由六个状态字组成:辅助数据包头标志(000,3FF,3FF)、辅助数据包类型(DID)、数据块号(DBN)、数据计数器(DC)。由音频数据流的每个20比特的数字音频所影射的3个10比特数据紧跟在包头数据后依次嵌入。如图2所示可将左声道的音频所影射的3个10比特(即为一个样对)字嵌入到包头之后,右声道数据紧跟在左声道后面依次嵌入到视频流当中。

数字音频嵌入到数字视频流其过程即为视、音频数据流经时分复用而形成一组视频流输出的过程。视频流:首先,系统接收由电缆均衡器所均衡的270MHz串行数据通过串并转换模块将视频流转换成27MHz的10比特体并行数据,经由视频标准探测模块流入音频嵌入模块准备嵌入音频。音频流:由I2S音频接口或AES3音频接口所传输的数字音频经由异步FIFO缓冲输出,此异步FIFO的读使能信号由视频探测模块发出控制读信号,以便在不同的行辅助数据区内嵌入不同的个数。根据SMPTE 272M标准一帧视频数据嵌入1920个音频样点,如为625行视频则每行嵌入数为1920÷625=3.072个音频样点,即有些行要嵌入3个样点,有些行要嵌入4个样点。流出FIFO的数字音频经过音频影射打包后流入音频嵌入模块,音频嵌入原理如图3所示。

当音频按照图2的格式嵌入到视频流的行辅助数据区后,经由并转串模块将并行的10比特视频数据同步输出。整个过程的时钟来自于原来SDI视频流恢复的时钟,这样能够保证处理视频和音频的时钟同步。

2 VHDL代码设计

本文在QUARTUS II环境下对数字音频嵌入模块进行了时序仿真,其编码器在QUARTUS II6.0环境下生成顶层模块连接图如图4所示。为了实际应用我们引入S/P(串转并)模块。S/P(串转并)模块将串行的SDI流转换成10比特并行数据。在嵌入模块中接收并行视频数据和音频数据,经由嵌入模块生成携带有音频的并行视频码流,之后经由P/S(并转串)模块输出SDI流,完成音频嵌入。

由图5所示整个嵌入模块由以下几个状态组成:idle即空闲状态;state1探测所输入的视频标准和音频开始帧;state2视频基场嵌入音频;state3视频偶场嵌入音频,如图4所示。

具体操作过程如下:在reset异步复位之后,状态机进入idle空闲状态;当音频有效数据和视频检测到之后,状态机进入state1视频标准探测和音频开始帧探测。当输入的视频与所选的视频标准一致,音频包开始被探测时,状态机进入state2状态,针对视频基场嵌入音频;之后在state3状态时视频偶场嵌入音频;之后在state2,state3状态之间切换传输,直至块结束回到idle状态。

3 时序仿真波形

图6为除去S/P和P/S嵌入模块的时序仿真波形。其中videoout为没有嵌入音频的输入视频流,videotxo为嵌入已打包的音频的视频流 。从图中可以看到,此时要嵌入的音频有2F9,180,23F,1C2,20F,220……,嵌入从EAV之后(3FF,000,000,2D8)开始,首先是音频数据包头(000,3FF,3FF,2FF,001,224),数据包为20比特,音频影射所成的3个10比特字依次嵌入。

在实际应用中,对专用的音频嵌入芯片和本文FPGA的IP核解决方案分别在输入正弦波频率在20Hz~20kHz(人耳所能分辨的频率范围)频率下进行了测试,如表2所示,发现专用芯片在频率较高时信噪比有明显的下降趋势。这起因于视、音频切换所产生的噪音。而本文应用的FPGA的IP核解决方案由于采用了ALTERA公司的cyclone IITM的模拟锁相环PLL的Normal模式,这种模式可以使得FPGA内部时钟同步同相位,避免了这种噪音的产生,从根本上解决了由芯片内部信号延时所造成的抖动,提高了音频嵌入质量。

4 结束语

提出了一种基于FPGA的数字音频嵌入数字视频的IP核解决方案。专用芯片价格昂贵,并且当标准更新、升级时必须重新购买芯片、制板,成本很高。本文基于FPGA的IP核取代了昂贵的专用芯片,并且代码可以重复利用,解决了由于重复购买专用芯片所导致成本过高问题。FPGA有相当大的灵活性,当标准升级时,只需对代码稍加修改便可适应不同标准,无须重新制板,大大降低应用成本。

摘要:针对视频与音频播放不同步的问题,提出了一种基于FPGA的数字音频的嵌入的IP核设计方案,并给出了VHDL代码实现及时序仿真波形。实践证明基于FPGA的数字音频的嵌入的IP核设计不仅较好解决了视、音频延时问题,而且系统灵活可靠,代码可以重复利用,大大降低了重复购买专用芯片的应用成本。

关键词:数字音频嵌入,数字音频,现场可编程逻辑阵列,IP核

参考文献

[1]AES standard for digital audio2003[Z].Audio Engineering Society,Inc.

[2]Shi Jianzhong,Dinesh Bhatia.Performance Driven Floorplanning for FPGABased Designs[J].IEEE Computer Society,1996:112-118.

[3]Shi Jianzhong,Dinesh Bhatia.Performance Driven Floorplanning for FPGABased Designs[J].IEEE Computer Society,1996:112-118.

[4]SatnamSingh.Architectural Descriptions for FPGACircuits[J].IEEE Computer Society,1995:145-154.

音频嵌入 篇4

随着电视数字理论日趋发展, 在电视信号模数转换和传输的过程中, 视频信号和音频信号的不同处理方式, 导致数字视频滞后于数字音频, 表现在图象和声音不协调的问题也明显起来。在电视节目播送中, 视频信号制约于相应的音频信号, 达到同步, 或利用数字视频信号对数字音频信号加以携带, 形成一个有机统一的整体, 是我们在数字电视播出系统设计中, 极为关心的问题, 以使受众得到声画同步的完美的电视图象。

2 数字化的电视播出和节目传输中图象伴音协调一致的实现

数字电视系统中视频和音频的延时差, 可以通过实地测量, 在系统中添置相应的音频延时器, 达到音视频的协调一致, 这是最简易的办法。数字音频延时器有人工预调谐和随视频信号的变化自动控制两种, 一般在音视频信号分离的系统中采用。 (2) 采用多工复用技术, 使音视频信号有机统一。电视视频信号的模数转换方式, 随模拟信号的构成不同 (指复合和分量方式) , 而有一定的差异, 数字拾取后的数据传输方式也有并行和串行之分, 但都有一个共同的特征, 那就是在共同的部位, 如视频数字信号的行消隐期间, 空余的空间可携带数字信息, 在这个空间里, 根据不同方式, 把数字音频和其他辅助数据加以携带传送。对于数字视频信号来说, 数字音频和辅助数据按规定位置相嵌于其身, 可称为音频嵌入。

3 频嵌入技术在电视播出系统中的实现

3.1 音频嵌入技术在电视播出系统中的实施方案

通过矩阵开关选择的两路音频嵌入SDI (Serial digital interface) 信号, (A1、B1) 送至视频处理器作混合或特技切换处理, 同样的两路 (A2、B2) 经解嵌处理的数字音频信号, 送至音频处理器作相应的变换, 处理后的视频信号和音频信号, 再按初始的相对时间关系, 在嵌入器中重新将音频信号嵌入。这里要说明的是, 整个的处理过程, 都是在控制数据处理器的指令下进行工作, 以保证时间关系的准确无误。

3.2 播控切换台的选择

具有处理嵌入音频的数字分量串行视频数据流信号 (SDI) 功能。具有完善的视频处理、音频处理和灵活的加嵌、解嵌设施, 并能达到音视频的统一和谐。适用于电视节目播出使用。要求结构简单适用, 能够实现电视节目播出自动化。

4 电视节目播出系统方案比较

4.1 系统设备设置

根据中华人民共和国广播电影电视行业标准 (GY/T165-2000) 《电视中心播控系统数字播出通路技术指标和测量方法》第3、2节数字播出通路 (digital transmit channel) 规定, 数字播出通路是指播控系统中的数字视频、音频信号通路, 即从数字信号源、数字分配矩阵、应急切换器、数字切换台 (处理器等) , 到数字信号分配放大器 (含无压缩数字信号传输电缆) 的通路。一般的播控系统是指各种源信号控制处理形成的电视节目播出信号的设备系统总成。为了实现数字电视节目信号的音视频协调一致, 针对电视信号的数字化处理和传输的特点, 数字音频信号需加延时器才得以实现。而采用音频嵌入方式的设备系统, 在系统的设备构成中, 无需设置音频系统。

4.2 设备系统简化

采用音频嵌入方式的电视播出系统, 相对于配有双伴音系统 (视频系统, 伴音 (1) 系统, 伴音 (2) 系统) 的电视播出系统, 可以说省掉两套切换开关、处理和分配放大等设备, 及相应连接电缆、连接器, 故障机率相对减少;也就大大地提高电视播出的安全系数。

4.3 节省设备投资

减少了两套音频设备系统和相应的延时器, 将节省主要设备投资的2/3。

采用配有音频嵌入功能的放像机, 还要对个别的外来信号配备少量的音频嵌入设备, 以及供监听监看的解嵌设备, 又要增加部分投资。对线缆和接插件有严格的要求, 这是数字系统必要的。从总投资来看, 播控系统设备, 有减少也有增加, 可节省一半左右的造价。

4.4 问题

在电视设备模拟模式和数字模式并存的当今, 就会有数字电视信号必须通过数模转换, 才能在常规的监测系统中监听监看。在电视设备发展进步中, 数模转换装置, 可在监视设备中内藏, 也可外设。采用音频嵌入的数字电视系统中的电视信号, 必须通过解嵌设施, 才能分别看到图象听到声音。

音频解码芯片在嵌入式系统中的应用 篇5

究竟什么是嵌入式系统?根据IEEE (国际电气和电子工程师协会) 的定义:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置” (原文为devices used to control, monitor, or assist the operation of equipment, machinery or plants) 。可以看出此定义是从应用上考虑的, 嵌入式系统是软件和硬件的综合体, 还可以涵盖机电等附属装置。而且嵌入式系统特定的应用需求, 要求设备尽可能地小型化, 与网络紧密结合, 移动的能力尽量强。这就要求嵌入式CPU具有低功耗、体积小、集成度高的特点, 能够把通用CPU中许多由板卡完成的任务集成在芯片内部。从偏硬件观点来看:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。嵌入式系统的最大特点是其所具有的目的性或针对性, 这也是嵌入式系统与通用的计算机系统最主要的区别。若从偏软件角度上说, 从一个只有内存管理、任务调度、定时器服务的缩简的微内核到一个支持各种文件系统和多种网络服务的完整服务器都应属于嵌入式系统。它与被垄断的通用计算机产业不同, 是一个分散的工业, 充满了竞争、机遇与创新。即便在体系结构上存在着主流, 但是应用不同, 需求不同, 没有哪一个系列的处理器和操作系统能够垄断全部市场, 因此嵌入式系统领域留下的创新余地很大。

2 音频解码芯片设计

目前许多电力系统设备公司都在研制自己的智能保护装置, 如某公司自主研发了智能保护装置JSY系列, 并且在原有的JSY2000变电站监控软件的基础上开发了新一代配电网自动化系统。该系统融入了目前流行的新技术:面向对象技术、嵌入式技术、信息融合技术、多Agent技术等等。具体在硬件实现上来讲, 监控软件放在工控机中, 通过串行口与下位机 (智能保护单元) 通讯, 根据获得的实时数据, 运用一定的算法, 对智能保护单元发送命令, 确保配电网络的正常运行。

ARM9采用ARMV4T (Harvard) 结构, 五级流水处理以及分离的Cache结构, 平均功耗为0.7mw/MHz。时钟速度为120MHZ-200MHZ, 每条指令平均执行1.5个时钟周期。与ARM7系列相似, 其中的ARM920、ARM940和ARM9E均为含Cache的CPU核。性能为132MIPS (120MHZ时钟, 3.3V供电) 或220MIPS (200MHZ时钟) 。ARM9同时配备Thumb扩展、调试和Harvard总线。在生产工艺相同的情况下, 性能为ARM7TDMI的两倍之多。常用于连网和机顶盒。

S3C2410的核心逻辑功能是建立在ARM920T架构之上的。ARM920T架构采用HARVARD型缓存, 分离的数据和指令缓存均为16KB长度, 每行8字, 其特点是低功耗的CAM-RAM执行体, 同时ARM920T还带有一个增强的ARMV4存储器管理单元MMU, 以提供对指令和数据的转换和访问的允许检查, MMU可操作主存中的二级页表, 提供了统一地址转换和保护方案, 另外MMU中的数据和地址转换旁路缓冲器TLB高速缓冲直接与ATM9TDMI相连, 因而高速缓冲来自CPU的虚拟地址。当所需的虚拟地址不在高速缓冲中时, 由MMU将虚拟地址转换为物理地址。一个64个项的转换旁路缓冲器 (TLB) 被用来加速地址转换过程, 并减少页表读取所需的总线传送。这一点对采用二级页表虚拟内存管理的操作系统的效率极为重要, 总之指令数据CACHE, 写缓冲, 物理地址TAG RAM提高了主存带宽的效率, 减少了执行延迟。从上我们可看出ARM920T核是一个优秀的平台, 在此基础上采用了先进外设总线架构 (Advanced Peripherals Bus Architecture APB) .和先进高性能总线 (AHB) 搭建了众多外设。S3C2410功能框图见图1。

除了需要在特定时刻, 发出报警信号, 有时用户还可能要求对采集数据和状态进行实时语音报读, 仅靠简单的蜂鸣器是不能实现的。必须采用一种音频解码芯片, 结合S3C2410配有IIS总线的先决条件, 这里我们选用Philips公司的UDA1341TS芯片。

S3C2410配有Inter-IC Sound (IIS) 总线, 支持扩展8/16-bi立体声音频解码, 以适应手持设备和娱乐的应用IIS总线接口支持IIS数据格式, 它提供DMA传输模式, 使用FIFO访问方式代替中断方式, 这样它可以同时接收和发送数据[2]。

Philips公司的UDA1341TS是支持IIS总线的立体声音频解码芯片, 它使用串行比特流的A/D和D/A, 拥有完整的模拟前端, 包括可编程增益放大器 (Programmable Gain Amplifier PGA) 和自动程控增益 (Automatic Gain Control AGC) 以及数字音频处理 (Digital Sound Processing DSP) [3]。

UDA1341TS支持重音处理, 软件消声等功能。这些功能是MCU通过L3接口来设置命令和参数来实现的。S3C2410没有相应的接口, 必须将一部分GPIO作为L3接口[1,2]。UDA1341与S3C2410互连图[2]如图2所示:

这里需要注意, UDA1341TS有两对左右ADC通道, 可以对两个麦克风输入采样, 其中通道2有可编程放大器, 其范围是从-3到+60.5d B, 步进为0.5d B, 而通道1无此功能。因此我们将麦克风输入到通道2, 这样就可以对输入信号进行增益控制。电路图如图3所示。

由于S3C2410无专用于UDA1341 L3的接口, 必须使用S3C2410的GPIO来模拟实现L3接口, 这里要注意UDA1341 L3的接口的时序, 它分为两种, 分别为地址时序和数据时序, 下面给出了地址时序图。 (如图4)

3部分设计代码

测试程序中定义了L3接口的两个读写函数。其中延时循环参数由具体的CPU以及工作频率所决定 (本设计具体环境是S3C2410, 核心工作频率为202MHZ, 外部总线频率为101MHZ)

音频数据是通过IIS总线在S3C2410和U-DA1341之间进行双向传输, 以S3C2410为基准点, 输出为UDA1341传送放音音频数据, 输入为经UDA1341对麦克风采样的数据。为了正常工作, 必须设置好IIS总线的各种寄存器。另外采用DMA传输模式可大幅提高模块的效率, S3C2410有专用的用于IIS总线的DMA通道, 降低了设计难度。 (用于IIS总线的相关函数 (数据查询方式读写和DMA方式读写) 略) 。

测试基本步骤为:

a.用S3C2410的GPIO模拟时序实现与音频芯片 (UDA1341) 的L3接口的交互。通过L3接口设置UDA1341的寄存器, 按照录放音的功能需求设置好相应的寄存器。

b.按照相应的录放音功能需求 (采样频率、采样位数) 设置IIS接口

c.以查询方式通过IIS输入 (输出) 声音采样数据, 即录放音

d.以DMA方式通过IIS输入 (输出) 声音采样数据

测试是在英贝特调试环境下实现的, 实现了预期目标。并实现了MP3播放器功能。目标板以后要实现装入操作系统, 在这种情况下, 要注意L3接口的两个读写函数的原子操作性。

本设计基于实际项目, 已完成设计, 实践证明在实际应用中取得了良好效果。

参考文献

[1]SAMSUNG Crop datasheet s3c2410.

[2]SAMSUNG Semiconductor.Specification SMDK2410Circuit.

音频嵌入 篇6

1 数字音频技术概论

1.1 数字音频技术

数字音频技术是以广播电视技术为基础而发展、更新的一项技术, 对其间模拟信号处理之后则可有效转化为数字化信号。此项技术现已被广泛用于广播电视工程中, 可进行节目前、后期制作与播放, 数字音频技术以其高适应性模拟音频信号, 并将所得信息充分保留, 可充分满足模拟信号工作要求, 为用户提供优质视听效果。

1.2 数字音频技术工作原理

数字音频技术工作形式为一点对多点, 压缩解码数字音频信号技术及无线传输信号技术、组网技术均是重要组分, 这时则有多种高质音频压缩解码技术被用于数字广播中, 所呈效果与人耳感觉特性十分类似, 其有效降低了码率, 比如音频信息审核与主要解码制出时要于多方面利用, 其可包括观察与分析、以人对声音特征为根据;通常人的听觉频率于相应时间可实现屏蔽效应。如果出现二相对音频信号同时存在于其间, 强度均不同, 不过其频率极其接近, 这时高强度信号会被人耳感觉到, 但往往弱强度信号会被屏蔽, 这则为频率遮蔽效应。人们可充分运用此效应来降低码率, 确保其同时间实现高强度信号传输, 但是会舍弃掉低强度信号, 其并不在系统中传输。

1.3 数字音频嵌入技术

数字音频嵌入技术极具独特优势, 可广泛用于广播电视节目制作中, 以数字音频技术构建数字音频工作站, 从而有效提高节目制作质量, 并可合理节约时间与人力, 电视广播工作效率可随之提升。视频数据信息传输中的信号仅可于特定范围内传输信号, 而这即是嵌入音频。嵌入音频强调将数据信息嵌入特定范围内, 于视频传输中以嵌入音频技术, 确保声音与画面同时进行, 从而有效提高电视节目质量。嵌入音频技术是用于电视节目前、后期制作中, 科学技术水平的不断提升, 电视广播工作可有序完成, 广播电视技术发展更为细化, 电视节目制作数字化信息建设水平亦随之提升, 嵌入音频技术可被充分应用。广播电视管理工作中应用数字音频及其嵌入技术时, 要全面分析自身情况, 再与未来发展目标充分结合, 提出科学有效的发展战略, 从而构建结合嵌入音频技术的管理系统, 以此方式严格控制和监督广播电视节目, 有效确保信息完整、准确, 促进广播电视行业的进一步发展。

2 数字音频技术于广播电视工程中的应用

2.1 广播电视前、后期处理

广播电视节目前、后期处理工作均会用到数字音频嵌入技术, 数字分量串行接口亦被广泛应用。多媒体文件资源于数字化传输中有两种方式, 主要是串行与并行, 但这两种方式处理结果误差较大, 但一种方式传输失灵时, 则可及时换为另一种方式。数字分量串行接口是以音频嵌入技术传输数据, 其传输过程中可将数字化资料严格定位, 并将各种资料转化为所需的音频。视频处理器选择时务必严格分析接口及数字传输间存在的不协调问题, 将其及时处理, 以确保音频质量不会受到影响, 而这问题的诱因是视频处理器音频处理并不细致, 若未能处理掉接口和数字传输不协调的问题, 则音频处理质量亦会随之降低。为了充分处理不协调问题以提高音频质量, 则务必严格控制音频信号的具体处理过程。

2.2 广播电视数字音频传输检测

随着科学技术水平的不断提升, 广播电视技术数字化技术亦随之深化, 数字化技术亦务必融于电视节目制作、播出、传输、储存工作中。以广电技术发展特点及其趋势而言, 嵌入音频技术应用持续深化, 电台电视台均需根据自身情况加大嵌入音频技术应用, 不断完善音频嵌入技术应用共性及其个性分析工作, 音频嵌入技术行业标准亦应不断健全。但电视节目的制作、存储并不是节目制作的结束, 应对节目播出评估与检测工作严格控制。健全行业标准前应高度重视数字音频传输检测工作, 其与音频传输检测工作息息相关, 嵌入技术应用效果及音频处理质量确保工作亦非常关键, 要严格控制广播电视节目播出时的信号干扰问题。计算机技术与广电技术的进一步发展, 应构建完善的数字音频实时检测分析自动报警检测系统, 而这为一项系统工程, 要于战略高度设计布局, 确保布局科学合理, 确保广播电视工程中数字音频嵌入技术应用合理。

2.3 广播电视传输、切换

音频嵌入系统可用于大型系统音频传输与切换, 且应用非常便捷。随着数字化技术的飞速发展, 电视节目传输与制作、播出工作均应结合数字音频嵌入技术, 数字音频嵌入技术应用时要根据电视台实际情况选择。电视节目制作时要严格分析节目, 提出科学合理的分析系统, 以确保电视节目高质量播出。通常电视视频信号转换均随着模拟信号变化而变化, 数字拾取之后的数字音频传输方式可分为并行、串行, 但其均有着共同部位及特性, 比如视频数字信号行消隐时的剩余空间亦具有相应的数字信息, 于此空间中可以不同方式把数字音频及其他辅助数据有效传输, 音频嵌入技术可有效辅助传输。SDI信号中的数字音频信号嵌入可确保视频信号于同期间、数字分量中同步传输, 且于此传输中的视频行消隐及场消隐信息则不必要, 这时则应对其取样, 音频数据可以辅助数据形式传入数字视频空隙间。

3 结束语

随着经济水平的不断提升, 科学技术亦随之快速发展, 数字音频嵌入技术亦会随之持续完善, 广播电视工程应充分掌握时代脉搏, 引进适宜的先进技术, 确保相关技术不断健全, 从而推动广播电视行业的进一步发展。将数字音频技术和高清视频信号充分结合, 使得高清电视声情并茂, 数字音频及其嵌入技术已是未来广播电视工程持续发展的重要技术, 以此为人们提供高质量语音画面, 带给人们优质的视、听觉体验。我国广播电视工程应用数字音频技术中存在诸多不足之处, 因此探讨数字音频及其嵌入技术在广播电视工程中的应用, 对广播电视工程的持续发展有着极大推动作用。本文对数字音频技进行了概论, 探讨了数字音频及其嵌入技术在广播电视工程中的应用, 为广播电视工程的进一步发展提供参考依据。

参考文献

[1]郭宏.浅淡数字音频技术及其在广播电视工程领域中的应用[J].科技创新导报, 2011, (22) :231-232.

[2]鲁琦.数字音频处理技术在广播电视中的应用分析[J].电子制作, 2013, (15) :85-87.

[3]裘永军.广播电视检测音频关键技术[J].中国传媒科技, 2013, (14) :133-134.

[4]周仪.广播电视工程中数字音频技术的优势及其应用[J].科技传播, 2016, 01 (01) :127-128.

[5]曹长俊.数字音频技术在广播电视工程中的优势和应用[J].西部广播电视, 2015, (15) :186-187.

[6]王庆华.浅析数字音频的原理和理论应用[J].通讯世界, 2015, (16) :75-75.

音频嵌入 篇7

1 嵌入式音频系统的硬件系统设计

本硬件系统的主要组成部分有电源电路、配置电路、复位电路、串行通讯接口等。其中电源电路分别为5V—2.5V和5V—3.3V的转换器, 作用是向芯片外部和内部进行供电;复位电路的作用是使得系统上的电复位以及在系统上工作时用户的按键复位;晶振电路是为系统工作提供时钟; FLASH存储器的作用是在系统断电后对用户的应用程序等信息进行存储;音频接口的作用是使系统具备进行音频输出或输入的功能; JTAG调试接口的作用是访问芯片内部的所有部件并对系统的软硬件进行调试以及编程等等。当然, 由于S3C44BOX的多数接口是物理复用的, 因此上面所提到的有些I/O功能无法同时使用, 要通过使用寄存器来对功能进行分配。

2 基于IIS总线的嵌入式音频系统

2.1 IIS总线概述

IIS, 英文为Integrate Inte RFace of Sound, 也就是集成音频接口。它被飞利浦公司首次应用于消费产品的音频设备当中。它在LRCLK信号机制中被进行多路转换, 然后将两种音频信号合成一种数据队列。当LRCLK高于高状态时, 左声道的数据被传输, 反之则是右声道的数据传输。当然, 这种高低与声道的对应是可以自定义的, 因此可可以颠倒过来。如果是多通道系统, 那么在信号机制相同时, 也可以实现同时执行好几个数据队列。因为IIS、PCM以及类似的音频接口没有寄存器入口, 因此必须设计独立的控制接口。

2.2 IIS音频驱动的实现形式

音频驱动主要包括MDD/PDD、Wavedev2 以及UAM三种模式。三种模式之间的共同点是接口相同, 皆为流驱动, 通过流接口与上层的waveapi.dll交互。其中第一种模式是最早的, 也是最为常见的分层模式, 而对支持mixer硬件的音频设备来说, 第三种模式最为恰当。

2.3 芯片设计

UDA1341 芯片是一种较为经济的音频CODEC, 它的主要作用是对模拟音频信号进行采集, 并对数字音频信号进行模拟输出, 而且还能对音频信号进行数字化处理。此芯片具有耗能小、电压低、保真强、动态范围宽以及不易失真的优势, 适用于笔记本电脑、数字摄像机以及其他家庭袖珍多媒体立体声音响设备。

2.4 音频软件的设计

上述所提到的UDA1341 芯片采用的是微控制器输入模式。在这种模式中, 是通过L3总线对所有的数字音频和系统进行控制的。而它和微控制器之间进行信息交换所依赖的是一个L3 硬件接口。这一硬件接口的引脚包括L3DATA、 3DA ODE以及L3CLOCK。 L3 进行控制的实质就是向UDA1341 写数据。具体过程包括两个步骤, 一是在根据地址模式选择设备的同时指明之后的数据所要发送到的寄存器的具体类型, 二是在数据传输的模式下传送一个八位的字节。

2.5 基于IIS总线的嵌入式音频系统的软件设计

本软件的基本流程是开始 —— 清终端——系统端口进行初始化——IIS相应的端口进行初始化——UDA1341 初始化——录音——播放——IIS结束——程序结束。

本系统的音频采样规格为系统主时钟为44.1Hz, 采样精度为16bit。本系统经过正确配置, 能够完成录音、播放和循环播放。本系统的音频数据传输非常简单, 因此不多做介绍, 只对IIS模块和UDA1341 芯片的正确配置进行论述。由于嵌入式系统的硬件设备较多, 而且并没有PC中非常标准的体系结构, 因此必须为其编写控制音频数据在硬件中流动并为音频应用提供标准接口的驱动程序, 且在设计过程中要对系统资源进行合理分配。驱动程序需要完成的任务主要有对设备以及对应的资源进行初始化以及释放, 对应用程序传输给设备文件的数据进行读取而且对应用程序的请求进行回送。在这种情况下, 需要在用户空间、内核空间、总线以及外设之间进行数据传输。

在驱动程序的设计过程中, 最为复杂的部分是DMA缓存区和内存管理部分。原因是音频设备对实时性的要求较高, 因此必须通过合理使用内存的方式提高音频数据的处理速度。在部分控制器内, 并没有内置DMA的存储区域, 因此必须在驱动程序中为音频设备分配DMA缓存区。这样的话就能将需要回放以及录制的声音数据通过DMA存放在DMA缓存区中。

3 结束语

综上所述, 基于IIS总线的嵌入式音频系统能够实现播放、录音、循环播放以及对音量进行调节的功能。此外, 还能实现对功能进行扩充, 例如进行外部中断, 使得系统可以有选择的进行录音以及播放。而且, 本系统还能被应用于较为大型的系统设计中, 例如嵌入式网络音频信号处理以及嵌入式网络视频信号处理等等, 在其中作为一个子系统。总体来说, 基于IIS总线的嵌入式音频系统设计具有非常广阔的发展前景、应用前景和研究价值。

参考文献

[1]米韶华, 康东, 杨小峰等.S3C2440嵌入式音频系统设计与实现[J].中国测试, 2010, (2) .

[2]王兴, 牟卫华, 王飞雪等.基于S3C2442B和Win CE的嵌入式导航音频系统的优化设计与实现[J].全球定位系统, 2011, (4) .

[3]吴杨希, 欧青立, 朱剑等.基于WINCE和S3C2440A的嵌入式音频系统[J].应用科技, 2011, (10) .

[4]丁勇, 周余, 都思丹等.基于Linux 2.6的嵌入式ASo C架构音频驱动研究与实现[J].计算机应用与软件, 2010, (4) .

音频嵌入 篇8

在诸多嵌入式产品中,音频系统已成为一个不可或缺的部分;而音频驱动模块则在整个嵌入式音频系统中扮演着至关重要的角色。在Linux 2.6内核里,ALSA架构因其优势,已取代OSS(Open Sound System)架构而成为音频驱动模块的默认架构。特别地,针对嵌入式音频系统,ASo C音频驱动架构则提供更为出色的ALSA支持。目前,很多嵌入式产品中的音频驱动都采用了这种架构,如著名的开源手机neo1973[1]以及MIT发起的OLPC(One Laptop Per Child)[2]等。

为此,本文对ASo C音频驱动架构进行了深入研究,并结合具体系统中的实现提出了ASo C架构音频驱动的设计思路和设计技巧。

1 嵌入式音频系统

1.1 嵌入式音频硬件系统

在嵌入式音频系统中,硬件系统主要包括支持音频处理功能的嵌入式微处理器(So C)、嵌入式音频编解码器(Audio Codec,即声卡)以及音频输入输出设备(Micphone、Speaker等)。图1给出了硬件系统框图[3]。

处理器与编解码器之间通过数字音频总线(Audio Path)和控制总线(Control Path)互联。典型的音频总线标准有I2S标准和AC’97标准,负责传输处理器与编解码器之间的数字音频数据;典型的控制总线有L3总线、I2C总线、SPI总线等,负责传输处理器对编解码器中相关寄存器的控制数据,比如音量调节以及静音控制等。

1.2 嵌入式音频软件系统

嵌入式音频软件系统可划分为用户空间中的音频应用模块和内核空间中的音频驱动模块。

音频驱动模块直接与声卡、处理器中的音频接口控制器等相关硬件模块打交道,并通过内核向音频应用模块提供统一的音频应用编程接口。

这些接口包括音频设备的打开、音频数据的输入输出、音频设备的关闭等。关于这些接口,必须有统一的标准来加以规范,才能保证音频应用程序在不同系统间的可移植性。

OSS和ALSA是最为通用的两套标准,不仅定义了音频应用编程接口规范,更重要的是定义了Audio Driver Module的架构。

OSS是Linux 2.4内核默认使用的音频驱动模块架构,由于部分开源等因素,Linux 2.6内核倾向于摒弃OSS架构,而默认使用ALSA架构。图2给出了ALSA音频驱动模块的架构图[3]。

ALSA架构中,Audio Driver Module包括ALSA Sound Core、Audio Driver和OSS Emulation Layer三个部分。

ALSA Sound Core,是ALSA架构的核心,为Audio Driver Module的完整实现搭建了基本框架。基于ALSA Sound Core,特定音频系统的Audio Driver Module的开发只需实现其中的Audio Driver即可。Audio Driver负责处理音频系统的底层硬件细节,进而向ALSA Sound Core提供所需接口。

图2中ALSA Lib是ALSA架构实现的音频应用编程库,简化了音频应用程序的实现;OSS Emulation Layer和OSS-ALSA Adapter则用于提供ALSA架构对OSS音频应用程序的兼容性。

2 ASo C音频驱动架构研究

2.1 ASo C音频驱动架构分析

ASo C从属于ALSA音频驱动模块架构(见图2),是ALSA针对嵌入式音频系统专门设计的Audio Driver的架构。

ASo C架构中,Audio Driver被划分成Codec Driver、Platform Driver和Machine Driver三部分。图3给出了ASo C音频驱动架构系统框图。Codec Driver(编解码器驱动)主要负责实现编解码器中的各个寄存器的配置功能[4];Platform Driver(平台驱动)即So C驱动,主要负责实现对特定So C中的音频接口控制器以及DMA Controller的控制功能[5];Machine Driver(板级驱动)主要负责整合Codec Driver和Platform Driver[6]。

ASo C的整体设计采用了面向对象设计思想。通过EX-PORT_SYMBOL_GPL宏,Codec Driver导出codec DAI对象(codec Digital Audio Interface)和codec driver对象给Machine Driver;Platform Driver则导出So C DAI对象(So C Digital Audio Interface)和platform driver对象给Machine Driver。最终,Machine Driver将适时地调用这些对象。

codec DAI对象是struct snd_soc_codec_dai结构体,其包含诸多编解码器的相关信息及其各寄存器的配置函数;codec driver对象是struct snd_soc_codec_device结构体,其包含Codec Driver模块的初始化和清除函数;So C DAI对象是struct snd_soc_cpu_dai结构体,其包含So C中的音频接口控制器的相关信息及其各寄存器的配置函数;platform driver对象是struct snd_soc_platform结构体,其包含有关DMA的各操作函数,如DMA通道和DMA缓存的申请和释放、DMA控制器的配置等。

2.2 ASo C音频驱动架构中的独立性原则

针对一个特定的嵌入式音频系统,Audio Driver(见图2)的开发可以使用与通用PC中音频系统一样的架构,也可以使用上述针对嵌入式的ASo C架构。

与通用PC中采用的架构相比,ASo C最大的优势在于其组成模块需遵循的独立性原则所带来的代码可复用性。

ASo C独立性原则描述如下[7]:Codec Driver必须与platform和machine无关;Platform Driver必须与codec和machine无关;Machine Driver则可以与platform、codec和machine有关。

其中,codec指的是音频系统用的是什么编解码器,如uda1341、wm8753等;platform指的是用的是什么处理器,如s3c2440、pxa250等;machine指的是除上述codec和platform以外的音频系统相关的板级细节,如编解码器与处理器之间的互联细节等。

图4说明了ASo C架构音频驱动设计过程中,遵循上述独立性原则所带来的代码可复用性。Audio System 1和Audio System 2使用不同的codec、相同的platform,上述关于Platform Driver的独立性原则可保证这两个音频系统之间可复用Platform Driver;Audio System 2和Audio System 3使用相同的codec、不同的platform,上述关于Codec Driver的独立性原则可保证这两个音频系统之间可复用Codec Driver。

在ASo C架构音频驱动的设计中,遵循上述独立性原则,则可在不同音频系统间最大限度地复用代码。这在通用PC所采用的Audio Driver架构中是不具备的。因为通用PC中,Audio Driver往往就由一个单独的程序来实现包括codec、platform以及machine在内的所有硬件控制。

3 ASo C架构音频驱动的实现

3.1 基于s3c2440和uda1341的音频系统硬件设计

图5给出了基于s3c2440和uda1341的嵌入式音频系统的硬件设计。

s3c2440是Samsung的嵌入式微处理器,集成有I2S音频总线控制器[8]。uda1314是Philips的嵌入式音频编解码器,采用I2S音频总线,有两个输入通道和一个输出通道[9]。两者之间采用I2S总线(CDCLK、I2SLRCLK、I2SSCLK、I2SSDI、I2SSDO)和L3总线(L3MODE、L3CLOCK、L3DATA)互联。

关于两者的互联,需注意以下细节。5根I2S总线在s3c2440上分配有固定的5根管脚;3根L3总线则没有固定的管脚与之对应,硬件设计中可任选三个空闲的GPIO口与uda1341的L3接口互联。如上述音频系统中:S3C2440_GPB2对应于L3MODE,S3C2440_GPB3对应于L3DATA,S3C2440_GPB4对应于L3CLOCK。对此,不同的音频系统可能会有所差别,这正是上面提及的不同音频系统之间的machine(板级)差别的示例。

3.2 基于s3c2440和uda1341的ASo C架构音频驱动实现

3.2.1 基本架构

针对图5所示音频硬件系统,设计了相应的ASo C架构音频驱动,实现了音频播放、录制以及全双工工作等功能。

如前面的章节所讲,整个Audio Driver由三个模块组成:Codec Driver、Platform Driver和Machine Driver。图6从基本架构上对该ASo C音频驱动的实现进行了描述。

其中,Codec Driver由uda1341.c实现,导出codec driver对象(soc_codec_dev_uda1341)和codec DAI对象(uda1341_dai);Platform Driver由s3c24xx-pcm.c和s3c24xx-i2s.c共同实现,分别导出platform driver对象(s3c24xx_soc_platform)和So C DAI对象(s3c24xx_i2s_dai);Machine Driver由smdk2440_uda1341.c实现,负责整合Platform Driver和Codec Driver。

严格意义上说,图6中的L3模块(L3 Module)属于Codec Driver。之所以将其分离出来作为一个独立的模块,是为了满足ASo C架构关于Codec Driver的独立性原则:Codec Driver必须与platform以及machine无关。关于ASo C独立性原则的满足,将在下面着重讲述。

3.2.2 ASo C独立性原则如何满足

针对一个特定的嵌入式音频系统,应当如何设计ASo C音频驱动架构中的三个模块,以满足ASo C独立性原则呢?

图7给出了为满足ASo C独立性原则,ASo C音频驱动设计过程中所采用的基本思路。针对不同的系统,在设计过程中可能会有所差别,但基本思路不变。

首先,明确要设计的Audio Driver需要完成哪些子任务,图中用subtask-i表示第i个子任务。如DMA相关控制、So C中音频总线控制器的配置、codec中寄存器的配置等。

而后,对各子任务进行依赖性关系分析,并据此决定是否要进行更细的划分。比如,若该子任务只依赖于platform或codec,则无需进一步的划分;若只依赖于platform和codec,则可进一步划分成分别只依赖于platform和codec的两块。这里只列举了两种情况下的处理思路,不同的子任务可能会有其他不同的依赖性关系,这就需要根据具体情况灵活处理。

最后,根据各(子)子任务的依赖性关系,分派到ASo C不同的模块中编程实现。

图7中,除ASo C架构标准的三个模块之外,还有一个叫作其他部件(Other Components)的模块。这里用以代表特定系统中的特殊处理部分,比如前面提到的为满足Codec Driver独立性原则而单独分离出来的L3模块(见图6)。

下面将结合基于s3c2440和uda1341的ASo C音频驱动设计中的一个例子,来说明上述基本思路的使用,并讲述为保证独立性原则而广泛采用的两个基本的软件设计技巧。

该ASo C音频驱动的一个子任务描述如下,根据音频应用程序所需的采样率计算出系统时钟(codec clock)与采样率(sampling rate)之间的倍数关系:codec clock=(384 or 256)×sampling rate,进而设置s3c2440中的I2S Controller和uda1341中的相关寄存器,且要保证两边的设置相一致。

按照上述基本思路,对该子任务进行依赖性关系分析。设置s3c2440中I2S Controller的相关寄存器只与platform相关;设置uda1341中相关寄存器除了与codec相关,还与platform以及machine相关。结合3.1节硬件设计中提到的互联细节,容易理解uda1341中寄存器设置对platform和machine的依赖性。

显然,需要根据独立性原则细分该子任务。图8给出了该ASo C音频驱动中所采用的细分方式。

从图中可知,将该子任务分为四个部分,最终分派到Platform Driver、Codec Driver、Machine Driver和L3 Module中去实现。

在上述细分中,主要运用了两个基本的软件设计技巧:其一,机制和策略分离;其二,定义接口隔离层。

机制与策略分离指的是:相关模块负责实现基本的设置功能(机制),而对这些设置功能的调用则放在其他模块内(策略)。在该示例中,A负责实现对I2S Controller中相关寄存器的进行设置的接口函数,以提供设置I2S Controller中系统时钟与采样率之间的倍数关系的功能(机制);B负责实现对uda1341中相关寄存器进行设置的接口函数,以提供设置uda1341中系统时钟与采样率之间的倍数关系的功能(机制);而将计算系统时钟与采样率之间的倍数关系的计算任务以及根据计算结果调用A和B中提供的接口函数进行最终设置的任务放置到C中(策略)。通过这种机制与策略的分离,达到了去除Platform Driver与Codec Driver之间必须保证系统时钟与采样率之间的倍数关系设置一致的耦合性,而将这种耦合性放置到没有独立性要求的Machine Driver中处理。

如上所述,对I2S Controller中相关寄存器的进行设置的接口函数是放置在Platform Driver中实现的。这是没有问题的,因为这只与platform相关。但是,对uda1341中相关寄存器进行设置这一功能的实现则不只与codec相关,还与platform、machine相关。所以,不能简单地将其全部放置在Codec Driver中实现,否则会违背Codec Driver的独立性原则。L3模块就是为保证Codec Driver与platform以及machine无关而设计的。

下面将讲述L3模块的设计细节,其采用的主要设计技巧就是前面提及的定义接口隔离层。定义接口隔离层指的是:通过定义统一的函数接口(还包括相关的数据结构),在相关模块中进行接口的实现,而在另外的模块中进行接口的调用,通过分离接口的实现和接口的调用来达到去耦合性的目的。

图9给出了L3模块的设计细节。可知,接口隔离层定义了统一的接口函数(即图9中给出的6个函数)以及相关的数据结构(图中未给出)。

其中l3_write函数的原型如下:

用于实现通过L3总线向某个使用L3总线的器件(用struct l3_adpater结构体表示)中地址为addr的寄存器写入buf中长度为len字节的数据。该接口定义本身只依赖于L3总线规范,对platform、codec以及machine都没有依赖性。这也就达到了隔离platform和machine目的。当然,该接口的具体实现则必然是依赖于platform和machine的了。

当然,除了l3_wrie函数以外,整个接口隔离层中定义的接口都具备如下特点:只依赖于L3总线规范,对platform、codec以及machine没有依赖性。因此,接口隔离层也就达到了需要的目的:为Codec Driver去除与platform和machine之间的耦合性。

举例来理解,假设有两个音频系统:SYS-1和SYS-2。SYS-1使用uda1341和s3c2440,SYS-2使用uda1341和pxa250;两者使用的与uda1341的L3接口连接的3个GPIO口也不一样。也就是说,SYS-1和SYS-2的platform以及machine都存在差异。在两者的ASo C架构音频驱动设计中,通过定义完全一致的接口隔离层,将platform和machine的异构放到接口具体实现层中处理,从而使得底层platform和machine的异构对Codec Driver变得透明,进而保证了SYS-1和SYS-2中的Codec Driver完全一样。

4 结论

ASo C架构音频驱动具有代码高度复用的优点,在不同的嵌入式音频系统之间可以最大限度地复用代码;此外,ASo C架构音频驱动还采用了一种叫作动态音频电源管理DAPM(Dynamic Audio Power Management)的电源管理机制[10],使得嵌入式音频系统可以消耗最少的功耗,这是嵌入式应用中关键的技术指标之一。因此,ASo C架构音频驱动在嵌入式音频系统中将得到越来越广泛的应用。

本文深入研究了ASo C音频驱动的架构,提出了为满足ASo C独立性原则可采用的设计思路和设计技巧,这对ASo C架构音频驱动的研究和设计有一定的指导意义。此外,本文为基于s3c2440和uda1341的嵌入式音频系统所设计的ASo C架构音频驱动已在一款基于Wi Fi的智能手机中获得应用,很好地支持了所需要的音频功能,这对实际嵌入式系统中ASo C架构音频驱动的开发具有很好的参考价值。

参考文献

[1]Jollen.Introduction to OpenMoko Project.2007.http://www.jollen.org/blog/2007/10/02/OpenMoko_Project_Intro_v0.2.pdf.

[2]Jaya Kumar,Liam Girdwood.ALSA,OLPC Audio and ASoC/DAPM.2006.https://foss.in/2006/cfp/slides/ALSA_and_OLPC_audio_82.pdf.

[3]Sreekrishnan Venkateswara.Essential Linux Device Driver1st Edition.New Jersey:Prentice Hall,2008.

[4]<linux-2.6.22.5>/Documentation/sound/alsa/soc/codec.txt.

[5]<linux-2.6.22.5>/Documentation/sound/alsa/soc/platform.txt.

[6]<linux-2.6.22.5>/Documentation/sound/alsa/soc/machine.txt.

[7]<linux-2.6.22.5>/Documentation/sound/alsa/soc/overview.txt.

[8]Samsung.S3C2440A32-Bit CMOS Microcontroller User′s Manual.Re-vision1,2004.

[9]Philips.UDA1341TS Economy audio CODEC for MiniDisc(MD)home stereo and portable applications.2001.

注:本文为网友上传,旨在传播知识,不代表本站观点,与本站立场无关。若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:66553826@qq.com

上一篇:常用音频格式 下一篇:音频资源