Foxtable(狐表)用户栏目专家坐堂 → DotNetSpeech判断朗读结束的代码?


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

主题:DotNetSpeech判断朗读结束的代码?

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


加好友 发短信
等级:狐精 帖子:3313 积分:23146 威望:0 精华:1 注册:2009/3/31 11:25:00
DotNetSpeech判断朗读结束的代码?  发帖心情 Post By:2011/6/17 9:28:00 [只看该作者]

 

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)

 

请教,如何用代码来判断朗读结束呢?谢谢!!


 回到顶部
帅哥,在线噢!
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

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)

messagebox.show("我读完了")


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


加好友 发短信
等级:狐精 帖子:3313 积分:23146 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By:2011/6/17 9:57:00 [只看该作者]

以下是引用狐狸爸爸在2011-6-17 9:54:00的发言:

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)

messagebox.show("我读完了")

这样是达不到我要效果的。

需要代码来判断是否读完?


 回到顶部
帅哥,在线噢!
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

不读完就不能执行任何操作的。

所以只能在这里判断


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


加好友 发短信
等级:狐精 帖子:3313 积分:23146 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By:2011/6/17 10:08:00 [只看该作者]

 

哦,我这边朗读是采用异步的,不是同步的。

刚写的代码是随便复制的一段。(误解了)

我目的急需要朗读结束判断的代码来实现。

请问下SPEI_END_INPUT_STREAM表示朗读结束怎样使用?


 回到顶部
帅哥,在线噢!
狐狸爸爸
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

嘿嘿,我不会,你自行研究,有结果告诉我。


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


加好友 发短信
等级:狐精 帖子:3313 积分:23146 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By: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
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2011/6/19 18:56:00 [只看该作者]

那个代码是 C/C++的

 

DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync 标志 只是简单的异步。

也就是另启一个线程朗读。这样在朗读时间比较长的情况下,不会使界面进入无响应的状态。

但是这种异步方式的缺点是无法指定“回调函数”  回调函数就是线程执行完成后,执行的函数。

 

所以只能自己实现异步编程了。

至于“取得语音在读的语句并光标随着变动。”需要根据语速计算每秒读的字符数了。

下面这个文件只是简单的开启线程来实现的,真正开发是封装成异步编程模式来实现的。

 

 

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


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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2011/6/19 18:59:00 [只看该作者]

函数在全局代码里面

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


加好友 发短信
等级:狐精 帖子:3313 积分:23146 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By:2011/6/20 9:17:00 [只看该作者]

哦,多谢了!但还是搞不定!


 回到顶部