作者: 缪爱国;刘昊;严菊明
引言
midi(乐器数字接口)是一种电子乐器之间以及电子乐器与电脑等设备之间的统一交流协议。该协议是一个二进制形式的音乐描述语言,每一个描述乐器演播动作的字都赋给一个特定的二进制代码,通过它指示乐器即midi设备做什么和怎样做,如演奏音符、加大音量、生成音响效果等。
由于midi本身不是声音信号,而只是让声音设备产生声音的一系列的指令,所以midi文件本身非常小,特别适用于对存储容量有限制的手持设备,如手机和掌上电脑。本文将着重介绍如何在手持信息终端嵌入式系统平台上实现midi的播放。
midi的基本原理
midi文件主要由midi消息组成。midi消息又可分成通道消息和系统消息两大类,如图1所示。
图1 mid i消息的组成 从上面的描述中,
可以看到midi实际上只是一组数字信号,并不包括声音信号,它记录的是音乐在什么时间用什么音色发多长的音等等。midi音乐每个乐音是由三个要素组成的:音色、音高(音调)和音长。可以把各种乐器的音色先录下来,然后给每个音色编号,如钢琴编为00;再给音高编号,如c5编为49;然后是音符播放的时间的编码,如把8分音符编号为60。此时,数字串“00 49 60”就表示演奏的是钢琴的c5音,演奏时间为8分音符。midi在播放时,会根据midi文件纪录的乐曲信息向预先录制好的乐器(如钢琴)的波表发出指令,从波表中找出对应的声音信息,经过合成、加工后再回放出来,就形成了美妙的音乐。
手持信息终端软硬件平台
手持信息终端包括手机、个人数字助理(pda)、掌上电脑(hpc)等等,它们可以实现多种功能,如pim(电话簿、日程安排、备忘录、记事本、时钟)、计算器、录音、辞典、游戏和播放音乐等功能;也可以加入无线通信的功能,如电话、短信、无线email等等;还可以通过数据线与pc相连,互通数据、进行备份和数据交换。
该手持信息终端平台采用的是业界流行的motorola公司的mc68ez328处理器;存储模块由4m字节的flash闪存和2m字节的edo dram组成;显示模块采用160×240的16级灰度的黑白屏,屏上合成有四线电阻式触摸屏。音频处理模块的作用是用来播放音乐,它由两部分构成:滤波电路和音频功率放大电路。该模块接受来自处理器内部输出的pwm脉冲信号和音频模块的开启关闭的控制信号。硬件平台的结构如图2所示。
图2 手持信息终端的硬件平台结构
该手持信息终端是以自主研发的多任务嵌入式操作系统asixos为基础,包括操作系统(asix os)、驱动程序包(driver)、应用程序包(application)、图形用户接口(asixwin)、图形库软件包(asixgpc)、嵌入式数据库(asixdb)、嵌入式文件系统(asixfs)、网络协议软件包(asixnet)等等。asix模块原理框图如图3所示。
图3 asix模块原理框图
由图可以看出,音频驱动模块是播放midi音乐的基础,它控制硬件设备的打开关闭等等操作;音频服务层是连接应用程序和底层驱动的枢纽,它包含了对底层操作的接口;应用程序是整个手持终端产品的具体功能的体现,midi播放器是其中一个用来测试midi播放的小应用程序,它是建立在音频服务模块和音频驱动模块基础之上的。
midi播放的实现
midi的播放需要软硬件协同工作,要播放midi文件,首先必须对midi文件进行解码:若是控制信息(如节拍、时间格式等等),则进行相应的控制;若遇到音符信息,则将相应的数据(音符代码、时间值)存储在音频缓冲区。
解码完成后,声音处理程序将对音频缓冲区中的音频数据进行处理,根据音符代码从各个软波表中取出相应音符的真实采样值送往音频设备,再由音频设备的滤波电路进行滤波排除电路中的高低频干扰,然后再经过音频放大电路对音频信号进行放大,驱动喇叭放出音乐,音乐时间的长短则根据音频缓冲区中记录音符长短的数据来控制音频设备的开启和关闭来实现。
由于手持信息终端存储容量的限制,该手持信息终端的软波表只包含了大钢琴(acoustic grand piano)的一种音色,具有3阶音色(12×3个音符)。该软波表采用16kb/s和8bit的采样率进行录制,每个音符采样0.5秒,即每个音符占有8000个字节,所以整个软波表的大小为12×3×8000=288k字节,这样的大小对于手持信息终端来说应该是可以承受的。
声音处理程序是利用mc 68ez328的定时功能和pwm输出功能来实现的。pwm具有三种工作模式:回放(playback)模式、单音调(tone)模式、d/a模式。由于tone模式发出的声音的频率比较单一,不能达到真实乐器的效果,所以采用了回放模式。回放模式是利用软波表来实现的,它根据真实乐器的采样值进行回放,从而能达到比较真实的效果。
midi播放的实现在硬件上是由两部分组成的:m68ez328内部的pwm模块和外部滤波放大电路。具体原理如下:
pwm(脉冲宽度调制)是一种对模拟信号电平进行数字编码的方法。通过对方波的占空比调制来对一个模拟信号的电平进行编码。
音频处理的外围电路比较简单,它主要用来处理由pwm输出的midi音乐,由滤波电路和音频功率放大电路组成。mc68ez328内部具有pwm输出电路,经过一个由两级运算放大器构成的滤波电路,滤除噪声后取出音乐信号;滤波后的信号,在经过功率放大电路放大后,推动扬声器发出音乐声。为了减小功耗,音频功率放大电路和滤波电路都有使能控制信号控制,当需要播放音乐时将电路使能,平常关闭该模块。
软件的实现
通过对软件平台的介绍,可以知道asix os是一个嵌入式的多任务实时操作系统,所有应用程序都是通过任务调度机制来实现的。因此要实现midi的播放需要软件在以下三个层次给予支持:音频驱动模块、音频服务模块、应用程序(midi播放器)。当点击应用程序(如midi播放器)后,操作系统就会进行任务调度,然后启动相应的服务模块(音频服务模块),通过服务模块再调用底层驱动来播放midi音乐。下面将具体阐述一下各模块的功能和实现:
该模块是midi能够播放声音的基础,它直接和底层硬件相关,通过cpu中pwm模块的一些寄存器来实现声音设备的打开关闭等操作。它通过声音服务模块被所有的需要发音的程序所调用,是所有发音程序得以正常工作的基础。
它由以下几个子模块组成:pwm音频设备初始化模块;pwm音频设备回放率配置模块;pwm音频设备启动模块和关闭模块;pwm音频设备工作模式选择模块。
该模块屏蔽了底层的驱动,为应用程序访问音频设备提供了统一的接口,使用户无需关心底层的具体实现即可以完成声音设备的控制,使之具有较好的移植性。它主要通过消息机制来实现,为应用程序和底层驱动模块的通信提供了一个桥梁,从而避免了直接和硬件打交道。服务层主要由定时播放模块、定长播放模块和配置模块组成。
音频服务模块是播放midi的关键,它处于承上启下的作用,用于连接上层的应用程序和底层的设备驱动。该模块中midi解码子模块完成对midi文件的解释,并得到最终要播放的音符信息和各种控制信息链表,由于midi的解码涉及到midi文件的规范协议和具体的算法,这里不作详细的描述。
音频服务模块提供两个层次的接口,面向应用程序的接口和面向底层的接口。
服务模块的接口工作原理如图4所示。
图4 服务模块接口
midi播放模块包括midi播放器(用来测试midi播放的应用程序之一),此外还可以在手机铃声、信息提示音、笔触音等等程序中实现midi的播放,但其实现原理基本上都是一样的。除了界面上的设计,主要就是调用midi服务模块提供的几个接口函数即可实现midi的播放,这里不作详细介绍。
结语
本文的手持信息终端平台经过实际测试,播放效果令人满意,能够和一般的手机铃声相媲美。由于midi文件的体积较小,正好可以弥补手持信息终端存储容量小的缺陷,因此它具有广阔的应用前景。
ADI推出AD5791高精度20位数模转换器
群联电子加入车用边缘运算联盟
蔬菜水果类原农药残留检测仪特点
高通进入转折期 输或赢3月见真章
索尼发布新款CMOS图像传感器IMX585,专为安防摄像头设计
基于AsixOS和MC68EZ328处理器实现手持信息终端的设计
由田收购晶彩科股份_进一步跨入半导体领域
无人机市场风雨不断:巨头把控产业风向标,后起之秀奋起直追
微机消谐装置使用场景受到哪些影响
Porous Media在运输中运用物理信息深度学习
新型燃料电池汽车氢系统安全防控中传感技术的应用
贸泽大咖说 |智能物联网的下一轮“破界”(下)
树莓派IO操控驱动代码的编写方式
SD-WAN全球组网上云
高考过的后浪需要用“芯”加持-----AMD锐龙本和你们最搭!
人脸识别监控晚上能看清楚人脸吗
工程师忽略了LDO的“QC”参数,有何影响?
配电室智能综合监控系统介绍
家电线上线下同价或将成为现实
为什么Linus不用C井语言写Linux系统