语音朗读
FoxTable可以自动将一段文本朗读出来。
在默认的情况下,Windows Vista/7可以正常朗读中英文,而Windows
XP只能朗读英文,不过你可以另外安装语音库来解决这个问题。
实际上,使你用的是Windows Vista/7,也可以另外安装语音库来获得更好的朗读效果。
提示:无需去刻意理解下面的代码,实际工作的时候,只需套用即可。
示例一
如果你要用默认的设置朗读语音,那么很简单:
Dim sp As
New DotNetSpeech.SpVoice()
sp.Speak("I
am from china.",
DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync)
执行上面的代码,计算机或自动朗读出“I am from china.”
SpVoice有三个方法,分别为:
Speak: 朗读文本
Pause: 暂停朗读
Resume:继续朗读
示例二
上面的朗读代码是异步的,在朗读的同时,你可以继续进行下一步的操作。
如果是同步朗读,那么在朗读过程中,将挂起程序,不能进行任何操作,直到朗读结束。
同步朗读的代码:
Dim
sp As New
DotNetSpeech.SpVoice()
sp.Speak("I am from china.",
DotNetSpeech.SpeechVoiceSpeakFlags.SVSFDefault)
示例三
通过设置Rate属性,可以调整朗读语速,Rate的默认值是0,可以为负数,值越大,语速越快。
你可以在命令窗口分别执行下面两段代码,比较一下朗读速度。
快速朗读:
Dim
sp As New DotNetSpeech.SpVoice()低速朗读:
Dim
sp As
New
DotNetSpeech.SpVoice()
sp.rate = -3
sp.Speak("I am from china.",
DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync)
示例四
你可以通过下面的代码来获得所有已经安装的语音库的名称:
Dim
sp As new DotNetSpeech.SpVoice()示例五
朗读的时候,可以选择语音库,例如选择1号语音库朗读:
Dim
sp As New DotNetSpeech.SpVoice()示例六
可以将朗读结果录制为一个wav文件,例如:
Dim
Voice As new DotNetSpeech.SpVoice()示例七
这是一个综合示例,可以打开CaseStudy目录下的示例文件:语音朗读.Table
本示例的界面如下:
该示例可以列出已经安装的语音库,客户用已选择语音库,设置语速,并可选择是异步还是同步朗读 ,还可以在阅读过程中停止阅读。
因为开始朗读和停止朗读两个按钮需要使用同一个SpVoice才有效,所以SpVoice的定义为Public变量:
Public Speaker As New DotNetSpeech.SpVoice()
窗口的AfterLoad事件代码为:
Dim
ls As
WinForm.ListBox
= e.Form.Controls("ListBox1")
For
Each st
As Dotnetspeech.SpObjectToken
In Speaker.GetVoices
ls.Items.Add(st.GetDescription)
Next
If
ls.items.count
> 0 Then
ls.SelectedIndex
= 0
End
If
上面的代码会在窗口的ListBox1中列出已经安装的语音库的名称,并默认选择第一个语音库。
开始朗读按钮的代码为:
Dim
yy As
WinForm.ListBox
= e.Form.Controls("ListBox1")
Dim
vl As
String = e.Form.Controls("txtContent").Value
'获得要朗读的文本
Speaker.Rate
= e.Form.Controls("boxSpeed").Value
'设置语速
Speaker.Voice
= Speaker.GetVoices(String.Empty,String.Empty).Item(yy.SelectedIndex)
'选择语音库
Speaker.Speak("",
DotNetSpeech.SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak)
'停止之前的朗读
If
e.Form.Controls("rdoAsync").Checked
Then
Speaker.Speak(vl,
DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync)
'异步朗读
Else
Speaker.Speak(vl,
DotNetSpeech.SpeechVoiceSpeakFlags.SVSFDefault)
'同步朗读
End
If
停止朗读按钮的代码为:
Speaker.Speak("", DotNetSpeech.SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak) '停止朗读