在vb中使用文字朗读引擎(tts)技术
(作者:许锦新 2001年04月10日 13:52)
现今市面上流行的一些英语学习软件,在广告词上经常说自己使用了国际顶尖的全程语音tts技术,能进行整段英文的流利朗读,并能自由调节朗读的速度与频率等。那么,这个神奇的tts究竟是什么东西呢?
其实,tts是微软出品的一套文字朗读引擎(text-to-speech engine),这些英语软件就是调用它来进行英文朗读的。我们在英语学习软件的编程开发中也可使用tts技术,下面笔者将利用visual basic 5.0来揭开tts神秘的面纱。
一、安装tts引擎
tts引擎所需的microsoft text-to-speech engine与microsoft speech api软件都可到微软的站点去下载,也可以在“金山词霸2000”或“金山词霸.net”的安装光盘上找到(文件名为mstts.exe与spchapi.exe)。安装了tts引擎后,在windows所在目录下会生成一个speech目录,其中有一个vtxtauto.tlb文件,在编程时我们需要调用它。
二、在vb中引入vtxtauto.tlb文件
进入vb 5.0,执行选单命令“文件/新建工程/标准exe”并确定,然后执行选单“工程”中的“引用”,单击“浏览”按钮到windows目录下的speech子目录,打开vtxtauto.tlb文件,将“voicetext 1.0 type library”添加到引用列表中,选中它并单击确定。将库vtxtauto引入vb后,我们可以通过选单“视图”中的“对象浏览器”来了解它所封装的类,以及各类成员函数的属性的意义、使用格式等信息。一些主要的方法与属性意义,笔者在下面的源程序中将给出注释,在这里就不详细列出,请参见附图1。
三、设置控件及属性
在form1上添加三个label控件、一个textbox控件、一个hscrollbar控件和六个commandbutton控件。窗体及各控件的主要属性设置如下:
form1:caption=“英文朗读”
label1:caption=“请输入英文文档”
label2:caption=“朗读速度”
label3:caption=“ ”
(label3标签用来显示朗读速度值)
text1:text=“please input english text”;tooltiptext=“请输入或粘贴英文文档”; multiline=true;scrollbars=3-both
hscroll1:名称=speedchange;min=90;max=300(min与max属性值分别用来限定可调节的语速的最小与最大值)
command1:名称=read;caption=“朗读”
command2:名称=pause;caption=“暂停”
command3:名称=stop;caption=“停止”
command4:名称=prev;caption=“上一句”
command5:名称=next;caption=“下一句”
command6:名称=quit;caption=“退出”
四、编写代码
下面我们就可以一步步地编写代码,具体代码如下:
'在窗体装载时调用register方法注册,括号内的两个参数是字符串
private sub form_load()
call vtxtauto.vtxtauto.register(space(8), space(8))
'因为语速的默认值为170,故水平滚动条的初值也设为170
speedchange.value = 170
end sub
'设置朗读速度调节代码,当水平滚动条的值value发生变化时将其赋给控制语速的speed属性
private sub speedchange_change()
vtxtauto.vtxtauto.speed=speedchange.value
label3.caption = speedchange.value
end sub
'设置“朗读”按钮代码
private sub read_click()
'如果朗读出错,则转到出错处理标记模块errorhandler
on error goto errorhandler
'调用方法speak进行朗读,第一个参数是要朗读的文本,第二个参数是设置朗读风格
call vtxtauto.vtxtauto.speak(trim(text1.text), vtxtsp_veryhigh + vtxtst_reading)
exit sub
errorhandler:
msgbox "只能朗读英文文档,不能朗读汉字字符!", , "出错信息"
end sub
'设置“暂停”按钮代码
private sub pause_click()
if vtxtauto.vtxtauto.isspeaking then
'如果属性isspeaking为真,则表示正在朗读,调用audiopause方法暂停朗读
call vtxtauto.vtxtauto.audiopause
pause.caption = "恢复"
else
'如果已经处于暂停状态则调用audioresume方法恢复朗读
call vtxtauto.vtxtauto.audioresume
pause.caption = "暂停"
end if
end sub
'设置“停止”按钮代码,调用stopspeaking方法停止当前朗读
private sub stop_click()
call vtxtauto.vtxtauto.stopspeaking
end sub
'设置“上一句”按钮代码,调用audiorewind方法往后跳过一句
private sub prev_click()
call vtxtauto.vtxtauto.audiorewind
end sub
'设置“下一句”按钮代码,调用audiofastforward方法向前跳过一句
private sub next_click()
call vtxtauto.vtxtauto.audiofastforward
end sub
'设置“退出”按钮代码
private sub quit_click()
unload me
end sub
本程序在中文windows 95/98、vb 5.0环境下运行通过。运行时在文本编辑框中输入或粘贴英文文档,然后单击“朗读”按钮就可播放读音,运行界面如图2。
五、程序改进思路
本文对在vb编程中使用tts技术只是起个抛砖引玉的作用,熟悉vb编程的电脑爱好者来可以对本程序作一些改进,例如增加对声卡和tts引擎是否安装的检测、增加从文本文件或数据库中读取文档的功能、增加让用户选择朗读的优先级和发声音量调节等功能。这些功能实现起来较为复杂,感兴趣的读者可进行深入研究。