关于MS Agents动画--→northwolves (野性的呼唤) 你要的!!!!!

yinweihong 西北农林科技大学 2004-04-30 08:00:58
转:
使用过OfficeXP、金山毒霸和瑞星杀毒软件的读者,一定会对程序中的人性化的动画角色留下深刻印象,

这完全归功于微软推出的Agents("代理")技术,Agents采用COM技术,使用ActiveX控件方式,支持VB,VC

,Delphi,Java,JScript和VBScript等多种开发语言,不仅可以实现文本的朗读,而且可识别用户的语音

命令,在应用程序和HTML文件中得到广泛使用。
下面我们以VB6为开发工具来编制一个小实用程序,一步步说明其实现方法:
第一步:从Internet网上下载Agents插件,并安装在计算机上,这是开发的前期准备工作:
这些插件来源于微软公司的相关网站,下载的网址为:

http://www.microsoft.com/msagent/downloads/user.asp
链接该网页:
1.首先单击"Download the Microsoft Agent core components(395 KB exe)"下载并安装Agents的核心组

件其文件名为"Msagent.exe".
2.其次单击(先选择"Simplified Chinese(127 KB exe)")"Download selected language component"下载

并安装语言组件,其文件名为:"AgtX0804.exe"
3.其次单击
(先选择"Lernout & hauspie TruVoice TTS engine-American English (1MB exe)")"Download selected
engine "下载并安装TTS引擎,其文件名为"tv_enua.exe",要实现语音朗读,必须安装,当前版本只支持

英语。
4.再其次单击"Download the MIcrosoft Speech Recognition Engine (6MB exe)"下载并安装语音识别引

擎,其文件名为"Actcnc.exe"要实现语音命令识别,必须安装,当前版本只支持英语。
5.最后单击"DOwnload selected character"下载安装要用到的动画角色文件,在这里我们来直接选择微

软公司的网站所提供的动画角色文件,主要包括Genie(妖怪,鬼)、Robby(机器人)、Merlin(隼)和Peedy(

睡衣裤)共四种动画角色,它们不但有丰富的行为动作,而且具有语音功能,其相对文件名分别是

Genie.acs、Robby.acs、Merlin.acs和peedy.acs如图四显示:
这些Agents角色的常用动画动作,通常用含有相同意义的英文单词字符来标识,如下表所示,以下所述编

程实例即演示它们分别所产生的动画效果。

常量及相关动作表:

常量 相关动作 常量 相关动作
Ackonwledge 显示承认、答谢的动作 Alert 显示警告的动作
Announce 显示宣布、通告的动作 Blink 显示眨眼的动作
Decline 显示摇头拒绝的动作 DoMagic1,Domagic2 显示指挥演奏的动作
Confused 显示迷惑的动作 Congratulate 显示祝贺的动作
DontRecognize 显示无法识别的动作 Explain 显示解释的动作
GestureDown 显示向下方向的手势动作 GestureLeft 显示向左方向的手势动作
GestureUp 显示向上方向的手势动作 GestureRight 显示向右方向的手势动作
GetAttention 显示立正的动作 GetAttentionContinued 显示继续立正的动作
GetAttentionReturn 显示停止立正的动作 Greet 显示问候的动作
{Hearing_1
Hearing_2 显示左右聆听的动作 Hide 隐藏动画角色
Hearing_3 }
Idle1_1 显示舒展的动作 Idle1_2 显示向左倾的动作
Idle1_3 显示向右倾的动作 Idle1_4 显示向后倾的动作
Idle1_5 显示向前倾的动作 Idle2_1 显示带耳机听音乐的动作
Idle2_2 显示吃饼干的动作 Idle3_1 显示带耳机听音乐的动作
Idle3_2 显示瞌睡的动作 Idle3_3 显示带耳机听音乐的动作
LookDown 显示向下察看的动作 LookDownBlink 显示向下眨眼的动作
LookDownLeft 显示向左下方查看的动作 LookDownLeftBlink 显示向左下方眨眼的动作
LookDownLeftReturn 显示回返向左下方察看的动作 LookDownReturn 显示回返向下察看的动作
LookDownRight 显示向右下方察看的动作 LookDownRightBlink 显示向右下方眨眼的动作
LookDownRightReturn 显示回返向右下方察看的动作 LookLeft 显示向左察看的动作
LookLeftBlink 显示向左眨眼的动作 LookLeftReturn 显示回返向左察看的动作
LookRight 显示向右察看的动作 LookRightBlink 显示向右眨眼的动作
LookRightReturn 显示回返向右察看的动作 LookUp 显示向上察看的动作
LookUpBlink 显示向上眨眼的动作 LookUpLeft 显示向左上方察看的动作
LookUpLeftBlink 显示向左上方眨眼的动作 LookUpLeftReturn 显示回返向左上方察看的动作
LookUpReturn 显示回返向上察看的动作 LookUpRight 显示向右上方察看的动作
LookUpRightBlink 显示向右上方眨眼的动作 LookUpRightReturn 显示回返向右上方察看的动作
MoveDown 显示向下移动的动作 MoveLeft 显示向左移动的动作
MoveRight 显示向右移动的动作 MoveUp 显示向上移动的动作
Pleaseed 显示愉快的表情 Process 显示处理工作的动作
Processing 显示正在进行处理 Read 显示阅读的动作
ReadContinued 显示继续阅读的动作 Reading 显示正在进行阅读的动作
ReadReturn 显示停止阅读的动作 RestPose 显示休息的姿态
Sad 显示悲伤的表情 Search 显示查找的动作
Searching 显示正在进行查找的动作 Show 显示动画角色
StartListening 显示开始倾听的动作 StopListening 显示停止倾听的动作
Suggest 显示建议的动作 Surprised 显示惊讶的表情
Think 显示思考的表情 Thinking 显示正在进行思考的表情
Uncertain 显示不确定的动作 Wave 显示致意的动作
Write 显示书写的动作 WriteContinued 显示正在书写的动作
Writeing 显示正在进行书写的动作 WriteReturn 显示停止书写的动作


我们有可以从http://www.microsoft.com/msagent/downloads/developer.asp网页单击"Download the

Microsoft Agents CHaracter Editor (1MB exe)"和"Download the Microsoft Agent Linguistic

Information Sound Editing Tool(6.2 MB exe)"下载制作工具,亲自制作自己所钟爱的动画角色形象。

第二步;设计应用程序
1.首先设计界面
在VB6中新建工程,添加Agent控件,在"工程"--"部件"--"控件"窗体列表框中选择"Microsoft Agent

Control 2.0"和"Microsoft Common Dialog Control 6.0" 如图1显示:
在新建窗体上选择"Microsoft Agent Control 2.0"的Agent控件添加到表单上(如图2所示),命名为AgentA


Agent控件的主要属性:
属性 用途
Charactors 用于设置与控件相关联的动画角色文件
Connected 用于判别控件是否与Agent服务器想连接
LanguageID 用于设置Agent所使用的语言,目前仅可设置为十六进制的"409",即"&H409"

Agent控件的主要方法:
方法 用途
Load 用于初始化Agent控件,并加载动画角色数据文件
Unload 用于卸载动画角色数据文件
Show 用于显示Agent动画角色,并可通过参数控制动画角色的显示速度。
Hide 用于隐藏Agent动画角色,并可通过参数控制动画角色的隐藏速度。
StopAll 用于停止动画角色的全部动作。
Stop 用于停止动画角色的当前动作。
MoveTo 用于移动动画角色,可通过参数来设置移动的坐标和移动的速度。

Interrupt 用于中断动画角色的动画,在执行一些有持续性的动画动作时,如不中断该动作即执行

下一个动作,产生异常现象。

Wait 用于在多个动画角色间实现相互之间的动作协调。
Play 用于执行指定的动画动作,可通过参数来设置动画类型。

Speak 用于通过语音合成引擎,实现英语的语音合成输出功能。即只需输入英文字符串,

Agent即可通过声音输出设备"说话"。

由于目前的Agent版本不支持中文语音合成,因此可通过播放预录制的"wav(声音)"文件来播放中文语音。

Agent控件的主要事件

事件 用途
Show 在Agent动画角色显示时触发,可利用该事件将程序的主界面隐藏。
Hide 在Agent动画角色隐藏时触发,可利用该事件恢复被隐藏的程序主界面。


在窗体上放置一个Frame控件,命名为FrameA;在其上添加一个ListBox控件,命名为ListBoxA.另外再防止

两个CommandButton控件,分别命名为CommandPlay、CommandStop;一个通用对话框控件为CommonDialogA

,如图3所示:
"工具"--"菜单编辑器"编辑表单菜单:
其次编写程序代码:在窗体设计完毕后,切换至代码输入窗体,有关过程代码如下所示:

...全文
148 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ljf88888 2004-05-05
up
回复
BlueBeer 2004-05-03
收藏!
回复
VBDN 2004-05-03
up
回复
doudoushen 2004-05-02
楼主 这好象是《csdn开发高手》的的内容嘛

我想问一下 如果我想做成Office助手那种可以交互式的 怎么做啊
回复
northwolves 2004-05-02
非常感谢,我这里收集了五十多个角色文件呢。
问题是*.RM,*.MP3 格式的语音文件对不上口型,不想用第三方的控件转换为*.WAV格式。
无论如何,非常感谢,过了节送你100分,祝节日愉快!!!!!
回复
yinweihong 2004-05-02

to楼上:可以从http://www.microsoft.com/msagent/downloads/developer.asp网页单击"Download the

Microsoft Agents CHaracter Editor (1MB exe)"和"Download the Microsoft Agent Linguistic

Information Sound Editing Tool(6.2 MB exe)"下载制作工具,亲自制作自己所钟爱的动画角色形象。



我不看csdn开发高手的
不过我是从一本书上转的
因为早阵子有人要这方面的资料,所以我摘抄下来 第一个字写着"转"


to northwolves(野性的呼唤)
节日愉快
呵呵,我当初并没想着”索贿“的,一个信念"知识共享"。。。。。
回复
ljf88888 2004-04-30
up
回复
daisy8675 2004-04-30
牛牛....你幹嘛,

http://expert.csdn.net/Expert/topic/2922/2922046.xml?temp=.8650019
請參考一下你以前講的話。

這次偶散分,你沒有來噢
回复
海牛 2004-04-30
莫姐????是个PLMM阿???、嘿嘿····
回复
daisy8675 2004-04-30
好東西,偶就跑得最快了,現在在看鬼子們的回貼,腦袋都大了
回复
yinweihong 2004-04-30
呵呵,莫姐那么快!!!
回复
yinweihong 2004-04-30
Option Explicit
Private VarCharacter As IAgentCtlCharacterEx
Private VarAnimationName As Variant
Private VarFlag As Boolean
Private Sub CommandPlay_Click()
VarCharacter.Stop
Me.Caption = "演示动画角色动作" + Me.ListBoxA.List(Me.ListBoxA.ListIndex)
VarCharacter.Play Me.ListBoxA.List(Me.ListBoxA.ListIndex)
End Sub

Private Sub CommandStop_Click()
VarCharacter.Stop
End Sub

Private Sub Exit_Click()
Unload Me
End Sub

Private Sub Form_Load()
Dim Result As Long
If Not FileExist(App.Path + "\Peedy.acs") Then
Result = MsgBox("在程序当前目录下没有动画角色文件Peedy.acs", vbInformation + vbOKOnly, App.Title)
VarFlag = False
Unload Me
Exit Sub
Else
VarFlag = True
End If
Me.AgentA.Characters.Load "CharacterID", App.Path + "\Peedy.acs"
'装载动画角色的数据文件
Set VarCharacter = Me.AgentA.Characters("CharacterID") '设置ID
VarCharacter.LanguageID = &H409 '设置语言属性
VarCharacter.MoveTo 20, 20 '移动动画角色
VarCharacter.Show
VarCharacter.Play "Congratulate"
VarCharacter.Play "Wave"
VarCharacter.Speak "Hello.Welcome to use The Character Animation Previewer Programm!"
VarCharacter.Play "Reading"
Me.ListBoxA.Clear
For Each VarAnimationName In VarCharacter.AnimationNames
ListBoxA.AddItem VarAnimationName
Next
Me.ListBoxA.ListIndex = 0
End Sub
Private Sub Form_Unload(Cancel As Integer)
If VarFlag Then
VarCharacter.Hide
Set VarCharacter = Nothing
Me.AgentA.Characters.Unload "CharacterId"
End If
End Sub

Private Sub ListBoxA_Click()
Me.CommandPlay.Enabled = True
End Sub

Private Sub ListBoxA_DblClick()
Call CommandPlay_Click
End Sub

Private Sub ListBoxA_GotFocus()
Me.CommandPlay.Default = True

End Sub

Private Sub Open_Click()
On Error GoTo HandlerError
Me.CommonDialogA.CancelError = True
Me.CommonDialogA.Flags = cdlOFNHideReadOnly
Me.CommonDialogA.InitDir = App.Path + "\"
Me.CommonDialogA.Filter = "Microsoft Agent Characters(*.ACS)|*.ACS"
Me.CommonDialogA.FilterIndex = 1
Me.CommonDialogA.ShowOpen
Set VarCharacter = Nothing
Me.AgentA.Characters.Unload "CharacterID"
Me.AgentA.Characters.Load "CharacterID", Me.CommonDialogA.FileName
Set VarCharacter = AgentA.Characters("CharacterID")
Me.Caption = "演示动画角色:" + VarCharacter.Name
VarCharacter.LanguageID = &H409
VarCharacter.MoveTo 20, 20
VarCharacter.Show
VarCharacter.Speak "Hello !"
VarCharacter.Play "Congratulate"
VarCharacter.Play "Wave"
Me.CommandPlay.Enabled = False
Me.ListBoxA.Clear
For Each VarAnimationName In VarCharacter.AnimationNames
ListBoxA.AddItem VarAnimationName
Next
Me.ListBoxA.ListIndex = 0
VarCharacter.MoveTo 20, 20
VarCharacter.Show
Me.ListBoxA.SetFocus
Exit Sub
HandlerError:
Exit Sub
End Sub
Public Function FileExist(ByVal VarFileName As String) As Boolean
On Error Resume Next
FileExist = IIf(Dir(Trim(VarFileName)) = vbNullString, False, True)
End Function


回复
daisy8675 2004-04-30
收收收...呵呵
回复
yinweihong 2004-04-30
Option Explicit
Private VarCharacter As IAgentCtlCharacterEx
Private VarAnimationName As Variant
Private VarFlag As Boolean
Private Declare Function GetCurrentDirectory Lib "kernel32" Alias "GetCurrentDirectoryA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Sub CommandPlay_Click()
VarCharacter.Stop
Me.Caption = "演示动画角色动作" + Me.ListBoxA.List(Me.ListBoxA.ListIndex)
VarCharacter.Play Me.ListBoxA.List(Me.ListBoxA.ListIndex)
End Sub

Private Sub CommandStop_Click()
VarCharacter.Stop
End Sub

Private Sub Exit_Click()
Unload Me
End Sub

Private Sub Form_Load()
Dim Result As Long
If Not FileExist(App.Path + "\Peedy.acs") Then
Result = MsgBox("在程序当前目录下没有动画角色文件Peedy.acs", vbInformation + vbOKOnly, App.Title)
VarFlag = False
Unload Me
Exit Sub
Else
VarFlag = True
End If
Me.AgentA.Characters.Load "CharacterID", App.Path + "\Peedy.acs"
'装载动画角色的数据文件
Set VarCharacter = Me.AgentA.Characters("CharacterID") '设置ID
VarCharacter.LanguageID = &H409 '设置语言属性
VarCharacter.MoveTo 20, 20 '移动动画角色
VarCharacter.Show
VarCharacter.Play "Congratulate"
VarCharacter.Play "Wave"
VarCharacter.Speak "Hello.Welcome to use The Character Animation Previewer Programm!"
VarCharacter.Play "Reading"
Me.ListBoxA.Clear
For Each VarAnimationName In VarCharacter.AnimationNames
ListBoxA.AddItem VarAnimationName
Next
Me.ListBoxA.ListIndex = 0
End Sub
Private Sub Form_Unload(Cancel As Integer)
If VarFlag Then
VarCharacter.Hide
Set VarCharacter = Nothing
Me.AgentA.Characters.Unload "CharacterId"
End If
End Sub

Private Sub ListBoxA_Click()
Me.CommandPlay.Enabled = True
End Sub

Private Sub ListBoxA_DblClick()
Call CommandPlay_Click
End Sub

Private Sub ListBoxA_GotFocus()
Me.CommandPlay.Default = True

End Sub

Private Sub Open_Click()
On Error GoTo HandlerError
Me.CommonDialogA.CancelError = True
Me.CommonDialogA.Flags = cdlOFNHideReadOnly
Me.CommonDialogA.InitDir = App.Path + "\"
Me.CommonDialogA.Filter = "Microsoft Agent Characters(*.ACS)|*.ACS"
Me.CommonDialogA.FilterIndex = 1
Me.CommonDialogA.ShowOpen
Set VarCharacter = Nothing
Me.AgentA.Characters.Unload "CharacterID"
Me.AgentA.Characters.Load "CharacterID", Me.CommonDialogA.FileName
Set VarCharacter = AgentA.Characters("CharacterID")
Me.Caption = "演示动画角色:" + VarCharacter.Name
VarCharacter.LanguageID = &H409
VarCharacter.MoveTo 20, 20
VarCharacter.Show
VarCharacter.Speak "Hello !"
VarCharacter.Play "Congratulate"
VarCharacter.Play "Wave"
Me.CommandPlay.Enabled = False
Me.ListBoxA.Clear
For Each VarAnimationName In VarCharacter.AnimationNames
ListBoxA.AddItem VarAnimationName
Next
Me.ListBoxA.ListIndex = 0
VarCharacter.MoveTo 20, 20
VarCharacter.Show
Me.ListBoxA.SetFocus
Exit Sub
HandlerError:
Exit Sub
End Sub
Public Function FileExist(ByVal VarFileName As String) As Boolean
On Error Resume Next
FileExist = IIf(Dir(Trim(VarFileName)) = vbNullString, False, True)
End Function
Public Function GetCurDir() As String
Dim ChrLen As Long
GetCurDir = String(255, 0)
ChrLen = GetCurrentDirectory(256, GetCurDir)
GetCurDir = Left(GetCurDir, ChrLen)
End Function

*********************************************************************************注意:上面程序有误!!在vbapi里复制的GetCurrentDirectory有误
详情见http://www.zdnet.com.cn/developer/tech/story/0,2000081602,39104409,00.htm
我换了个方法:正确的完全代码在下面
回复
发动态
发帖子
VB基础类
创建于2007-09-28

7453

社区成员

VB 基础类
申请成为版主
社区公告
暂无公告