基于SPCE3200的MP3解码的设计应用

2013-03-19 02:02
湖北理工学院学报 2013年1期
关键词:解码器数据量解码

高 芹

(湖北理工学院计算机学院,湖北黄石435003)

0 引言

随着社会的进步、计算机的普及,多媒体已逐渐渗透到社会的各个领域,社会对多媒体的需求越来越大,对多媒体相关技术的要求也越来越高。SPCE3200 作为嵌入式系统,具有多媒体硬件模块,为其多媒体功能提供了很好的支持平台。

本文主要探讨应用于SPEC3200 中依赖的DAC 硬件,通过MP3 库解码器的API 函数进行MP3 播放的工作原理和具体的开发方法。

1 MP3 的基本概念和格式

1.1 MP3 的基本概念

MP3 的全称为MPEG1 Layer-3 音频文件,MP3 对音频信号采用的是有损压缩方式,压缩率高达10 ∶1~12 ∶1。通常情况下,MP3涉及2 个MPEG 标准:MPEG-1 音频(ISO/IEC 11172-3)、MPEG-2 音频(ISO/IEC 13818-3)。MPEG-1 音频(ISO/IEC 11172-3)描述了具有1 个或2 个声道,采样频率为32 kHz、44.1 kHz 或48 kHz 的3 层音频编码。MPEG-2 音频(ISO/IEC 13818-3)有2 个MPEG-1的扩展,通常叫做MPEG-2/LSF 和MPEG-2/Multichannel。MPEG-2/LSF 有2 个特点:①有1 个或2 个声道;②采样频率为MPEG-1 的一半。MPEG-2/Mutichannel 有3个特点:①多达5 个声道和1 个LFE 通道(低频增强,不是重低音);②与MPEG-1 一样的采样频率;③最高波特率可达到1 Mbps[1-2]。

1.2 MP3 的格式

MP3 文件大体分为3 部分:TAG _ V2(ID3V2)、Frame、TAG_V1(ID3V1),其中ID3V2和ID3V1 称为音频标签,Frame 称为音频帧。

1.3 MP3 解码的基本原理

当MP3 文件被打开后,播放器首先试图对帧进行同步,然后分别读取通道信息及增益因子等数据,再进行霍夫曼解码,至此获得解压后的数据。但这些数据仍然不能进行播放,它们还处于频域,要想听到歌曲还要将MP3频域通过特定的手段转换到时域。接下来的处理为立体化处理、抗锯齿处理、IMDCT 变换、IDCT 变换及窗口化滑动处理。MP3 解码的基本原理图如图1所示。

图1 MP3 解码的基本原理框图

2 MP3 解码硬件——数模转换控制器DAC

2.1 DAC 的功能结构

SPCE3200 有2 路16 位高速数模转换器(DAC),可以进行语音播放,其特性如下:

1)电压型输出;

2)16 位精度;

3)共有2 路DAC 通道(通道0 和通道1);

4)具有4 级深度的FIFO Buffer,Buffer 的大小可设置;

5)可以编程设置DAC 的采样率;

6)中断机制和缓存区的支持使得利用DAC 进行语音播放更方便。

SPCE3200 的DAC 模块引脚描述如表1所示。

表1 SPCE3200 的DAC 引脚对应表

2.2 DAC 转换输出FIFO Buffer 中的数据的基本操作

DAC 转换输出FIFO Buffer 中的数据的基本操作为:当使能DAC 模块及DAC 输出使能FIFO Buffer 时,DAC 将转换并输出FIFO Buffer中的数据。具体步骤如下:

1)使能DAC 模块时钟,且不复位DAC 模块;

2)使能DAC 模块及DAC 输出;

3)通过0x88051080 和0x88051084 指定Buffer 的基地址;

4)设置采样率,使能中断;

5)填Buffer;

6)使能FIFO Buffer,指定FIFO Buffer 的大小,选择2 个通道输出FIFO Buffer 中的数据;

7)等待中断。

当Buffer 中的数据少于半个Buffer 大小时,DAC 会引发中断,所以在中断服务程序需填Buffer;而且由于此时只有半个Buffer 的数据被播放,所以只能向已播放的半个Buffer 中填数据。主参考程序段为:

3 MP3 解码库及解码器

3.1 MP3 解码库基本工作原理

SPCE3200 的MP3 文件播放硬件上依赖DAC 进行输出播放,软件上主要通过MP3 库解码器的API 函数来实现。SPCE3200 的MP3库解码器是由一个库函数文件MP3Player_V1.0.a、一个头文件MP3Player.h 和一个用户自定义函数文件 MP3User.c 构成,其中MP3Player_V1.0.a 库函数文件包含解码器的12 个接口功能函数。该库适合 ISO/IEC 11172-3 和13818-3 标准,支持所有层(1、2、3 层)和所有的位率(不支持可变码率)[3]。

MP3 库解码器的工作过程如图2所示。MP3 资源数据被填入MP3_bs_buf 缓冲区中,MP3 解码器在MP3_bs_buf 中取数据并进行解码,解码后的PCM 数据存放在PCM_buf 中,通过TempPCM 把PCM 数据填充在DAC 的FIFO Buffer 中,经D/A 转换器转换后输入到DAC端口进行播放。

图2 编码器的工作过程

3.2 MP3 库解码器的相关函数

在对应的SPCE3200 的MP3 库解码器中定义了MP3PlayerV1.0.a 文件,其中定义了所有的解码器接口函数,并在MP3Player.h 文件中进行了声明,这些函数将被库函数调用,所以用户在使用时不可以改变函数名和函数形式(比如参数数量、返回参数等)。其具体的解码函数库[4]如表2所示。

表2 MP3 库解码接口函数

MP3User.c 中定义了3 个用户接口函数[4-5]如表3所示,这些函数都被库函数调用,所以在使用时同样不能改变其函数名和函数形式。

表3 MP3 库解码用户接口函数

其中MP3_Read_Data()可自行编写该函数体中的内容,向MP3 Buffer 中填入MP3 数据,该函数在解码库函数MP3_Service_Loop 中调用,第1 个参数EndParam 是调用MP3_Play时用户指定的结束条件参数;第2 个参数buf是MP3_Service_Loop 调用时传递过来的MP3 Buffer 地址,用户需要向buf 中写入MP3 数据;第3 个参数fill_size 为MP3_Service_Loop 调用时传递过来要填充的MP3 数据量。解码器允许用户填入的数据量比fill_size 少,如临近MP3 文件末尾时没有这么多数据可以填充,所以用户必须让该函数返回此次实际填入的数据量。值得注意的是,当实际填入的数据量比解码器要求的数据量小时,解码器并不会结束播放,而当用户使用MP3_Set_Status()函数将C_MP3_Data_End 标志置位时,解码器才认为此MP3 文件播放结束。

SPCE3200 进行MP3 资源播放的原理如图3所示。在播放循环中,程序不断对语音资源进行解码,并将解码后的数据保存在PCM Buffer 中,最后从PCM Buffer 中取出数据并填入DAC 的FIFO Buffer 中,输出播放,而将解码后的数据填入DAC 的FIFO Buffer 的操作是在DAC 中断服务(IRQ63)程序中完成的。

图3 MP3 资源播放原理

具体参考步骤如下:

1)添加MP3Player_V1.0.a 库文件到工程中;

2)添加MP3User.c 文件到工程中;

3)拷贝并添加MP3Player.h 头文件到工程中;

4)添加MP3 语音资源;

5)编写播放程序;

6)编写MP3User.c 中的MP3_User_Init、MP3_Read_Data 和MP3_User_Stop 函数;

7)在IRQ63 中断服务函数中调用MP3_Service_Loop_ISR 函数;

8)编译、下载播放。

根据以上步骤即可编写播放程序并完成MP3 的播放。

4 性能测试

MP3 为了取得较好的压缩效果而采用了相对复杂的技术,而且宽带音频信号的取样率也较高(一般为44.1 kHz 以上),所以MP3 编解码的运算量和数据量都相当庞大。本文中基于SPCE3200 的MP3 解码程序,在128 kb/s、立体声的条件下需要近40 Mb/s 时进行实时解码,并需耗用15 kb 程序设计空间。经测试,当采集速度为38 Mb/s 以上时,声音比较清晰流畅;当采集速度低于20 Mb/s 时,声音断续且噪音大,解码困难。

5 结束语

本文对MP3 硬件解码技术进行了相关探索,并成功实现了在SPCE3200 试验箱平台上的MP3 播放,音质清晰,效果良好。虽然MP3播放器受到音乐爱好者的欢迎,但目前相关器件的成本偏高,影响了MP3 播放器的推广使用。随着元件成本的逐步降低,具有优异性能的MP3 必将成为市场的主流,MP3 编码器也必将取得进一步的发展。

[1]路锦正,周冬梅.Visual Studio2005 音频/视频处理技术及工程实践[M].北京:电子工业出版社,2010:26-28.

[2]Bruce Eckel.Thinking in Studio2005[M].北京:机械工业出版社,2010:2012-224.

[3]冀宏斌,罗浩,徐兴.基于WM8741 的音频解码器设计[J].电子设计工程,2009(12):118-120.

[4]王正万.嵌入式Linux 下基于ARM9 的媒体播放的设计[J].电子设计工程,2010(12):122-124.

[5]崔颖,赵宇,马永涛,等.基于TMS320C6416 的DRM 音频解码实现及优化[J].电子技术应用,2011(5):38-40.

猜你喜欢
解码器数据量解码
《解码万吨站》
科学解码器(一)
基于大数据量的初至层析成像算法优化
计算Lyapunov指数的模糊C均值聚类小数据量法
科学解码器(二)
科学解码器(三)
高刷新率不容易显示器需求与接口标准带宽
宽带信号采集与大数据量传输系统设计与研究
线圣AudioQuest 发布第三代Dragonfly Cobalt蓝蜻蜓解码器
解码eUCP2.0