2024年1月8日发(作者:)

agent:Agent插件浅析

疯狂代码 / ĵ:DataBase/

Agent插件浅析

使用过office xp、金山毒霸和瑞星杀毒软件Software朋友定会对中人性化动画角色留下深刻印象这完全归功于微软推出Agent(“代理”)技术Agent采用COM技术使用ActiveXControl控件方式支持现在流行各种开发工具不仅可以实现文本朗读而且可识别用户语音命令在应用和HTML文件中得到广泛使用

下面我们以PowerBuilder 8.0为开发工具来编制个小实用,步步介绍说明其实现思路方法:

第步从Internet网上下载Agent插件,并安装在计算机上,这是开发前期准备工作:

这些插件来源于微软公司相关网站WebSite,下载网址为:/msagent/downloads/,连接使用该网页:

1、首先单击“Download the Microsoft Agent core componts(395kbs exe)”下载并安装Agent核心组件其文件名为“"

2、其次单击(先选择"Simplied Chinese (127kb exe)”)下载并安装语言组件其文件名为“"

3、其次单击(先选择"Lernout & Hauspie TruVoice TTS engine - American English(1Mb exe)”)下载并安装TTS引擎其文件名为“tv_",要实现语音朗读必须安装当前版本支持英语

4、再其次单击(先选择"Doadload the Microsoft Speech Recognition Engine(6Mb exe)”)下载并安装语音识别引擎其文件名为“",要实现语音命令识别必须安装当前版本支持英语

5、最后单击“Download selected character"下载安装要用到动画角色文件在这里我们下载微软公司网站WebSite所提供动画角色文件主要包括Genie(妖怪、鬼)、Robby(机器人)、Merlin、Peedy(睡衣)共 4种动画角色它们不但有丰富行为动作而且具有语言功能其对应文件名分别为、、、这些Agent角色常用动画动作通常用含有相同意义英文单词来标识如下表所示以下所述编程例子即演示它们分别所产生动作效果

常量相关动作

Acknowledge显示承认、答谢动作

Alert显示警告动作

Announce显示宣布、通告工作

Blink显示眨眼动作

Decline显示摇头拒绝动作

DoMagic1、DoMagic2显示指挥演奏动作

Confused显示迷惑动作

Congratulate显示祝贺动作

DontRecognize显示无法识别动作

Explain显示解释动作

GesttureDown显示向下方向手势动作

GesttureLeft显示向左方向手势动作

GesttureRight显示向右方向手势动作

GesttureUp显示向上方向手势动作

GetAttention显示立正动作

GetAttentionContinued显示继续立正动作

GetAttentionReturn显示继续立正动作

Greet显示问候动作

Hearing_1

Hearing_2显示左右聆听动作

Hearing_3

Hide隐藏动画角色

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显示回返向左下方查看动作

LookDownRight显示向右下方查看动作

LookDownRightBlink显示向右下方眨眼动作

LookDownRightReturn显示回返向右下方查看动作

LookDownReturn显示回返向下方查看动作

LookLeft显示向左方查看动作

LookLeftBlink显示向左方眨眼动作

LookLeftReturn显示回返向左方查看动作

LookRight显示向右方查看动作

LookRightBlink显示向右方眨眼动作

LookRightReturn显示回返向右方查看动作

LookUp显示向上查看动作

LookUpBlink显示向上眨眼动作

LookUpLeft显示向左上方查看动作

LookUpLeftBlink显示向左上方眨眼动作

LookUpLeftReturn显示回返向左上方查看动作

LookUpRight显示向右上方查看动作

LookUpRightBlink显示向右上方眨眼动作

LookUpRightReturn显示回返向右上方查看动作

LookUpReturn显示回返向上方查看动作

MoveDown显示向下移动动作

MoveLeft显示向左移动动作

MoveRight显示向右移动动作

MoveUp显示向上移动动作

Pleaseed显示愉快动作

Process显示处理工作动作

Processing显示正在处理工作动作

Read显示阅读动作

Readcontinued显示继续阅读动作

Reading显示正在阅读动作

ReadReturn显示停止阅读动作

Sad显示悲伤动作

Search显示查找动作

Searching显示正在查找动作

Show显示动画角色

StartListening显示开始聆听动作

StopListening显示停止聆听动作

Suggest显示建议动作

Surprised显示惊讶表情

Think显示研究表情

Thinking显示正在研究表情

Uncertain显示不确定动作

Wave显示致意动作

Write显示写动作

Writecontinued显示继续写动作

Writing显示正在写动作

WritReturn显示停止写动作

当然我们也可以从/msagent/downloads/网页单击“Downloadthe

Microsoft Agent Character Editor(1Mb exe)”和“Download the Microsoft Agent LinguisticInformation

SoundEditing Tool(6.2Mb exe)”下载制作工具亲自制作自己所钟爱动画角色形象

第 2步设计应用

在PowerBuilder中提供了OLEControl控件以便PowerBuilder应用能够使用其它开发工具编写COM组件和ActiveXControl控件

在使用相关COM组件和ActiveXControl控件先须注册相关COM组件和ActiveXControl控件,在PowerBuilder注册Control控件可以在PowerBulider

开发环境中插入OLEControl控件时选择Regisiter New进行注册

AgentControl控件主要属性如下表:

属性用途

Charactors 用于设置和Control控件相关联动画角色文件

Connected用于判别Control控件是否和Agent服务器相连接

LanguageID用于设置Agent所使用语言目前仅可设置为十 6进制“409”,即“&H409”

AgentControl控件主要思路方法如下表:

思路方法用途

Load用于化AgentControl控件并加载动画角色数据文件

UnLoad用于卸载动画角色数据文件

Show用于显示Agent动画角色并可通过参数控制动画角色显示速度

Hide用于隐藏Agent动画角色并可通过参数控制动画角色隐藏速度

StopAll用于停止动画角色所有动作

Stop用于停止动画角色当前动作

MoveTo用于移动动画角色可通过参数来设置移动坐标和移动速度

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

中断该动作即执行下个动作会产生异常现象

Wait用于在多个动画角色间实现相互的间动作协调

Play用于执行指定动画动作可通过参数来设置动画类型

Speak用于通过语音合成引擎实现英语语音合成输出功能即只需要输入

英文串Agent即可通过声音输出设备“说话”

AgentControl控件主要事件如下表

事件用途

Show在Agent动画角色显示时触发可利用该事件将主界面隐藏

Hide在Agent动画角色隐藏时触发可利用该事件将主界面重新显示

在PowerBuilder中实现步骤如下

1、新建工作区;

2、新建应用目标PowerBuilder会自动建立个pbl库文件以便存放相关PowerBuilder对象并建立个myexample

应用对象;

3、新建窗口对象w_example,并在其上放置Control控件如下表:

Control控件Control控件名称

listboxlb_1

commandbutton cb_1

commandbuttoncb_2

ole controlole_1(并插入对应Agent ActiveXControl控件)

4、新建菜单对象m_file,并添加相关菜单项如下表:

菜单名菜单文本菜单脚本

m_file文件(&F)

m_fileopen打开(&O)revent("ue_fileopen")

m_bar1-

m_fileexit退出(&E)revent("ue_fileexit")

5、将窗口对象w_examplemenuid属性设置为m_file

6、定义窗口w_example例子变量如下:

privite:

boolean ib_flag

is_animationname

7、编写窗口w_example相关事件脚本:

open事件脚本如下:

long result,ll

fileexists(GetCurrentDirectory ( )+"")=false then

result=messagebox("提示“"在当前目录下没有动画角色文件"stop!)

ib_flag=false

close(this)

ib_flag=true

ole_1. O B J E C ("CharacterID",GetCurrentDirectory ( )+"")

ole_1. O B J E C ters("CharacterID").languageID=1033

ole_1. O B J E C ters("CharacterID").moveto(20,20)

ole_1. O B J E C ters("CharacterID").show

ole_1. O B J E C ters("CharacterID").play("Wave")

ole_1. O B J E C ters("CharacterID").speak("Hello,Welcome to use The Character AnimationPreviewer Programm!")

ole_1. O B J E C ters("CharacterID").play("Reading")

lb_

for ll=1 to upperbound(ole_1. O B J E C ters("CharacterID").animationnames)

lb_m(ole_1. O B J E C ters("CharacterID").animationnames[ll])

next

lb_item(1)

close事件脚本如下:

ib_flag=true then

ole_1. O B J E C ters("CharacterID").hide

ole_1. O B J E C ("CharacterID")

end

自定义事件ue_fileopen脚本如下:

docname, named

eger value

value = GetFileOpenName("选择动画角色文件",docname, named, "acs", "动画角色文件(*.acs),*.acs")

IF value = 1 THEN

ole_1. O B J E C ("CharacterID")

ole_1. O B J E C ("CharacterID",docname)

ole_1. O B J E C ters("CharacterID").languageID=1033

ole_1. O B J E C ters("CharacterID").moveto(20,20)

ole_1. O B J E C ters("CharacterID").show

ole_1. O B J E C ters("CharacterID").speak("Hello!")

ole_1. O B J E C ters("CharacterID").play("congratulate")

ole_1. O B J E C ters("CharacterID").play("Wave")

cb_d=false

lb_

for ll=1 to upperbound(ole_1. O B J E C ters("CharacterID").animationnames)

lb_m(ole_1. O B J E C ters("CharacterID").animationnames[ll])

next

lb_item(1)

ole_1. O B J E C ters("CharacterID").moveto(0,0)

lb_

end

自定义事件ue_fileexit脚本如下:

close(this)

lb_1clicked事件脚本如下:

cb_d=true

lb_1doubleclicked事件脚本如下:

cb_revent("clicked")

lb_1getfocus事件如下:

cb_t=true

cb_1clicked事件脚本如下:

ole_1. O B J E C ters("CharacterID").stop

="演示动画角色动作:"+lb_edItem ( )

ole_1. O B J E C ters("CharacterID").play(lb_editem)

cb_2clicked事件脚本如下:

ole_1. O B J E C ters("CharacterID").stop

8、编写application对象open事件脚本如下:

open(w_example) 2009-2-12 5:01:36

疯狂代码 /