摘 要:本文通过两个实例,论述了如何在VB中通过MSTTS技术和SmartRead技术分别实现中、英文文本朗读的功能,对于设计人性化的界面提供了一种比较好的参考。
关键词:VB;MSTTS
一、利用MSTTS技术实现英语朗读功能
MSTTS(Microsoft Text-to-Speech)技术是微软推出的文本转换为语音的开发技术,利用该技术可以实现英语字句的朗读,并且可以调节朗读时的语气以及语速。下面我们分析如何在VB中通过MSTTS技术实现英语朗读功能。
首先需要安装MSTTS引擎。如果已经安装了金山词霸的话,那么该引擎已经被安装;如果没有安装金山词霸的话,可以在http://www.testsoft.net/mstts.exe下载mstts.exe并安装。
下面我们通过一个简单的实例,讨论一下VB中使用MSTTS技术的方法。
第一,打开VB6.0,新建一个标准工程,执行“工程”菜单中的“引用”菜单项,单击“浏览”按钮,打开系统目录Windows(对于windows 98)或者Winnt(对于windows 2000)目录下Speech子目录中的vtxtauto.tlb,则“Voice Text Object Library”引用被添加,如图一。
图一 添加引用
第二,在Form1中添加一个文本框Text1和一个命令按钮Command1,对这两个对象分别设置以下属性:
Text1的Text属性为hello world,MultiLine属性为True,ScrollBars属性为2;Command1的Caption属性为“朗读”,如图二。
图二 英文朗读界面设计
第三,编写如下代码:
Private Declare Function waveOutGetNumDevs Lib "winmm.dll" () As Long
Private Sub Form_Load()
'通过API函数调用 , 判断系统是否安装有声卡以及声卡驱动程序
Dim i As Integer
i = waveOutGetNumDevs()
If i <= 0 Then
MsgBox "系统无声卡或未装声卡驱动程序,请安装好以后再试...", "错误提示"
Unload Me
Else
'注册
Call VTxtAuto.VTxtAuto.Register(Space(10), Space(10))
End If
End Sub
Private Sub Command1_Click()
'开始朗读
Call VTxtAuto.VTxtAuto.Speak(Trim(Text1.Text), vtxtsp_VERYHIGH + vtxtst_READING)
End Sub
按F5启动应用程序,带上耳机,如果声卡工作正常,单击“朗读”按钮,你就会听到“hello world”的标准朗读,你也可以在文本框中输入一段英文,单击“朗读”按钮,同样可以听到该英文的朗读。
关于以上代码,说明如下:
1. 由于声卡是朗读的必备条件,因此首先调用waveOutGetNumDevs这个API,根据其返回值判断是否安装声卡,如果已安装的话,则通过Call VTxtAuto.VTxtAuto.Register(Space(10), Space(10))语句进行注册,否则就给出未安装声卡的错误提示信息。
2. 实现语句朗读的核心代码是:Call VTxtAuto.VTxtAuto.Speak(Trim(Text1.Text), vtxtsp_VERYHIGH + vtxtst_READING)。Speak函数的第一个参数向TTS引擎传递需要朗读的文字;第二参数则用来控制朗读时的语气和优先级,由两个常量相加组成。控制优先级的常量有:vtxtsp_HIGH,加入播放队列开始,尽快读出;vtxtsp_NORMAL,默认,加入播放队列末尾;vtxtsp_VERYHIGH,立即读出,可打断正在读的内容。控制语气的常量有:vtxtst_COMMAND,命令的语气;vtxtst_NUMBERS,阅读数字的语气;vtxtst_QUESTION,提问的语气;vtxtst_READING,阅读文档时的语气;vtxtst_SPREADSHEET,阅读电子表格中元素的语气;vtxtst_STATEMENT,平时说话时的语气,为默认值;vtxtst_WARNING,警告语气。
3. 可以通过StopSpeaking方法实现停止朗读,通过AudioPause实现暂停朗读以及通过AudioResume实现恢复朗读。具体实现代码如下:
'停止朗读
Call VTxtAuto.VTxtAuto.StopSpeaking
'暂停或恢复朗读
'IsSpeaking可以取得当前状态
If VTxtAuto.VTxtAuto.IsSpeaking Then
Call VTxtAuto.VTxtAuto.AudioPause
Else
Call VTxtAuto.VTxtAuto.AudioResume
End If
4、 除此以外,常用的方法还有:AudioFastForward和AudioRewind,分别可以实现向前和向后跳过一句朗读,而通过设置Speed属性的值可以控制朗读的语速,默认值为170。
5、本程序只能实现英语的朗读,如果输入中文的话,不能实现正常朗读。
二、利用文本语音开发包SmartRead实现中文语音朗读功能
首先必须安装文本语音开发包,可以到http://www.cnetseek.com/gb/smartread/download.html 下载语音包并进行安装,其中有中文语音库,实现中文朗读功能;英文语音库,实现英文朗读功能。同时,该文本语音开发包支持将文本朗读到WAV文件。
下面,我们通过一个简单的实例来说明如何实现中文文本朗读功能。
首先,新建一个标准EXE工程,在Form1中添加一个文本框Text1和两个命令按钮Command1和Command2,对这三个对象分别设置以下属性:
Text1的Text属性为“你好,世界”,MultiLine属性为True,ScrollBars属性为2;Command1的Caption属性为“中文朗读”,Command2的Caption属性为“中文朗读到WAV文件”,如图三。
图三 中文朗读界面设计
第二步,编写如下代码:
Option Explicit
'初始化认证函数,使用语音功能前必须首先调用,可在初始化时设置初始语音,初始语速,初始音量,并可自定义显示信息,根据用户名,用户邮件地址进行认证。
Private Declare Function SmartRead_InitialAuth Lib "smartread.dll" (ByVal hwndFrom As Long, ByVal iSpeech As Long, ByVal iRate As Long, ByVal iVolume As Long, ByVal strMessage As String, ByVal strTip As String, ByVal strName As String, ByVal strMailBox As String) As Long
'朗读函数,第一个参数表示要朗读的文本,第二个参数表示朗读方式,第三个参数表示使用地语音,第四个参数表示使用的语速,第五个表示使用的音量
Private Declare Function SmartRead_Speak Lib "smartread.dll" (ByVal str As String, ByVal iStyle As Long, ByVal iSpeech As Long, ByVal iRate As Long, ByVal iVolume As Long, ByVal iPunctuation As Long, ByVal chLink As String) As Long
'将文本朗读到WAVE文件函数,可设置输出的文件,朗读语音,朗读语速,朗读音量
Private Declare Function SmartRead_SpeakToWave Lib "smartread.dll" (ByVal strText As String, ByVal strFile As String, ByVal iStyle As Long, ByVal iSpeech As Long, ByVal iRate As Long, ByVal iVolume As Long, ByVal iFormat As Long, ByVal iPunctuation As Long, ByVal chLink As String) As Long
Private Sub Form_Load()
'初始化语音库认证函数
SmartRead_InitialAuth Me.hwnd, -1, -1, -1, "提醒您系统未安装语音库,请到作者网站下载最新语音库:http://www.cnetseek.com/gb/index.html", "语音下载", "netseek", "netseek@163.com"
End Sub
Private Sub Command1_Click()
'调用中文语音朗读函数
SmartRead_Speak Text1.Text, 11, 0, 50, 50, 0, "http://www.cnetseek.com/gb/index.html"
End Sub
Private Sub Command2_Click()
'调用朗读到WAV文件函数
SmartRead_SpeakToWave Text1.Text, "c:\helloWorld.wav", 10, 0, 50, 80, 20, 0, "http://www.cnetseek.com/gb/index.html"
End Sub
按F5启动应用程序,首先出现注册信息,等10秒钟进入Form1,带上耳机,点击“中文朗读”按钮,如果声卡工作正常,你就会听到“你好,世界”的标准朗读;点击“中文朗读到WAV文件”按钮后,你会在C盘根目录找到helloWorld.wav文件,双击该文件,你会听到“你好,世界”的标准朗读。当然,你也可以在文本框中随意输入一段中文。
以上代码中用到的函数,其所含参数及返回值的具体含义请见安装该文本语音开发包时一并提供的帮助文档。
参考文献:
[1] 前导工作室译, Bavid Jung等, Visual Basic 6开发人员参考手册[M] 北京:机械工业出版社,2000
[2] 王建华译,James D. Foxall著,Visual Basic 编程标准[M] 北京:机械工业出版社,2000
[3] SmartRead SDK v2.1,
http://www.cnetseek.com/gb/smartreadsdk/index.html
[4] Curtis, B., Human Factors in Software Development, IEEE Computer Society Press, 1985
[5] 殷人昆等, 实用软件工程[M].北京:清华大学出版社,2000年
|