隨筆 - 154  文章 - 60  trackbacks - 0
          <2008年3月>
          2425262728291
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          聲明:

          該blog是為了收集資料,認識朋友,學習、提高技術,所以本blog的內容除非聲明,否則一律為轉載!!

          感謝那些公開自己技術成果的高人們!!!

          支持開源,尊重他人的勞動!!

          常用鏈接

          留言簿(3)

          隨筆分類(148)

          隨筆檔案(143)

          收藏夾(2)

          其他

          學習(技術)

          觀察思考(非技術)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          該文被n多網站轉載,沒找到原始出處!

          使用過office xp、金山毒霸和瑞星殺毒軟件的朋友,一定會對程序中的人性化的動畫角色留下深刻印象,這完全歸功于微軟推出的Agent(“代理”)技術,Agent采用COM技術,使用ActiveX控件方式,支持現在流行的各種開發工具,不僅可以實現文本的朗讀,而且可識別用戶的語音命令,在應用程序和HTML文件中得到廣泛的使用。
          下面我們以PowerBuilder 8.0為開發工具來編制一個小實用程序,一步步說明其實現方法:
          第一步從Internet網上下載Agent插件,并安裝在計算機上,這是開發的前期準備工作:
          這些插件來源于微軟公司的相關網站,下載的網址為:http://www.microsoft.com/msagent/downloads/user.asp,連接使用該網頁:
          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",要實現語音朗讀,必須安裝,當前版本支持英語。
          4、再其次單擊(先選擇"Doadload the Microsoft Speech Recognition Engine(6Mb exe)”)下載并安裝語音識別引擎,其文件名為“Actcnc.exe",要實現語音命令識別,必須安裝,當前版本支持英語。
          5、最后單擊“Download selected character"下載安裝要用到的動畫角色文件,在這里我們下載微軟公司網站所提供的動畫角色文件,主要包括Genie(妖怪、鬼)、Robby(機器人)、Merlin、Peedy(睡衣)共四種動畫角色,專無管教供7^@供|Q{9iL&G育它們不但有豐富的行為動作,而且具有語言功能,其對應的文件名分別為Genie.acs、Robby.acs、Merlin.acs、Peedy.acs。這些Agent角色的常用動畫動作,通常用含有相同意義的英文單詞字符來標識,如下表所示,以下所述編程實例即演示它們分別所產生的動作效果。
          常量   相關動作
          Acknowledge  顯示承認、答謝的動作
          Alert   顯示警告的動作
          Announce                  顯示宣布、
          ?gZ網Fj~r無Wk垠@j{
          通告的工作
          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  顯示停止寫的動作
          當然,我們也可以從http://www.microsoft.com/msagent/downloads/developer.asp網頁單擊“Download the
          Microsoft Agent Character Editor(1Mb exe)”和“Download the Microsoft Agent Linguistic Information
          Sound  Editing Tool(6.2Mb exe)”下載制作工具,親自制作自己所鐘愛的動畫角色形象。
          第二步設計應用程序
              在PowerBuilder中提供了OLE控件,以便PowerBuilder應用程序能夠使用其它開發工具編寫的COM組件和ActiveX控件
          在使用相關的COM組件和ActiveX控件先,須注冊相關的COM組件和ActiveX控件,在PowerBuilder注冊控件,可以在PowerBulider
          開發環境中,插入OLE控件時,選擇Regisiter New進行注冊。
              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控件的主要事件如下表
          事件    用途
          Show    在Agent動畫角色顯示時觸發,可利用該事件將程序的主界面隱藏
          Hide    在Agent動畫角色隱藏時觸發,可利用該事件將程序的主界面重新顯示
          在PowerBuilder中實現的步驟如下
          1、新建myexample.pbw的工作區;
          2、新建myexample.pbt的應用目標,PowerBuilder會自動建立一個pbl庫文件以便存放相關的PowerBuilder對象,并建立一個myexample
          應用程序對象;
          3、新建窗口對象w_example,并在其上放置控件如下表:
          控件    控件名稱
          listbox   lb_1
          commandbutton   cb_1
          commandbutton   cb_2
          ole control   ole_1(并插入對應的Agent ActiveX控件)
          4、新建菜單對象m_file,并添加相關菜單項如下表:
          菜單名    菜單文本  菜單腳本
          m_file    文件(&F)   
           m_fileopen  打開(&O)  parentwindow.triggerevent("ue_fileopen")
           m_bar1   -
                 m_fileexit  退出(&E)  parentwindow.triggerevent("ue_fileexit")
          5、將窗口對象w_example的menuid屬性設置為m_file
          6、定義窗口w_example的實例變量如下:
          privite:
          boolean ib_flag
          string is_animationname
          7、編寫窗口w_example相關事件腳本:
          open事件腳本如下:
          long result,ll
          if fileexists(GetCurrentDirectory ( )+"\peedy.acs")=false then
             result=messagebox("提示“,"在程序當前目錄下沒有動畫角色文件",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("選擇動畫角色文件",docname, named, "acs", "動畫角色文件(*.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="演示動畫角色動作:"+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對象open事件腳本如下:
          open(w_example)
          posted on 2008-03-12 10:23 lk 閱讀(305) 評論(0)  編輯  收藏 所屬分類: other
          主站蜘蛛池模板: 商水县| 新安县| 彭山县| 云阳县| 琼海市| 双桥区| 阿合奇县| 沈丘县| 竹山县| 高要市| 武隆县| 兰考县| 望奎县| 元朗区| 仙游县| 怀安县| 陆河县| 天长市| 永善县| 霍州市| 招远市| 阿克苏市| 张家港市| 黔南| 宣城市| 苍溪县| 汉沽区| 铁岭市| 濮阳市| 神木县| 丰原市| 沈阳市| 五常市| 乌拉特后旗| 越西县| 青州市| 石家庄市| 兰坪| 德格县| 淮南市| 银川市|