該文被n多網(wǎng)站轉(zhuǎn)載,沒找到原始出處!
使用過office xp、金山毒霸和瑞星殺毒軟件的朋友,一定會(huì)對(duì)程序中的人性化的動(dòng)畫角色留下深刻印象,這完全歸功于微軟推出的Agent(“代理”)技術(shù),Agent采用COM技術(shù),使用ActiveX控件方式,支持現(xiàn)在流行的各種開發(fā)工具,不僅可以實(shí)現(xiàn)文本的朗讀,而且可識(shí)別用戶的語音命令,在應(yīng)用程序和HTML文件中得到廣泛的使用。
下面我們以PowerBuilder 8.0為開發(fā)工具來編制一個(gè)小實(shí)用程序,一步步說明其實(shí)現(xiàn)方法:
第一步從Internet網(wǎng)上下載Agent插件,并安裝在計(jì)算機(jī)上,這是開發(fā)的前期準(zhǔn)備工作:
這些插件來源于微軟公司的相關(guān)網(wǎng)站,下載的網(wǎng)址為:http://www.microsoft.com/msagent/downloads/user.asp,連接使用該網(wǎng)頁:
1、首先單擊“Download the Microsoft Agent core componts(395kbs exe)”下載并安裝Agent的核心組件,其文件名為“Msagent.exe"。
2、其次單擊(先選擇"Simplified Chinese (127kb exe)”)下載并安裝語言組件,其文件名為“AgtX0804.exe"。
3、其次單擊(先選擇"Lernout & Hauspie TruVoice TTS engine - American English(1Mb exe)”)下載并安裝TTS引擎,其文件名為“tv_enua.exe",要實(shí)現(xiàn)語音朗讀,必須安裝,當(dāng)前版本支持英語。
4、再其次單擊(先選擇"Doadload the Microsoft Speech Recognition Engine(6Mb exe)”)下載并安裝語音識(shí)別引擎,其文件名為“Actcnc.exe",要實(shí)現(xiàn)語音命令識(shí)別,必須安裝,當(dāng)前版本支持英語。
5、最后單擊“Download selected character"下載安裝要用到的動(dòng)畫角色文件,在這里我們下載微軟公司網(wǎng)站所提供的動(dòng)畫角色文件,主要包括Genie(妖怪、鬼)、Robby(機(jī)器人)、Merlin、Peedy(睡衣)共四種動(dòng)畫角色,專無管教供7^@供|Q{9iL&G育它們不但有豐富的行為動(dòng)作,而且具有語言功能,其對(duì)應(yīng)的文件名分別為Genie.acs、Robby.acs、Merlin.acs、Peedy.acs。這些Agent角色的常用動(dòng)畫動(dòng)作,通常用含有相同意義的英文單詞字符來標(biāo)識(shí),如下表所示,以下所述編程實(shí)例即演示它們分別所產(chǎn)生的動(dòng)作效果。
常量 相關(guān)動(dòng)作
Acknowledge 顯示承認(rèn)、答謝的動(dòng)作
Alert 顯示警告的動(dòng)作
Announce 顯示宣布、
?gZ網(wǎng)Fj~r無Wk垠@j{
通告的工作
Blink 顯示眨眼的動(dòng)作
Decline 顯示搖頭拒絕的動(dòng)作
DoMagic1、DoMagic2 顯示指揮演奏的動(dòng)作
Confused 顯示迷惑的動(dòng)作
Congratulate 顯示祝賀的動(dòng)作
DontRecognize 顯示無法識(shí)別的動(dòng)作
Explain 顯示解釋的動(dòng)作
GesttureDown 顯示向下方向的手勢(shì)動(dòng)作
GesttureLeft 顯示向左方向的手勢(shì)動(dòng)作
GesttureRight 顯示向右方向的手勢(shì)動(dòng)作
GesttureUp 顯示向上方向的手勢(shì)動(dòng)作
GetAttention 顯示立正的動(dòng)作
GetAttentionContinued 顯示繼續(xù)立正的動(dòng)作
GetAttentionReturn 顯示繼續(xù)立正的動(dòng)作
Greet 顯示問候的動(dòng)作
Hearing_1
Hearing_2 顯示左右聆聽的動(dòng)作
Hearing_3
Hide 隱藏動(dòng)畫角色
Idle1_1 顯示舒展的動(dòng)作
Idle1_2 顯示向左傾的動(dòng)作
Idle1_3 顯示向右傾的動(dòng)作
Idle1_4 顯示向后傾的動(dòng)作
Idle1_5 顯示向前傾的動(dòng)作
Idle2_1 顯示帶耳機(jī)聽音樂的動(dòng)作
Idle2_2 顯示吃餅干的動(dòng)作
Idle3_1 顯示帶耳機(jī)聽音樂的動(dòng)作
Idle3_2 顯示瞌睡的動(dòng)作
Idle3_3 顯示帶耳機(jī)聽音樂的動(dòng)作
LookDown 顯示向下查看的動(dòng)作
LookDownBlink 顯示向下眨眼的動(dòng)作
LookDownLeft 顯示向左下方查看的動(dòng)作
LookDownLeftBlink 顯示向左下方眨眼的動(dòng)作
LookDownLeftReturn 顯示回返向左下方查看的動(dòng)作
LookDownRight 顯示向右下方查看的動(dòng)作
LookDownRightBlink 顯示向右下方眨眼的動(dòng)作
LookDownRightReturn 顯示回返向右下方查看的動(dòng)作
LookDownReturn 顯示回返向下方查看的動(dòng)作
LookLeft 顯示向左方查看的動(dòng)作
LookLeftBlink 顯示向左方眨眼的動(dòng)作
LookLeftReturn 顯示回返向左方查看的動(dòng)作
LookRight 顯示向右方查看的動(dòng)作
LookRightBlink 顯示向右方眨眼的動(dòng)作
LookRightReturn 顯示回返向右方查看的動(dòng)作
LookUp 顯示向上查看的動(dòng)作
LookUpBlink 顯示向上眨眼的動(dòng)作
LookUpLeft 顯示向左上方查看的動(dòng)作
LookUpLeftBlink 顯示向左上方眨眼的動(dòng)作
LookUpLeftReturn 顯示回返向左上方查看的動(dòng)作
LookUpRight 顯示向右上方查看的動(dòng)作
LookUpRightBlink 顯示向右上方眨眼的動(dòng)作
LookUpRightReturn 顯示回返向右上方查看的動(dòng)作
LookUpReturn 顯示回返向上方查看的動(dòng)作
MoveDown 顯示向下移動(dòng)的動(dòng)作
MoveLeft 顯示向左移動(dòng)的動(dòng)作
MoveRight 顯示向右移動(dòng)的動(dòng)作
MoveUp 顯示向上移動(dòng)的動(dòng)作
Pleaseed 顯示愉快的動(dòng)作
Process 顯示處理工作的動(dòng)作
Processing 顯示正在處理工作的動(dòng)作
Read 顯示閱讀的動(dòng)作
Readcontinued 顯示繼續(xù)閱讀的動(dòng)作
Reading 顯示正在閱讀的動(dòng)作
ReadReturn 顯示停止閱讀的動(dòng)作
Sad 顯示悲傷的動(dòng)作
Search 顯示查找的動(dòng)作
Searching 顯示正在查找的動(dòng)作
Show 顯示動(dòng)畫角色
StartListening 顯示開始聆聽的動(dòng)作
StopListening 顯示停止聆聽的動(dòng)作
Suggest 顯示建議的動(dòng)作
Surprised 顯示驚訝的表情
Think 顯示思考的表情
Thinking 顯示正在思考的表情
Uncertain 顯示不確定的動(dòng)作
Wave 顯示致意的動(dòng)作
Write 顯示寫的動(dòng)作
Writecontinued 顯示繼續(xù)寫的動(dòng)作
Writing 顯示正在寫的動(dòng)作
WritReturn 顯示停止寫的動(dòng)作
當(dāng)然,我們也可以從http://www.microsoft.com/msagent/downloads/developer.asp網(wǎng)頁單擊“Download the
Microsoft Agent Character Editor(1Mb exe)”和“Download the Microsoft Agent Linguistic Information
Sound Editing Tool(6.2Mb exe)”下載制作工具,親自制作自己所鐘愛的動(dòng)畫角色形象。
第二步設(shè)計(jì)應(yīng)用程序
在PowerBuilder中提供了OLE控件,以便PowerBuilder應(yīng)用程序能夠使用其它開發(fā)工具編寫的COM組件和ActiveX控件
在使用相關(guān)的COM組件和ActiveX控件先,須注冊(cè)相關(guān)的COM組件和ActiveX控件,在PowerBuilder注冊(cè)控件,可以在PowerBulider
開發(fā)環(huán)境中,插入OLE控件時(shí),選擇Regisiter New進(jìn)行注冊(cè)。
Agent控件的主要屬性如下表:
屬性 用途
Charactors 用于設(shè)置與控件相關(guān)聯(lián)的動(dòng)畫角色文件
Connected 用于判別控件是否與Agent服務(wù)器相連接
LanguageID 用于設(shè)置Agent所使用的語言,目前僅可設(shè)置為十六進(jìn)制的“409”,即“&H409”
Agent控件的主要方法如下表:
方法 用途
Load 用于初始化Agent控件,并加載動(dòng)畫角色數(shù)據(jù)文件
UnLoad 用于卸載動(dòng)畫角色數(shù)據(jù)文件
Show 用于顯示的Agent動(dòng)畫角色,并可通過參數(shù)控制動(dòng)畫角色的顯示速度
Hide 用于隱藏的Agent動(dòng)畫角色,并可通過參數(shù)控制動(dòng)畫角色的隱藏速度
StopAll 用于停止動(dòng)畫角色的所有動(dòng)作
Stop 用于停止動(dòng)畫角色的當(dāng)前動(dòng)作
MoveTo 用于移動(dòng)動(dòng)畫角色,可通過參數(shù)來設(shè)置移動(dòng)的坐標(biāo)和移動(dòng)的速度
Interrupt 用于中斷動(dòng)畫角色的動(dòng)畫,在執(zhí)行一些有持續(xù)性的動(dòng)畫動(dòng)作時(shí),如不
中斷該動(dòng)作即執(zhí)行下一個(gè)動(dòng)作,會(huì)產(chǎn)生異?,F(xiàn)象
Wait 用于在多個(gè)動(dòng)畫角色間實(shí)現(xiàn)相互之間的動(dòng)作協(xié)調(diào)
Play 用于執(zhí)行指定的動(dòng)畫動(dòng)作,可通過參數(shù)來設(shè)置動(dòng)畫類型
Speak 用于通過語音合成引擎,實(shí)現(xiàn)英語的語音合成輸出功能,即只需要輸入
英文字符串,Agent即可通過聲音輸出設(shè)備“說話”
Agent控件的主要事件如下表
事件 用途
Show 在Agent動(dòng)畫角色顯示時(shí)觸發(fā),可利用該事件將程序的主界面隱藏
Hide 在Agent動(dòng)畫角色隱藏時(shí)觸發(fā),可利用該事件將程序的主界面重新顯示
在PowerBuilder中實(shí)現(xiàn)的步驟如下
1、新建myexample.pbw的工作區(qū);
2、新建myexample.pbt的應(yīng)用目標(biāo),PowerBuilder會(huì)自動(dòng)建立一個(gè)pbl庫文件以便存放相關(guān)的PowerBuilder對(duì)象,并建立一個(gè)myexample
應(yīng)用程序?qū)ο螅?
3、新建窗口對(duì)象w_example,并在其上放置控件如下表:
控件 控件名稱
listbox lb_1
commandbutton cb_1
commandbutton cb_2
ole control ole_1(并插入對(duì)應(yīng)的Agent ActiveX控件)
4、新建菜單對(duì)象m_file,并添加相關(guān)菜單項(xiàng)如下表:
菜單名 菜單文本 菜單腳本
m_file 文件(&F)
m_fileopen 打開(&O) parentwindow.triggerevent("ue_fileopen")
m_bar1 -
m_fileexit 退出(&E) parentwindow.triggerevent("ue_fileexit")
5、將窗口對(duì)象w_example的menuid屬性設(shè)置為m_file
6、定義窗口w_example的實(shí)例變量如下:
privite:
boolean ib_flag
string is_animationname
7、編寫窗口w_example相關(guān)事件腳本:
open事件腳本如下:
long result,ll
if fileexists(GetCurrentDirectory ( )+"\peedy.acs")=false then
result=messagebox("提示“,"在程序當(dāng)前目錄下沒有動(dòng)畫角色文件",stop!)
ib_flag=false
close(this)
else
ib_flag=true
ole_1. O B J E C T.characters.load("CharacterID",GetCurrentDirectory ( )+"\peedy.acs")
ole_1. O B J E C T.characters("CharacterID").languageID=1033
ole_1. O B J E C T.characters("CharacterID").moveto(20,20)
ole_1. O B J E C T.characters("CharacterID").show()
ole_1. O B J E C T.characters("CharacterID").play("Wave")
ole_1. O B J E C T.characters("CharacterID").speak("Hello,Welcome to use The Character Animation Previewer Programm!")
ole_1. O B J E C T.characters("CharacterID").play("Reading")
lb_1.reset()
for ll=1 to upperbound(ole_1. O B J E C T.characters("CharacterID").animationnames)
lb_1.additem(ole_1. O B J E C T.characters("CharacterID").animationnames[ll])
next
lb_1.selectitem(1)
close事件腳本如下:
if ib_flag=true then
ole_1. O B J E C T.characters("CharacterID").hide()
ole_1. O B J E C T.characters.unload("CharacterID")
end if
自定義事件ue_fileopen的腳本如下:
string docname, named
integer value
value = GetFileOpenName("選擇動(dòng)畫角色文件",docname, named, "acs", "動(dòng)畫角色文件(*.acs),*.acs" )
IF value = 1 THEN
ole_1. O B J E C T.characters.unload("CharacterID")
ole_1. O B J E C T.characters.load("CharacterID",docname)
ole_1. O B J E C T.characters("CharacterID").languageID=1033
ole_1. O B J E C T.characters("CharacterID").moveto(20,20)
ole_1. O B J E C T.characters("CharacterID").show()
ole_1. O B J E C T.characters("CharacterID").speak("Hello!")
ole_1. O B J E C T.characters("CharacterID").play("congratulate")
ole_1. O B J E C T.characters("CharacterID").play("Wave")
cb_1.enabled=false
lb_1.reset()
for ll=1 to upperbound(ole_1. O B J E C T.characters("CharacterID").animationnames)
lb_1.additem(ole_1. O B J E C T.characters("CharacterID").animationnames[ll])
next
lb_1.selectitem(1)
ole_1. O B J E C T.characters("CharacterID").moveto(0,0)
lb_1.setfocus()
end if
自定義事件ue_fileexit的腳本如下:
close(this)
lb_1的clicked事件腳本如下:
cb_1.enabled=true
lb_1的doubleclicked事件腳本如下:
cb_1.triggerevent("clicked")
lb_1的getfocus事件如下:
cb_1.default=true
cb_1的clicked事件腳本如下:
ole_1. O B J E C T.characters("CharacterID").stop
this.title="演示動(dòng)畫角色動(dòng)作:"+lb_1.SelectedItem ( )
ole_1. O B J E C T.characters("CharacterID").play(lb_1.selecteditem())
cb_2的clicked事件腳本如下:
ole_1. O B J E C T.characters("CharacterID").stop()
8、編寫application對(duì)象open事件腳本如下:
open(w_example)