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


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

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

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


加好友 发短信
等级:婴狐 帖子:22 积分:219 威望:0 精华:0 注册:2011/4/13 18:01:00
[求助]如何实现即时朗读单元格内容?(已解决)  发帖心情 Post By:2011/6/22 22:14:00 [只看该作者]

就像excel那样,输入内容后按回车键或方向键就能读出单元格的内容,在核对数据时很好用,狐表有没有这个功能?搜索了下,似乎没找到
[此贴子已经被作者于2011-6-23 19:02:47编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
hhbb
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | 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


 回到顶部
帅哥哟,离线,有人找我吗?
zjianx
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:22 积分:219 威望:0 精华:0 注册:2011/4/13 18:01:00
  发帖心情 Post By:2011/6/22 23:32:00 [只看该作者]

这段帮助我看过,似乎不是我想要的哪种效果

 回到顶部
帅哥哟,离线,有人找我吗?
zjianx
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:22 积分:219 威望:0 精华:0 注册:2011/4/13 18:01:00
  发帖心情 Post By:2011/6/23 1:34:00 [只看该作者]

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

 

怎么把"I am from china."换成单元格内容?


 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57640 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/6/23 7:20:00 [只看该作者]

Dim sp As New DotNetSpeech.SpVoice()
sp.Speak(Tables("表A").Current("第一列"), DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync)

 回到顶部
帅哥哟,离线,有人找我吗?
易服
  6楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:787 积分:6349 威望:0 精华:0 注册:2008/9/1 8:26:00
  发帖心情 Post By:2011/6/23 8:27:00 [只看该作者]

在原示例窗口中增加“语音校对”按钮

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) '选择语音库
With CurrentTable
    For r As Integer = .TopPosition To  .BottomPosition
        For c As Integer = .LeftCol To .RightCol
            Dim v As String = .Rows(r)(c)
             If  e.Form.Controls("rdoAsync").Checked Then
                sp.Speak(v, DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync) '异步朗读
            Else
                sp.Speak(v, DotNetSpeech.SpeechVoiceSpeakFlags.SVSFDefault) '同步朗读
            End If
        Next
    Next
End With

[此贴子已经被作者于2011-6-23 8:32:25编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
zjianx
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:22 积分:219 威望:0 精华:0 注册:2011/4/13 18:01:00
  发帖心情 Post By:2011/6/23 9:43:00 [只看该作者]

谢谢楼上几位,看来不能像excel那么方便了,我还是在excel中录数据然后用的时候再导入狐表吧

 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  8楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57640 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/6/23 9:52:00 [只看该作者]

数据库来得,当然不能和EXCEL相提并论.

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/6/23 10:32:00 [只看该作者]

谁说复杂? 及时语音校对,不过两行代码而已:

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目74.table

一行在全局代码,一行在ValidateEdit事件。


 回到顶部
帅哥哟,离线,有人找我吗?
易服
  10楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:787 积分:6349 威望:0 精华:0 注册:2008/9/1 8:26:00
  发帖心情 Post By:2011/6/23 11:26:00 [只看该作者]

拿来就用

 回到顶部
总数 11 1 2 下一页