转:
使用过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所示:
"工具"--"菜单编辑器"编辑表单菜单:
其次编写程序代码:在窗体设计完毕后,切换至代码输入窗体,有关过程代码如下所示:

解决方案 »

  1.   

    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 SubPrivate Sub CommandStop_Click()
    VarCharacter.Stop
    End SubPrivate Sub Exit_Click()
    Unload Me
    End SubPrivate 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 SubPrivate Sub ListBoxA_Click()
    Me.CommandPlay.Enabled = True
    End SubPrivate Sub ListBoxA_DblClick()
    Call CommandPlay_Click
    End SubPrivate Sub ListBoxA_GotFocus()
    Me.CommandPlay.Default = TrueEnd SubPrivate 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
    我换了个方法:正确的完全代码在下面
      

  2.   

    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 SubPrivate Sub CommandStop_Click()
    VarCharacter.Stop
    End SubPrivate Sub Exit_Click()
    Unload Me
    End SubPrivate 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 SubPrivate Sub ListBoxA_Click()
    Me.CommandPlay.Enabled = True
    End SubPrivate Sub ListBoxA_DblClick()
    Call CommandPlay_Click
    End SubPrivate Sub ListBoxA_GotFocus()
    Me.CommandPlay.Default = TrueEnd SubPrivate 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
      

  3.   

    莫姐????是个PLMM阿???、嘿嘿····
      

  4.   

    牛牛....你幹嘛,http://expert.csdn.net/Expert/topic/2922/2922046.xml?temp=.8650019
    請參考一下你以前講的話。這次偶散分,你沒有來噢
      

  5.   

    非常感谢,我这里收集了五十多个角色文件呢。
    问题是*.RM,*.MP3 格式的语音文件对不上口型,不想用第三方的控件转换为*.WAV格式。
    无论如何,非常感谢,过了节送你100分,祝节日愉快!!!!!
      

  6.   

    楼主  这好象是《csdn开发高手》的的内容嘛我想问一下  如果我想做成Office助手那种可以交互式的  怎么做啊
      

  7.   


    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(野性的呼唤)   
    节日愉快
    呵呵,我当初并没想着”索贿“的,一个信念"知识共享"。。