Foxtable(狐表)用户栏目专家坐堂 → [求助]如何实现即时朗读单元格内容?(已解决)


  共有17910人关注过本帖树形打印复制链接

主题:[求助]如何实现即时朗读单元格内容?(已解决)

帅哥哟,离线,有人找我吗?
hhbb
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:等待验证 帖子:386 积分:2482 威望:0 精华:1 注册:2011/5/10 11:13:00
  发帖心情 Post By:2011/6/22 22:40:00 [显示全部帖子]

语音朗读

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.”

示例二

上面的朗读代码是异步的,在朗读的同时,你可以继续进行下一步的操作。
如果是同步朗读,那么在朗读过程中,将挂起程序,不能进行任何操作,直到朗读结束。

同步朗读的代码:

Dim sp As New DotNetSpeech.SpVoice()
sp.Speak(
"I am from china."
, DotNetSpeech.SpeechVoiceSpeakFlags.SVSFDefault)

示例三

通过设置Rate属性,可以调整朗读语速,Rate的默认值是0,可以为负数,值越大,语速越快。
你可以在命令窗口分别执行下面两段代码,比较一下朗读速度。

快速朗读:

Dim sp As New DotNetSpeech.SpVoice()
sp.rate =
3
sp.Speak(
"I am from china."
, DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync)

低速朗读:

Dim sp As New DotNetSpeech.SpVoice()
sp.rate =
-3
sp.Speak(
"I am from china."
, DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync)

示例四

你可以通过下面的代码来获得所有已经安装的语音库的名称:

Dim sp As new DotNetSpeech.SpVoice()
For Each
st As Dotnetspeech.SpObjectToken In sp.GetVoices
    Output.Show(st.GetDescription)

Next

示例五

朗读的时候,可以选择语音库,例如选择1号语音库朗读:

Dim sp As New DotNetSpeech.SpVoice()
sp.Voice = sp.GetVoices(
String.Empty,String.Empty).Item(0)
sp.Speak(
"I am from china.", DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync)

示例六

可以将朗读结果录制为一个wav文件,例如:

Dim Voice As new DotNetSpeech.SpVoice()
Dim
Stream As new DotNetSpeech.SpFileStreamClass()
Stream.Open(
"c:\temp\test.wav", DotNetSpeech.SpeechStreamFileMode.SSFMCreateForWrite, False)
Voice
.AudioOutputStream = Stream
Voice.Speak(
"I love you.",DotNetSpeech.SpeechVoiceSpeakFlags.SVSFDefault)
Stream.Close()

示例七

这是一个综合示例,可以打开CaseStudy目录下的示例文件:语音朗读.Table

本示例的界面如下:

图片点击可在新窗口打开查看

该示例可以列出已经安装的语音库,客户用已选择语音库,设置语速,并可选择是异步还是同步朗读。

窗口的AfterLoad事件代码为:

Dim sp As new DotNetSpeech.SpVoice()
Dim
ls As WinForm.ListBox = e.Form.Controls("ListBox1")
For
Each st As Dotnetspeech.SpObjectToken In sp.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
sp As New DotNetSpeech.SpVoice()
Dim
vl As String = e.Form.Controls("txtContent").Value '获得要朗读的文本
sp.Rate = e.Form.Controls(
"boxSpeed").Value '设置语速
sp.Voice = sp.GetVoices(
String.Empty,String.Empty).Item(yy.SelectedIndex) '选择语音
If
e.Form.Controls("rdoAsync").Checked Then
    sp.Speak(vl, DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync)
'异步朗读
Else

    sp.Speak(vl, DotNetSpeech.SpeechVoiceSpeakFlags.SVSFDefault)
'同步朗读
End
If


 回到顶部