VB5.0调用Microsoft Agent控件

翻译|其它|编辑:郝浩|2004-03-04 15:21:00.000|阅读 1447 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

---- Microsoft Agent控件比Office 97中的助手更进了一步,它提供的动画人物不仅有生动、有趣的动作,而且还能通过声卡、麦 克风与用户进行交谈,这些功能使计算机更具人性魅力,其应用前途相当广泛。Microsoft Agent控件的内部机制很复杂,但用VB来 操纵它却是异乎寻常的方便,本文将介绍VB 5.0调用Microsoft Agent控件的基本方法。

---- 1. 安装MicrosoftAgent控件

---- (1)首先要安装Microsoft Agent的核心组件 msagent.exe

---- (2)接着要安装Lernout & Hauspie TruVoice Text-to-Speech Engine(完成从文字合成语音的工作)cgram.exe。

---- (3)最后要安装Microsoft Command and Control Speech Engine(提供语音识别功能)Actcnc.exe。

---- (4)另外还需要Agnet动画人物数据文件,在本文中使用了Genie.acs、Robby.acs 两个文件。

---- 上述文件均可从http://www.microsoft.com/workshop/prog/agent下载。

---- 2.MicrosoftAgent控件的初始化

---- 先把Microsoft Agent控件添加到VB的控制工具条上,并在用户的Form上绘制该控件(在下述例子中,其Name属性设为MyAgent)。下面的代码调用IAgentCtlCharacters::Load()方法装入一个动画人物的数据,调用IAgentCtlCharacter::Show()/Hide() 方法来显示/隐藏动画人物。

Const DATAPATH = "c:\"

Dim Genie As IAgentCtlCharacter
Dim Robby As IAgentCtlCharacter
Dim GenieRequest1, GenieRequest2 As IAgentCtlRequest
Dim RobbyRequest1 As IAgentCtlRequest

Private 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.Hide
End Sub

---- 3. Microsoft Agent控件的动画编程

---- 每个动画人物都有自己特定的动作,例如Genie有听、看、读、写、发怒、感谢等数十种动画形态。可以调用IAgentCtlCharacter::play()方法来设置动画动作。为了在多个动画人物之间协调它们的动作,比如让Robby等待Genie 的某个动作 执行完毕后,方才做另外一个动作,这时可采用IAgentCtlCharacter::Wait()方法来实现同步。在数十种动画动作中有一类比较特 殊(动作名以"ing"为后缀,如"Searching"),一旦执行便循环播放一段动画,只有调用IAgentCtlCharacter::Interrupt()方法才能 终止。示例代码如下:

Private Sub Command1_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.Hide
End Sub

---- 4. Microsoft Agent 控件的语音合成功能

---- Microsoft Agent控件支持英语的语音合成功能,只需输入句子的文字,便会生成该句子的语音信号并通过声卡、音箱播放出 来。语音合成功能通过调用IAgentCtlCharacter::Speak()方法来实现。输出中文时不能用上述方法,只能用WAV文件代替,给peak() 方法的第一个参数传递文字气球中包含的文字,给第二个参数传递一个WAV文件路径。同样为同步多个动画人物的语音输出也必须使 用IAgentCtlCharacter::Wait()方法。目前Microsoft 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 Information 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 characters"
'输出中文语音,"欢迎光临"的中文语音包含在welcome.wav中
Genie.Speak "欢迎光临", "c:\welcome.wav"
Genie.Hide
Robby.Hide
End Sub

---- 5. 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 Sub

Private Sub MyAgent_Command(ByVal UserInput 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

/*//////////////////////////////////
//////////////////////////////////*/
/* 附 完 整 源 程 序 agent.frm */
VERSION 5.00
Object = "{F5BE8BC2-7DE6-11D0-91FE
-00C04FD701A5}#1.5#0"; "AGENTCTL.DLL"
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 3195
ClientLeft = 60
ClientTop = 345
ClientWidth = 4680
LinkTopic = "Form1"
ScaleHeight = 3195
ScaleWidth = 4680
StartUpPosition = 3 'Windows Default
Begin VB.CommandButton Command3
Caption = "Command3"
Height = 615
Left = 2880
TabIndex = 2
Top = 360
Width = 1095
End
Begin VB.CommandButton Command2
Caption = "Command2"
Height = 615
Left = 1320
TabIndex = 1
Top = 360
Width = 1095
End
Begin VB.CommandButton Command1
Caption = "Command1"
Height = 615
Left = 120
TabIndex = 0
Top = 360
Width = 855
End
Begin AgentObjectsCtl.Agent MyAgent
Left = 360
Top = 2520
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False

Option Explicit

Const DATAPATH = "c:\"

Dim Genie As IAgentCtlCharacter
Dim Robby As IAgentCtlCharacter
Dim GenieRequest1, GenieRequest2 As IAgentCtlRequest
Dim RobbyRequest1 As IAgentCtlRequest

Private Sub Command1_Click()
Genie.Show
Genie.Play "Suggest"
Set GenieRequest1 = Genie.MoveTo(200, 200)
Set GenieRequest2 = Genie.Play("Searching")
Robby.Wait GenieRequest1
Robby.Show
Robby.Play "Suggest"
Robby.Play "read"
Robby.Play "Congratulate"
Robby.Interrupt GenieRequest2
Genie.Play "write"
Genie.Hide
Robby.Hide
End Sub

Private Sub Command2_Click()
Genie.MoveTo 100, 200
Genie.Show
Genie.Play "Greet"
Genie.Speak "I am Genie, your most humble and loyal servant."
Genie.Speak "Where is Robby?"
Set GenieRequest1 = Genie.Play("LookLeft")
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 Information Superhighway.")
Genie.Wait RobbyRequest1
Genie.Play "LookLeftReturn"
Genie.Speak "Welcome to the release of Microsoft Agent, the new
ActiveX technology that supports interactive characters"
Genie.Speak " 欢迎光临VB编程乐园", "c:\welcome.wav"
Genie.Hide
Robby.Hide
End Sub

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 Sub

Private Sub Form_Load()
MyAgent.Characters.Load "Genie", DATAPATH & "Genie.acs"
MyAgent.Characters.Load "Robby", DATAPATH & "Robby.acs"
Set Genie = MyAgent.Characters("Genie")
Set Robby = MyAgent.Characters("Robby")
Genie.Show
Genie.Hide
End Sub

Private Sub MyAgent_Command(ByVal UserInput As Object)
Select Case UserInput.Name
Case "Time"
Genie.Speak "The time is " & Time
Case "Word"
Genie.Speak "Yes,sir!"
Shell "d:\winword\winword.exe", vbNormalFocus
Case "Bigger"
Genie.Width = Genie.Width * 1.5
Genie.Height = Genie.Height * 1.5
Case "Smaller"
Genie.Width = Genie.Width / 1.5
Genie.Height = Genie.Height / 1.5
End Select
End Sub


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP