Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共11 条记录, 每页显示 10 条, 页签: [1] [2]
[浏览完整版]

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

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

3楼
zjianx 发表于:2011/6/22 23:32:00
这段帮助我看过,似乎不是我想要的哪种效果
4楼
zjianx 发表于: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."换成单元格内容?

5楼
blackzhu 发表于:2011/6/23 7:20:00
Dim sp As New DotNetSpeech.SpVoice()
sp.Speak(Tables("表A").Current("第一列"), DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync)
6楼
易服 发表于: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编辑过]
7楼
zjianx 发表于:2011/6/23 9:43:00
谢谢楼上几位,看来不能像excel那么方便了,我还是在excel中录数据然后用的时候再导入狐表吧
8楼
blackzhu 发表于:2011/6/23 9:52:00
数据库来得,当然不能和EXCEL相提并论.
9楼
狐狸爸爸 发表于:2011/6/23 10:32:00

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

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

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

10楼
易服 发表于:2011/6/23 11:26:00
拿来就用
共11 条记录, 每页显示 10 条, 页签: [1] [2]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .03906 s, 3 queries.