2.3 其他模块设计
LCD显示屏选用的是AUO公司的A030DL01(320×240)工业级液晶屏。该液晶屏的彩色格式为RGB656格式,彩色色深可达到64K色,显示文件名和歌曲基本信,同时因屏幕空间较大,可添加彩色背景画面。汉字显示是通过添加字库软件实现的。键盘有4×1个按键,方便用户控制播放器,同时也保证在语音模式不能正确工作时可以按键控制机器。
MPEGDEC_STREAM*MPEGDEC_open(char*filename,MPEGDEC_CTRL*ctrl);
功能描述:打开MPEG音频文件。
参数:filename为待打开的音频文件,ctrl为控制数据解码信息的结构体。
返回值:打开成功,则返回包含数据流信息和解码信息的结构体指针;失败,则返回NULL。
void MPEGDEC_dose(MPEGDEC_STREAM*mpds);
功能描述:关闭MPEG音频文件。
参数:mpds指向待关闭的音频文件。
无返回值。
unsigned long MPEGDEC_decode_frame(MPEGDEC_STREAM*mpds,short*pcm[MPEGDEC_MAX_CHANNELS]);;
功能描述:为当前打开的音频文件的一帧解码。
输入:mpds指向打开的音频文件。
输出:pcm[]存放解码后的16位音频数据;pcm[0]中存放单声道或左声道或声道1的数据;pcm[1]中存放右声道或声道2的数据。
返回值:返回解码一帧的音频数据数目;返回MPEG-DEC_ERR_EOF,则说明当前帧是最后一帧;返回MPEG-DEC_ERR_BADFRAME,则说明该帧已损坏。
3.2.2 歌曲基本信息结构体
按照MP3的ID3 V1.0标准定义,MP3文件的最后128字节用来存放标签头、歌曲名、演唱者等信息。为了在LCD屏上显示当前播放歌曲的基本信息,给出了一个结构体来读取并存放这些信息。这个结构体定义如下:
3.2.3 播放主流程
当用户选中歌曲进入播放界面时,ARM7主机首先通过串口给单片机发一个命令字0x01,通知从机进入识别“播放器”这组命令的函数。从机接收到命令后,首先判断“播放器”这组命令是否已经训练。若训练,则返回0x04,同时播放器的语音模式启动成功;若未训练,则返回0x06,LCD屏显示提醒用户训练该库;若从机在规定时间内(因实时性要求,这里“规定时间”指200 ms)返回其他值或未返回值,则播放器的语音模式启动失败。若成功启动语音模式,音乐是分帧解码后播放,在帧一帧循环中,主机需查询键盘和串口,来实现“上一首”、“下一首”、“播放”、“暂停”、“退出”和调节音量的功能。若语音模式启动失败,则只需查询键盘。每次接收到“退出”命令时,主机在退出音乐模式前需通过串口发送0x05给单片机,通知单片机同步退出该模式;单片机接收到命令后,需返回0x04告知主机已退出。播放的主流程如图4所示。关于语音命令如何训练,可见参考文献[5],这里不再赘述。
4 实验结果
以W90P710开发套件+凌阳SPCE061A为硬件,采用嵌入式操作系统μClinux,在实验室安静和嘈杂的情况下(安静时室内噪声为50 dB,嘈杂时为60 dB),测试播放器语音模式的工作效率。在测试语音模式的工作效率前,先进行了按键测试,测试通过率为100%,且音乐播放流畅,响应满足实时性要求。