以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- DotNetSpeech判断朗读结束的代码? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=10670) |
||||
-- 作者:baoxyang -- 发布时间:2011/6/17 9:28:00 -- DotNetSpeech判断朗读结束的代码? 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)
请教,如何用代码来判断朗读结束呢?谢谢!! |
||||
-- 作者:狐狸爸爸 -- 发布时间:2011/6/17 9:54:00 -- Dim sp As New DotNetSpeech.SpVoice() messagebox.show("我读完了") |
||||
-- 作者:baoxyang -- 发布时间:2011/6/17 9:57:00 -- 以下是引用狐狸爸爸在2011-6-17 9:54:00的发言:
Dim sp As New DotNetSpeech.SpVoice() messagebox.show("我读完了") 这样是达不到我要效果的。 需要代码来判断是否读完? |
||||
-- 作者:狐狸爸爸 -- 发布时间:2011/6/17 10:04:00 -- 不读完就不能执行任何操作的。 所以只能在这里判断 |
||||
-- 作者:baoxyang -- 发布时间:2011/6/17 10:08:00 --
哦,我这边朗读是采用异步的,不是同步的。 刚写的代码是随便复制的一段。(误解了) 我目的急需要朗读结束判断的代码来实现。 请问下SPEI_END_INPUT_STREAM表示朗读结束怎样使用? |
||||
-- 作者:狐狸爸爸 -- 发布时间:2011/6/17 10:28:00 -- 嘿嘿,我不会,你自行研究,有结果告诉我。 |
||||
-- 作者:baoxyang -- 发布时间:2011/6/19 10:37:00 -- lxl兄,可否帮忙。 实现语音设置感兴趣的事件:SetInterest 1、 设定SAPI返回的消息 :setnotifywindowmessage
2,消息来时,确定事件类型:GetEvents
清除事件结构:SpClearEvent
3,相应事件时,用GetStatus确定当前SAPI的状态
主要想实现二个目的:
1、取得语音在读的语句并光标随着变动。
2、获取语音在读的状态:开始读,结束读或其它信息。
参考网址:http://mailao.ycool.com/post.1836137.html(因为是C#不太懂)
|
||||
-- 作者:lxl -- 发布时间:2011/6/19 18:56:00 -- 那个代码是 C/C++的
DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync 标志 只是简单的异步。 也就是另启一个线程朗读。这样在朗读时间比较长的情况下,不会使界面进入无响应的状态。 但是这种异步方式的缺点是无法指定“回调函数” 回调函数就是线程执行完成后,执行的函数。
所以只能自己实现异步编程了。 至于“取得语音在读的语句并光标随着变动。”需要根据语速计算每秒读的字符数了。 下面这个文件只是简单的开启线程来实现的,真正开发是封装成异步编程模式来实现的。
|
||||
-- 作者:lxl -- 发布时间:2011/6/19 18:59:00 -- 函数在全局代码里面 |
||||
-- 作者:baoxyang -- 发布时间:2011/6/20 9:17:00 -- 哦,多谢了!但还是搞不定! |