用Microsoft Agent 控件与电脑交谈
2006-12-31 01:10
232 查看
Microsoft Agent 控件比Office 97中的助手功能更加丰富和强大,它提供的动画人物不仅有生动、有趣的动作,而且还能通过声卡、麦克风与用户进行交谈,这些功能使计算机更具人性魅力,其应用前途相当广阔。Microsoft Agent控件的内部机制很复杂,但用VB来操纵它却是非常方便,本文将介绍VB 5.0调用Microsoft Agent 控件的基本方法。
安装Microsoft Agent 控件
·首先安装Microsoft Agent的核心组件 msagent.exe。
·接着安装Lernout & Hauspie TruVoice Text-to-Speech Engi ne(完成从文字合成语音的工作) cgram.exe。
·最后安装 Microsoft Command and Control Speech Engine( 提供语音识别功能)Actcnc.exe。
·另外还需要Agnet动画人物数据文件,在本文中使用了Genie.ac s、Robby.acs两个文件。
上述文件均可从 http://www.microsoft.com/workshop/imedia/ agent/default.as p下载。
Microsoft Agent控件的初始化
先把Microsoft Agent控件添加到VB的控制工具条上,并在用户的 Form上绘制该控件(在下述例子中,其Name属性设为MyAgent)。下面的代码调用IAgentCtlCharacters::Loa d()方法装入一个动画人物的数据,调用IAgentCtlCharacter::Show()/Hide()方法来显示/隐藏动画人物。
Const DATAPATH = "c:/"
Dim Genie As IAgentCtlCharacter
Dim Robby As IAgentCtlCharacter
Dim GenieRequest1,GenieRequest2 As IAgentCtlRequest
Dim RobbyRequest1 As IAgentCtlRequestPrivate Sub Form_Load()
’装入动画人物数据,其中第一个参数为CharacterID
MyAgent.Characters.Load "Genie", DATAPATH & "Genie.acs"
MyAgent.Characters.Load "Robby", DATAPATH & "Robby.acs"
’获取与CharacterID相对应的IAgentCtlCharacter变量
Set Genie = MyAgent.Characters("Genie")
Set Robby = MyAgent.Characters("Robby")
’显示/隐藏动画人物
Genie.Show
Genie.HideEnd Sub
Microsoft Agent 控件的动画编程
每个动画人物都有自己特定的动作,例如Genie有听、看、读、写、发怒、感谢等数十种动画形态,可以调用IAgentCtlCharacter::pla y()方法来设置动画动作。为了在多个动画人物之间协调它们的动作, 比如让Robby等待Genie的某个动作执行完毕后才做另外一个动作,可采用IAgentCtlCharacter::Wait()方法来实现同步。在数十种动画动作中有一类比较特殊(动作名以"ing"为后缀,如"Searching"),一旦执行便循环播放一段动画,只有调用IAgentCtlCharacter::Interrupt() 方法才能终止。示例代码如下:
Private Sub Co mmand1_Click()
Genie.Show
' 执行名为"Suggest"的动作
Genie.Play "Suggest"
' 把Genie移动到座标(200,200)处,用GenieRequest1来标识该动作请求
Set GenieRequest1 = Genie.MoveTo(200, 200)
' 执行名为"Searching"的循环动画动作,用GenieRequest2来标识该动作请求
Set GenieRequest2 = Genie.Play("Searching")
' Robby等待Genie的MoveTo方法执行完毕,方才显示
Robby.Wait GenieRequest1
Robby.Show
Robby.Play "Suggest"
Robby.Play "read"
Robby.Play "Congratulate"
' 由Robby来终止Genie的循环动画动作
Robby.Interrupt GenieRequest2
Genie.Play "write"
Genie.Hide
Robby.HideEnd Sub
Microsoft Agent 控件的语音合成功能
Microsoft Agent控件支持英语的语音合成功能,只需输入句子的文字,便会生成该句子的语音信号并通过声卡、音箱播放出来。语音合成功能通过调用IAgentCtlCharact er::Speak()方法来实现。输出中文时不能用上述方法,只能用W***文件代替,给Speak()方法的第一个参数传递文字气球中包含的文字,给第二个参数传递一个W***文件路径。同样为同步多个动画人物的语音输出也必须使用IAgentCtlCharact er::Wait()方法。目前Mi crosoft Agent 控件还不支持多个人物的声音混合效果。具体实现代码如下:
Private Sub Command2_Click()
Genie.MoveTo 100, 200
Genie.Show
Genie.Play "Greet"
' Speak()方法的第一个参数即为需进行语音合成的句子文字
Genie.Speak "I am Genie, your most humble and loyal servant."
Genie.Speak "Where is Robby?"
Set GenieRequest1 = Genie.Play("LookLeft")
' 等Genie的"LookLeft"执行以后,再执行Robby的动作
Robby.Wait GenieRequest1
Robby.MoveTo 250, 200
Robby.Show
Robby.Play "Greet"
Robby.Speak "Sorry for the delay."
Set RobbyRequest1 = Robby.Speak("Traffic is really busy today on the Inf ormation Superhighway.")
’等Robby讲完了,Genie再讲
Genie.Wait RobbyRequest1
Genie.Play "LookLeftReturn"
Genie.Speak "Welcome to the release of Microsoft Agent, the new ActiveX technology that supports interactive chara cters"
’输出中文语音,"欢迎光临"的中文语音包含在welcome.wav中
Genie.Speak "欢迎光临", "c:/welcome.wav"
Genie.Hide
Robby.HideEnd Sub
Microsoft Agent 控件的语音识别功能
Microsoft Agent控件具有语音识别能力,用户可以向动画人物发出语音命令(同时按住Scroll Lock键)。Microsoft Agent控件为每个 Agent动画人物提供一个特殊命令窗口,用以显示该动画人物能够接受的所有语音命令。该命令窗口中的命令不能用鼠标或键盘来选取,只能通过语音。可以用IAgentComands::Add()方法来为命令窗口添加自定义命令。第一个参数是命令的标识符ID,第二个参数是该命令在命令窗口中的显示标签,第三个参数是该命令对应的语音识别句子。当用户通过麦克风向动画人物发出命令时会激发IAgent的Command事件, 可以编写一个接收Command事件的过程来完成与语音命令相对应的任务。
Private Sub Command3_Click()
Static initialized As Boolean
' 添加自定义命令
If Not initialized Then
Genie.Commands.Add "Word", "Run Word", "word", True, True
Genie.Commands.Add "Time", "What time is it?", "What time is it?", True , True
Genie.Commands.Add "Bigger", "Bigger", "Bigger", True, True
Genie.Commands.Add "Smaller", "Smaller", "Smaller", True, True
initialized = True
End If
Genie.Show
Genie.Speak "Can I help you?"End SubPrivate Sub MyAgent_Command(ByVal Us erInput As Object)
Select Case UserInput.Name
Case "Time"
' 当听到"What time is it?"后回答当前时间
Genie.Speak "The time is " & Time
Case "Word"
' 当听到"word"后,便运行MS Word
Genie.Speak "Yes,sir!"
Shell "d:/winword/winword.exe", vbNormalFocus
Case "Bigger"
' 当听到"bigger"后,Genie会放大
Genie.Width = Genie.Width * 1.5
Genie.Height = Genie.Height * 1.5
Case "Smaller"
' 当听到"samller"后,Genie会缩小
Genie.Width = Genie.Width / 1.5
Genie.Height = Genie.Height / 1.5
End Select
End Sub
安装Microsoft Agent 控件
·首先安装Microsoft Agent的核心组件 msagent.exe。
·接着安装Lernout & Hauspie TruVoice Text-to-Speech Engi ne(完成从文字合成语音的工作) cgram.exe。
·最后安装 Microsoft Command and Control Speech Engine( 提供语音识别功能)Actcnc.exe。
·另外还需要Agnet动画人物数据文件,在本文中使用了Genie.ac s、Robby.acs两个文件。
上述文件均可从 http://www.microsoft.com/workshop/imedia/ agent/default.as p下载。
Microsoft Agent控件的初始化
先把Microsoft Agent控件添加到VB的控制工具条上,并在用户的 Form上绘制该控件(在下述例子中,其Name属性设为MyAgent)。下面的代码调用IAgentCtlCharacters::Loa d()方法装入一个动画人物的数据,调用IAgentCtlCharacter::Show()/Hide()方法来显示/隐藏动画人物。
Const DATAPATH = "c:/"
Dim Genie As IAgentCtlCharacter
Dim Robby As IAgentCtlCharacter
Dim GenieRequest1,GenieRequest2 As IAgentCtlRequest
Dim RobbyRequest1 As IAgentCtlRequestPrivate Sub Form_Load()
’装入动画人物数据,其中第一个参数为CharacterID
MyAgent.Characters.Load "Genie", DATAPATH & "Genie.acs"
MyAgent.Characters.Load "Robby", DATAPATH & "Robby.acs"
’获取与CharacterID相对应的IAgentCtlCharacter变量
Set Genie = MyAgent.Characters("Genie")
Set Robby = MyAgent.Characters("Robby")
’显示/隐藏动画人物
Genie.Show
Genie.HideEnd Sub
Microsoft Agent 控件的动画编程
每个动画人物都有自己特定的动作,例如Genie有听、看、读、写、发怒、感谢等数十种动画形态,可以调用IAgentCtlCharacter::pla y()方法来设置动画动作。为了在多个动画人物之间协调它们的动作, 比如让Robby等待Genie的某个动作执行完毕后才做另外一个动作,可采用IAgentCtlCharacter::Wait()方法来实现同步。在数十种动画动作中有一类比较特殊(动作名以"ing"为后缀,如"Searching"),一旦执行便循环播放一段动画,只有调用IAgentCtlCharacter::Interrupt() 方法才能终止。示例代码如下:
Private Sub Co mmand1_Click()
Genie.Show
' 执行名为"Suggest"的动作
Genie.Play "Suggest"
' 把Genie移动到座标(200,200)处,用GenieRequest1来标识该动作请求
Set GenieRequest1 = Genie.MoveTo(200, 200)
' 执行名为"Searching"的循环动画动作,用GenieRequest2来标识该动作请求
Set GenieRequest2 = Genie.Play("Searching")
' Robby等待Genie的MoveTo方法执行完毕,方才显示
Robby.Wait GenieRequest1
Robby.Show
Robby.Play "Suggest"
Robby.Play "read"
Robby.Play "Congratulate"
' 由Robby来终止Genie的循环动画动作
Robby.Interrupt GenieRequest2
Genie.Play "write"
Genie.Hide
Robby.HideEnd Sub
Microsoft Agent 控件的语音合成功能
Microsoft Agent控件支持英语的语音合成功能,只需输入句子的文字,便会生成该句子的语音信号并通过声卡、音箱播放出来。语音合成功能通过调用IAgentCtlCharact er::Speak()方法来实现。输出中文时不能用上述方法,只能用W***文件代替,给Speak()方法的第一个参数传递文字气球中包含的文字,给第二个参数传递一个W***文件路径。同样为同步多个动画人物的语音输出也必须使用IAgentCtlCharact er::Wait()方法。目前Mi crosoft Agent 控件还不支持多个人物的声音混合效果。具体实现代码如下:
Private Sub Command2_Click()
Genie.MoveTo 100, 200
Genie.Show
Genie.Play "Greet"
' Speak()方法的第一个参数即为需进行语音合成的句子文字
Genie.Speak "I am Genie, your most humble and loyal servant."
Genie.Speak "Where is Robby?"
Set GenieRequest1 = Genie.Play("LookLeft")
' 等Genie的"LookLeft"执行以后,再执行Robby的动作
Robby.Wait GenieRequest1
Robby.MoveTo 250, 200
Robby.Show
Robby.Play "Greet"
Robby.Speak "Sorry for the delay."
Set RobbyRequest1 = Robby.Speak("Traffic is really busy today on the Inf ormation Superhighway.")
’等Robby讲完了,Genie再讲
Genie.Wait RobbyRequest1
Genie.Play "LookLeftReturn"
Genie.Speak "Welcome to the release of Microsoft Agent, the new ActiveX technology that supports interactive chara cters"
’输出中文语音,"欢迎光临"的中文语音包含在welcome.wav中
Genie.Speak "欢迎光临", "c:/welcome.wav"
Genie.Hide
Robby.HideEnd Sub
Microsoft Agent 控件的语音识别功能
Microsoft Agent控件具有语音识别能力,用户可以向动画人物发出语音命令(同时按住Scroll Lock键)。Microsoft Agent控件为每个 Agent动画人物提供一个特殊命令窗口,用以显示该动画人物能够接受的所有语音命令。该命令窗口中的命令不能用鼠标或键盘来选取,只能通过语音。可以用IAgentComands::Add()方法来为命令窗口添加自定义命令。第一个参数是命令的标识符ID,第二个参数是该命令在命令窗口中的显示标签,第三个参数是该命令对应的语音识别句子。当用户通过麦克风向动画人物发出命令时会激发IAgent的Command事件, 可以编写一个接收Command事件的过程来完成与语音命令相对应的任务。
Private Sub Command3_Click()
Static initialized As Boolean
' 添加自定义命令
If Not initialized Then
Genie.Commands.Add "Word", "Run Word", "word", True, True
Genie.Commands.Add "Time", "What time is it?", "What time is it?", True , True
Genie.Commands.Add "Bigger", "Bigger", "Bigger", True, True
Genie.Commands.Add "Smaller", "Smaller", "Smaller", True, True
initialized = True
End If
Genie.Show
Genie.Speak "Can I help you?"End SubPrivate Sub MyAgent_Command(ByVal Us erInput As Object)
Select Case UserInput.Name
Case "Time"
' 当听到"What time is it?"后回答当前时间
Genie.Speak "The time is " & Time
Case "Word"
' 当听到"word"后,便运行MS Word
Genie.Speak "Yes,sir!"
Shell "d:/winword/winword.exe", vbNormalFocus
Case "Bigger"
' 当听到"bigger"后,Genie会放大
Genie.Width = Genie.Width * 1.5
Genie.Height = Genie.Height * 1.5
Case "Smaller"
' 当听到"samller"后,Genie会缩小
Genie.Width = Genie.Width / 1.5
Genie.Height = Genie.Height / 1.5
End Select
End Sub
相关文章推荐
- VB调用Microsoft Agent控件与电脑交谈
- 在LccWin32中使用Microsoft Agent控件——头文件AgentSvr.h
- 在LccWin32中使用Microsoft Agent控件——主文件AgentSvr.c
- Microsoft Agent agentdpv.dll ActiveX控件畸形URL栈溢出漏洞(MS07-051)
- CB2007 中使用Microsoft Agent 控件
- 黄聪:C#的Microsoft图表控件
- Microsoft 已经承认的错误:RICHEDIT控件不响应WM_KILLFOCUS、EN_KILLFOCUS事件函数
- 以编程方式使用 Microsoft Office Visio 2003 ActiveX 控件
- 判断agent(是电脑还是手机,是Android还是IOS)
- MFC控件Microsoft Web Browser简单浏览器实现
- 我电脑上的mssql2000居然,被黑了,在还原数据时提示:无法装载DLL Microsoft提示请误随意操作SQL数据库,以免对数据库造成不必要的麻烦或DLL所引用的某一DLL。原因:126(找不到指定模块)
- VC中Microsoft FlexGrid控件的使用及合并单元格、可编辑操作
- Microsoft.web.ui treeview 中树型控件的选择,选中节点父子节点同时选中,解决客户端选择以后,在后台代码中无法得到选中节点的值
- Microsoft,WEB控件树(TreeView)节点的删除方法.
- 用C#和microsoft webbrowser控件创建自己的ie
- 错误代码8004E00F-COM+无法与Microsoft分布式事物协调程序交谈 的处理
- Microsoft Web Browser控件的常用功能
- 解决“COM+ 无法与 Microsoft 分布式事务协调程序交谈”的问题
- Activex控件不能例示 ActiveX 控件“Microsoft Chart Control 6.0(sp4)(OLEDB)"不能例示的解决办法
- Winform中修改WebBrowser控件User-Agent的方法