1 系统构成
语音编辑器要具有分段录音、分段播放、分段组合播放等基本的语音编辑功能及良好的用户操作界面。
系统设计主要围绕用户操作界面展开。在单片机控制下,对ISD1420进行上述基本的语音编辑操作。其系统结构如图1所示。
显示器显示用户在对系统进行操作时的相关信息。如,分段地址、录放音提示、分段组合操作提示等等,以直观地指示用户操作。
键盘 围绕语音编辑功能,系统应为用户提供一个友好的操作界面,以使用户方便灵活地使用本系统。
单片机 作为系统的控制核心,从键盘接受用户命令,以控制系统显示及语音电路工作。
ISD1420是一种录音数据永久保存、高保真、低耗电、适用于同单片机接口的新一代语音器件,是系统功能实现的核心。在单片机控制下实现了题目要求的所有功能。
2 硬件方案
2.1 显示部分
在分段录音和放音过程中,系统应该为用户提供段地址显示,以为其指示当前正在操作的那个段,段地址为两位。在这些操作中,系统还应该提供操作指示,如提示开始、进行中、结束等。系统设置一位数码管,以闪烁、字符等形式提示用户操作。系统选择3位LED七段数码管,已基本满足操作提示的需求,如图2所示。3位LED七段数码管采用静态显示方式,其显示稳定,程序简单,电路实现也不复杂。它的显示数据由8位D触发器74LS374锁存输出,驱动数码管显示。8位D触发器的输入采用总线连接。其锁存控制由单片机的写命令WR,加上地址信息进行;其地址分配为FE00H,FD00H,FB00H。
2.2 键盘
键盘是人机的主要界面,所有用户命令都是由它向单片机发出的。首先进行交互设计,根据功能要求设置功能键,包括录音、放音、组合、分段等按键,其操作使用方法见用户使用手册。
对段地址,系统需要O~9的按键,以保证用户能够寻址ISD1420的所有段。系统总共由14个键构成。
为满足系统结构的简单起见,系统采用与键盘单独接口。系统利用P1口与键盘阵列连接。其中,低4位作为单片机的键盘列扫描输入;高4位作为单片机的键盘行扫描输出。
系统采用中断方式管理键盘,使系统能够实时地响应用户操作。键盘阵列的4列线,连接到4与门的输入。4与门的输出连接单片机INTl,为低有效。平时没有按键按下时,4与门连接的上拉电阻使与门的输出为高电平,无中断产生。这时程序从列输入的是1111。
在扫描键盘时,程序首先让行扫描输出0000,这样,在这4行中的14个键,只要有一个键按下,与门都能输出低电平而产生中断。程序可通过键盘中断服务程序具体确定是那一个键按下,如图3所示。它的具体方法是,依次向各行(P1.7~P0.0)输出0,程序就能从列端口读出对应按键所在位置的列编码(P1.3~P0.O)。如表1所示。这样程序就能得到低4位与高4位的扫描值,得到对应键盘的编码值。
2.3 ISDl420
与显示器一起采用总线连接,段地址单片机通过74LS374锁存后,再输入到ISDl420,74LS374锁存控制信号构成同显示器,由单片机的WR加上地址信号组合构成。它的地址分配为7FOOH。单片机通过一条输出指令完成语音电路的段地址输出,以控制语音电路分段操作,如图4所示。
系统控制芯片的PLAYE端口,平时为高电平,当出现下降沿时开始录音。
信号EOM是语音段结束标志,当录音结束,若存储器没完,ISD1420会自动为其加上EOM标志符,表示该段录音结束。放音时,当遇到EOM标志符,EOM信号会由高电平输出一个低脉冲。该信号连至单片机的T1/P3.5引脚,使单片机能够及时知道该语音段结束,以便控制下一步操作。
2.4 单片机
这里选择的89C51具有40个I/O口。系统不能采用简单的最小系统连接,由上述可知,它无法满足该系统的需求。该设计可利用它的开放总线连接更多的设备。
该设计将3个数码管和语音芯片通过总线方式接入系统。低位地址不用,所以不用进行低8位的地址扩展。选择A8,A9,A10分别作为3个数码低电平的有效地址信号,再与单片机的WR信号组合。以构成带地址信息的写控制信号。这样,程序便可像访问存储器一样访问这些端口,其地址为:FE00H,FD00H,FB00H。
语音芯片也是采用这种方式进入系统的,其地址是7F00H。这种方式既可使电路简单,也可使操作简单。P1口作为系统的键盘扫描接口,连接如前述,这里不再赘述。
3 用户界面
用户界面如下:
键盘:0~9、[录音]、[放音]、[组合]、[分段]。
显示:3位7段数码管。段号2位,以确定录音、放音位置;计数器1位,9~O减l计数。
指令格式:<参数表><命令>。
四个主要功能为:
(1)分段
操作:分段数+[分段]
(2)录音
操作:欲录音段号+[录音]
显示:当按下[录音]时,欲录音段号闪3下后,计数显示9;录音开始,计数器减l,直到O,录音结束。
(3)回放
操作:欲放音段号+[放音]4)、组合放音:功能用于检查组合放音效果。
操作:段号i+[组合]+段号j+[组合]+…+段号n+[组合]+[放音]
显示:在组合时,显示段号,闪烁,按下[组合]后显示消失,再重复;组合放音时,显示当前放音段号;计数器先显示组合段总数,每放完一段减1,直到O。
4 软件方案
内存分配如下:显示缓冲为3个单元,第一、二单元用于存放段号,第三单元用于存放计数器值。组合段缓冲为一个单元,为一个放音段地址。考虑单片机的存储容量与系统成本。设计考虑10个单元,FF为组合结束标志。当第一单元等于FF时,为缓冲器空,ISD1420的段地址从该缓冲区取出。软件流程图如图5所示。
为方便起见,系统采用平均分段管理方式。根据ISDl420语音芯片器件使用手册可知,最多可分为160个段。其中,O~159为分段使用的有效地址。系统按1 s四个字的语速算,对于20 s的存储空间来说,最多不能超过80个段,该时段空间最小为1个字。其分段范围为1<分段数<80,在这个前提下,用户可根据实际需求来分段,段号为O~79。在执行[分段]命令时,要将地址间隔计算出来,以便段号与语音芯片地址映射。地址间隔存于专用地址间隔单元spacing中。分段寄存器seg_num:存放执行[分段]命令后的分段数。用户进行录音、放音的段号,程序必须验证在此范围方可执行,否则提示错误信息“E”。系统默认分段数seg_num为40,spacing为4,分段确定后,段地址可以由下式计算:
分段地址=seg_num×spacing
地址间隔=160/seg_num
暂存器temp:系统预留一个单元。用来以二进制数方式存放段号。以temp_sign为暂存器标志,用于指示按键输入,其等于0时,段号只有1位;等于1时,段号有2位。前次数字键是十位,当前数字键是个位。如果是两位数,程序要对这两位二一十进制数进行计算,转换成二进制数,即BCD十位×10+BCD个位。存入temp。当执行录音、放音、分段操作时,程序从temp取参数,计算段地址。用户在输入段号时,如果出现错误,可重新输入。第一次输入的段号,将被第二次输入的段号覆盖。
组合段缓冲ally_buf:系统预留1O个单元,只有执行组合放音时才用。组合是所有段中任意选择10个段构成的队列。系统用ally_point-er作为入队地址指针,以ally_out作为出队地址指针。组合放音时,在该指针指示下,依次将录音段从缓冲区中取出播放,以构成短语,直到ally_out=ally_pointer。程序在没有执行[组合]功能时,保持ally_pointer=O;当用户按下[组合]键时,程序应将暂存器temp的内容传入ally_buf中,并修改ally_pointer。在执行[放音]时,程序首先检查ally_pointer是否等于0,是,执行temp的段放音;否则。执行ally_buf的段放音,直到FF标志。用户指令单元dictate;存放用户指令。主程序从这里识别用户命令,并执行命令。命令标志sign_dic:其等于O时,当前按键为数字键。等于1时,当前按键为命令键。命令与数字的识别:当键盘码大于7F时,为数字按键,否则为命令按键。七段显示:O~9,E为错误提示。这里采用共阴极7段数码管,如图6所示。
出口如下:
temp为对应段号的二进制数。可以直接计算段地址,最大范围,小于分段数seg_num。
sign_dic等于1时,请求执行dictate中的命令。
dictate为命令代码。
5 结语
按照该方法设计的语音编辑器可行性强,操作简单,界面清晰,在实际的生活中,该语音编辑器经过改进后可以很方便地应用到MP3,DVD,录音笔等音频设备中,同时也可以用到远程语音控制中。与其他的相比,该语音编辑器具有价格更低廉,可单独作为器件来实现,因此具有一定的实用价值。