文献标识码: A
文章编号: 0258-7998(2012)01-0115-03
语音播报系统在儿童玩具、计算器、学习机、迎宾器、公交报站以及智能仪器仪表等设备中得到广泛应用。以往的语音播报系统中通常采用ISD系列的语音模块,其缺点是价格较高,电路设计较复杂,控制方式不够灵活,且常常因为在线录音会引入很强的噪声,严重影响放音效果。而本文使用的WT588D模块性价比较高,存储容量大,使用专用下载软件能够在线烧写音频文件,操作极其方便,并支持6 kS/s~20 kS/s采样率的音频加载,可以无损展现音频信息。
1 WT588D模块简介
WT588D模块是广州创科有限公司与台湾华邦公司共同研发的集单片机、语音电路、SPI-Flash存储器于一体的可编程语音系统。该语音系统支持6 kS/s~22 kS/s采样频率的音频,具有220个可控制的语音地址,且每个地址还可以分成128段管理。配合WT-APP上位机操作系统软件和专用的USB下载器,可以随意设置系统的控制方式、语音地址和分段信息,支持语音信息在线烧录。
WT588D模块支持MP3控制模式、按键控制模式、并口模式、一线串口模式及三线SPI模式。模块内部集成了DSP高速音频处理器,内置13 bit数模转换器以及12 bit PWM输出方式,可以无损地展现音频信息。PWM输出方式可以直接驱动0.5 W/8 Ω扬声器,无需额外的驱动电路[1]。
2 语音播报系统设计
2.1 语音文件的提取
语音文件的提取有2种常用方法:(1)从录制的文件中提取;(2)利用文字转语音软件提取。
从录制的文件中提取语音的步骤为:首先通过录音软件或通过手机录制wav格式的音频文件(例如包括0~9、时、分、秒等信息),然后打开GoldWave音频编辑软件,在原始wav格式文件中找到要截取的语音段,通过鼠标选择复制粘贴到新文件中即可。在该软件中还可以对音频进行合并、降噪、滤波等特效处理。
利用SoundToWav文字转语音软件,使得音频文件提取更方便。该软件利用TTS(Text To Speech)即语音合成技术,可以将任意文字转换成语音文件。为了得到较好的音质,采用了ChineseMandarinVoice语音引擎,该引擎的中文女声音色较好,基本接近真人发声水平。在SoundToWav软件中选择该语音引擎并选中按行分割文件方式,输入要转换的文字信息,点击转换即可生成音频文件。
以上两种方法中,第一种方法的真人录制语音更自然生动更具有感染力,但容易引入噪声干扰,音效相对较差些。而文字转语音噪声低、语音清晰、音质好、操作方便,但是由于采用的是TTS语音合成方式,声音缺少饱满,缺乏真人的朗读效果。
2.2 系统硬件设计
本文选择了WT588D模块的SPI三线连接方式。为说明对语音模块的控制过程,以完成播报当前按键次数的功能为例。图1为系统框图,包括单片机最小系统、一个独立按键、WT588D语音模块和与其配套使用的下载接口。在设计中,需要先通过WT588D VoiceChip上位机软件,将已经提取的音频文件下载到SPI-Flash存储器的相应地址段,并记录好地址与语音的对照表,方便放音时进行地址调用。图2为系统电路图,由于语音模块供电的特殊要求,通过AMS1117模块完成5 V~3 V的电压转换;通过PWM直接驱动方式连接0.5 W/8 Ω扬声器;通过发光二极管观察语音芯片的忙信号状态;单片机采用独立按键方式。
2.3 系统软件设计
三线串口控制模式由片选CS、时钟SCK和数据DATA组成,时序仿照标准SPI通信方式[2],具体时序如图3所示。
采用上位机软件对SPI-Flash存储器25PXX烧写语音程序时,选择三线串口控制模式。语音模块的P01口被定义为DATA数据口,P02为CS片选口,P03为CLK时钟口,单片机通过3个控制口对WT588D语音模块进行控制。三线串口控制模式下其他的I/O口均无效。P17端为BUSY忙信号输出端,可设置为播放状态LED点亮和播放状态LED熄灭。SPI-Flash存储器25PXX的电压范围要保证在2.8 V~3. 5 V之间,VDD-SIM为WT588D语音芯片的串口电源管理输入端,将25PXX的VCC连接到此端,可自动平衡WT588D与25PXX之间的串口电压。PWM输出端禁止接电容到地或直接接地,系统工作为VDD=5 V,VCC=3.3 V。
基于SPI通信时序[3-4]编写如下通信子函数,根据参数address的值可以播放对应的语音段(注意传数时低位在前)。
void send_adr(unsigned char address)
{
unsigned char i;
RESET=0;
delay1ms(3);
RESET=1;
delay1ms(17); /* 17ms*/
CS=0;
delay1ms(2);
for(i=0;i<8;i++)
{
SCLK=0;
If(address&1) /* low post before high*/
DATA=1;
else
DATA=0;
address >>=1;
delay1us(50);
SCLK=1;
delay1us(50);
}
CS=1;
}
主函数完成对独立按键的扫描过程,其中delay1ms(10)的作用为延时去抖动,key_mark为键标志,可以实现按键的一次响应[5]。
void main(void)
{
while(1)
{
if(!set&&!key_mark)
{
delay1ms(10);
if(!set)
{
key();
key_mark=1;
}
}
else if(set)
key_mark=0;
}
按键响应函数key()可实现,每次有键按下后,计数变量n++一次,通过对n值判断进行语音播报。当n为10以内数字时,直接播放n号段的语音;当n介于10~20之间时,先播放‘10’的语音再播放个位的语音;当n介于20~100之间时,先播放十位数字的语音,再播放‘10’的语音,最后播放个位的语音。
void key()
{ n++; //Number keys
if(n<11)
send_adr(n);
else if(n>10&n<20)
{
send_adr(10); //the voice of ten
while(!BUSY); //waiting for BUSY=1
if(n%10)
send_adr(n%10); // units′digit
}
else
{
send_adr(n/10); // tens′digit
while(!BUSY);
send_adr(10);
while(!BUSY);
if(n%10)
send_adr(n%10);
}
while(!BUSY);
}
本文以单片机为控制核心,详细描述了使用WT588D模块播报语音信息的具体实现过程,包括语音文件提取、硬件电路设计、通信协议分析、按键扫描、语音播报地址拆分等部分。与采用ISD系列语音芯片相比,WT588D模块的性价比较高,音质较好,易于分段管理,能够提供丰富的工作方式,给系统设计带来了较大的灵活性。本系统整体结构简单、音质优美、成本低廉、功能扩展方便,可以作为基于WT588D模块设计的模板应用到多个相关领域,并依据本文稍加修改即可进行功能扩展。
参考文献
[1] 广州市唯创科技有限公司.WT588D08/16使用资料[EB/OL]. [2011-07-22] http://www.w1999c.com/UploadFiles/2011311155241593.pdf.
[2] 徐博,郭秋敏.基于SPI协议的音频流解码系统的研究与设计[J].工矿自动化,2011,34(1):45-49.
[3] 刘玉琼.基于WT588D语音提示系统设计[J].企业科技与发展,2010,26(22):99-102.
[4] 裘有斌,张国忠,陈丰伟,等.基于ISD4004的家庭语音报警服务系统的设计[J].电子制作,2008,16(2):40-42.
[5] 王春武,李岩,孟祥英,等.C51中对按键的处理方法[J].吉林师范大学,2007(4):86-87.