所属类别:编程
特别推荐:免费发布信息 承包关键词~~抢爆了!HOT!
Microsoft Agent 控 件 比Office 中 的 助 手 更 进 了 一 步, 它 提 供 的 动 画 人 物 不 仅 有 生 动、 有 趣 的 动 作, 而 且 还 能 通 过 声 卡、 麦 克 风 与 用 户 进 行 交 谈, 这 些 功 能 使 计 算 机 更 具 人 性 魅 力, 其 应 用 前 途 相 当 广 泛。Microsoft Agent 控 件 的 内 部 机 制 很 复 杂, 但 用VB 来 操 纵 它 却 是 异 乎 寻 常 的 方 便, 本 文 将 介 绍VB 6.0 调 用Microsoft Agent 控 件 的 基 本 方 法。1. 安 装Microsoft Agent 控 件
(1) 首 先 要 安 装Microsoft Agent 的 核 心 组 件 msagent.exe
(2) 接 着 要 安 装Lernout amp; Hauspie TruVoice Text-to-Speech Engine( 完 成 从 文 字 合 成 语 音 的 工 作) cgram.exe。
(3) 最 后 要 安 装 Microsoft Command and Control Speech Engine( 提 供 语 音 识 别 功 能) Actcnc.exe。
(4) 另 外 还 需 要Agnet 动 画 人 物 数 据 文 件, 在 本 文 中 使 用 了Genie.acs、Robby.acs 两 个 文 件。
上 述 文 件 均 可 从 http://www.microsoft.com/workshop/prog/agent 下 载。2. Microsoft Agent 控 件 的 初 始 化
先 把Microsoft Agent 控 件 添 加 到VB 的 控 制 工 具 条 上, 并 在 用 户 的Form 上 绘 制 该 控 件( 在 下 述 例 子 中, 其Name 属 性 设 为MyAgent)。 下 面 的 代 码 调 用IAgentCtlCharacters::Load() 方 法 装 入 一 个 动 画 人 物 的 数 据, 调 用IAgentCtlCharacter::Show()/Hide() 方 法 来 显 示/ 隐 藏 动 画 人 物。Const DATAPATH = "c:\"Dim Genie As IAgentCtlCharacterDim Robby As IAgentCtlCharacterDim GenieRequest1, GenieRequest2 As IAgentCtlRequestDim RobbyRequest1 As IAgentCtlRequestPrivate Sub Form_Load() ' 装 入 动 画 人 物 数 据, 其 中 第 一 个 参 数 为CharacterID MyAgent.Characters.Load "Genie", DATAPATH amp; "Genie.acs" MyAgent.Characters.Load "Robby", DATAPATH amp; "Robby.acs" ' 获 取 与CharacterID 相 对 应 的IAgentCtlCharacter 变 量 Set Genie = MyAgent.Characters("Genie") Set Robby = MyAgent.Characters("Robby") ' 显 示/ 隐 藏 动 画 人 物 Genie.Show Genie.HideEnd Sub3. Microsoft Agent 控 件 的 动 画 编 程
每 个 动 画 人 物 都 有 自 己 特 定 的 动 作, 例 如Genie 有 听、 看、 读、 写、 发 怒、 感 谢 等 数 十 种 动 画 形 态。 可 以 调 用IAgentCtlCharacter::play() 方 法 来 设 置 动 画 动 作。 为 了 在 多 个 动 画 人 物 之 间 协 调 它 们 的 动 作, 比 如 让Robby 等 待Genie 的 某 个 动 作 执 行 完 毕 后, 方 才 做 另 外 一 个 动 作, 这 时 可 采 用IAgentCtlCharacter::Wait() 方 法 来 实 现 同 步。 在 数 十 种 动 画 动 作 中 有 一 类 比 较 特 殊( 动 作 名 以"ing" 为 后 缀, 如"Searching"), 一 旦 执 行 便 循 环 播 放 一 段 动 画, 只 有 调 用IAgentCtlCharacter::Interrupt() 方 法 才 能 终 止。 示 例 代 码 如 下:Private Sub Command1_Click() Genie.Show ' 执 行 名 为"Suggest" 的 动 作 Genie.Play "Suggest"' 把Genie 移 动 到 座 标(200,200) 处, 用GenieRequest1 来 标 识 该 动 作 请 求 Set GenieRequest1 = Genie.MoveTo(200, 200)' 执 行 名 为"Searching" 的 循 环 动 画 动 作, 用GenieRequest2 来 标 识 该 动 作 请 求 Set GenieRequest2 = Genie.Play("Searching") ' Robby 等 待Genie 的MoveTo 方 法 执 行 完 毕, 方 才 显 示 Robby.Wait GenieRequest1 Robby.Show Robby.Play "Suggest" Robby.Play "read" Robby.Play "Congratulate" ' 由Robby 来 终 止Genie 的 循 环 动 画 动 作 Robby.Interrupt GenieRequest2 Genie.Play "write" Genie.Hide Robby.HideEnd Sub4. Microsoft Agent 控 件 的 语 音 合 成 功 能
Microsoft Agent 控 件 支 持 英 语 的 语 音 合 成 功 能, 只 需 输 入 句 子 的 文 字, 便 会 生 成 该 句 子 的 语 音 信 号 并 通 过 声 卡、 音 箱 播 放 出 来。 语 音 合 成 功 能 通 过 调 用IAgentCtlCharacter::Speak() 方 法 来 实 现。 输 出 中 文 时 不 能 用 上 述 方 法, 只 能 用WAV 文 件 代 替, 给Speak() 方 法 的 第 一 个 参 数 传 递 文 字 气 球 中 包 含 的 文 字, 给 第 二 个 参 数 传 递 一 个WAV 文 件 路 径。 同 样 为 同 步 多 个 动 画 人 物 的 语 音 输 出 也 必 须 使 用IAgentCtlCharacter::Wait() 方 法。 目 前Microsoft Agent 控 件 还 不 支 持 多 个 人 物 的 声 音 混 合 效 果。 具 体 实 现 代 码 如 下:Private Sub Command2_Click() Genie.MoveTo 100, 200 Genie.Show Genie.Play "Greet"' Speak() 方 法 的 第 一 个 参 数 即 为 需 进 行 语 音 合 成 的 句 子 文 字 Genie.Speak "I am Genie, your most humble and loyal servant." Genie.Speak "Where is Robby?" Set GenieRequest1 = Genie.Play("LookLeft") ' 等Genie 的"LookLeft" 执 行 以 后, 再 执 行Robby 的 动 作 Robby.Wait GenieRequest1 Robby.MoveTo 250, 200 Robby.Show Robby.Play "Greet" Robby.Speak "Sorry for the delay."Set RobbyRequest1 =Robby.Speak("Traffic is really busy today on the Information Superhighway.") ' 等Robby 讲 完 了,Genie 再 讲 Genie.Wait RobbyRequest1 Genie.Play "LookLeftReturn"Genie.Speak "Welcome to the release of Microsoft Agent, the new ActiveX technology that supports interactive characters"' 输 出 中 文 语 音," 欢 迎 光 临" 的 中 文 语 音 包 含 在welcome.wav 中 Genie.Speak " 欢 迎 光 临", "c:\welcome.wav" Genie.Hide Robby.HideEnd Sub5. Microsoft Agent 控 件 的 语 音 识 别 功 能
Microsoft Agent 控 件 具 有 语 音 识 别 能 力, 用 户 可 以 向 动 画 人 物 发 出 语 音 命 令( 同 时 按 住Scroll Lock 键)。Microsoft Agent 控 件 为 每 个Agent 动 画 人 物 提 供 一 个 特 殊 物 命 令 窗 口, 用 以 显 示 该 动 画 人 物 能 够 接 受 的 所 有 语 音 命 令。 该 命 令 窗 口 中 的 命 令 不 能 用 鼠 标 或 键 盘 来 选 取, 只 能 通 过 语 音。 可 以 用IAgentComands::Add() 方 法 来 为 命 令 窗 口 添 加 自 定 义 命 令。 第 一 个 参 数 是 命 令 的 标 识 符ID, 第 二 个 参 数 是 该 命 令 在 命 令 窗 口 中 的 显 示 标 签, 第 三 个 参 数 是 该 命 令 对 应 的 语 音 识 别 句 子。 当 用 户 通 过 麦 克 风 向 动 画 人 物 发 出 命 令 时 会 激 发IAgent 的Command 事 件, 可 以 编 写 一 个 接 收Command 事 件 的 过 程 来 完 成 与 语 音 命 令 相 对 应 的 任 务。Private Sub Command3_Click() Static initialized As Boolean ' 添 加 自 定 义 命 令 If Not initialized Then Genie.Commands.Add "Word", "Run Word", "word", True, True Genie.Commands.Add "Time", "What time is it?", "What time is it?", True, True Genie.Commands.Add "Bigger", "Bigger", "Bigger", True, True Genie.Commands.Add "Smaller", "Smaller", "Smaller", True, True initialized = True End If Genie.Show Genie.Speak "Can I help you?"End SubPrivate Sub MyAgent_Command(ByVal UserInput As Object) Select Case UserInput.Name Case "Time" ' 当 听 到"What time is it?" 后 回 答 当 前 时 间 Genie.Speak "The time is " amp; Time Case "Word" ' 当 听 到"word" 后, 便 运 行MS Word Genie.Speak "Yes,sir!" Shell "d:\winword\winword.exe", vbNormalFocus Case "Bigger" ' 当 听 到"bigger" 后,Genie 会 放 大 Genie.Width = Genie.Width * 1.5 Genie.Height = Genie.Height * 1.5 Case "Smaller" ' 当 听 到"samller" 后,Genie 会 缩 小 Genie.Width = Genie.Width / 1.5 Genie.Height = Genie.Height / 1.5 End SelectEnd Sub/*////////////////////////////////////////////////////////////////////*//* 附 完 整 源 程 序 agent.frm */VERSION 5.00Object = "{F5BE8BC2-7DE6-11D0-91FE-00C04FD701A5}#1.5#0"; "AGENTCTL.DLL"Begin VB.Form Form1 Caption = "Form1" ClientHeight = 3195 ClientLeft = 60 ClientTop = 345 ClientWidth = 4680 LinkTopic = "Form1" ScaleHeight = 3195 ScaleWidth = 4680 StartUpPosition = 3 'Windows Default Begin VB.CommandButton Command3 Caption = "Command3" Height = 615 Left = 2880 TabIndex = 2 Top = 360 Width = 1095 End Begin VB.CommandButton Command2 Caption = "Command2" Height = 615 Left = 1320 TabIndex = 1 Top = 360 Width = 1095 End Begin VB.CommandButton Command1 Caption = "Command1" Height = 615 Left = 120 TabIndex = 0 Top = 360 Width = 855 End Begin AgentObjectsCtl.Agent MyAgent Left = 360 Top = 2520 EndEndAttribute VB_Name = "Form1"Attribute VB_GlobalNameSpace = FalseAttribute VB_Creatable = FalseAttribute VB_PredeclaredId = TrueAttribute VB_Exposed = FalseOption ExplicitConst DATAPATH = "c:\"Dim Genie As IAgentCtlCharacterDim Robby As IAgentCtlCharacterDim GenieRequest1, GenieRequest2 As IAgentCtlRequestDim RobbyRequest1 As IAgentCtlRequestPrivate Sub Command1_Click() Genie.Show Genie.Play "Suggest" Set GenieRequest1 = Genie.MoveTo(200, 200) Set GenieRequest2 = Genie.Play("Searching") Robby.Wait GenieRequest1 Robby.Show Robby.Play "Suggest" Robby.Play "read" Robby.Play "Congratulate" Robby.Interrupt GenieRequest2 Genie.Play "write" Genie.Hide Robby.HideEnd SubPrivate Sub Command2_Click() Genie.MoveTo 100, 200 Genie.Show Genie.Play "Greet" Genie.Speak "I am Genie, your most humble and loyal servant." Genie.Speak "Where is Robby?" Set GenieRequest1 = Genie.Play("LookLeft") Robby.Wait GenieRequest1 Robby.MoveTo 250, 200 Robby.Show Robby.Play "Greet" Robby.Speak "Sorry for the delay."Set RobbyRequest1 = Robby.Speak("Traffic is really busy today on the Information Superhighway.") Genie.Wait RobbyRequest1 Genie.Play "LookLeftReturn" Genie.Speak "Welcome to the release of Microsoft Agent, the newActiveX technology that supports interactive characters" Genie.Speak " 欢 迎 光 临", "c:\welcome.wav" Genie.Hide Robby.HideEnd SubPrivate Sub Command3_Click() Static initialized As Boolean If Not initialized Then Genie.Commands.Add "Word", "Run Word", "word", True, True Genie.Commands.Add "Time", "What time is it?", "What time is it?", True, True Genie.Commands.Add "Bigger", "Bigger", "Bigger", True, True Genie.Commands.Add "Smaller", "Smaller", "Smaller", True, True initialized = True End If Genie.Show Genie.Speak "Can I help you?"End SubPrivate Sub Form_Load() MyAgent.Characters.Load "Genie", DATAPATH amp; "Genie.acs" MyAgent.Characters.Load "Robby", DATAPATH amp; "Robby.acs" Set Genie = MyAgent.Characters("Genie") Set Robby = MyAgent.Characters("Robby") Genie.Show Genie.HideEnd SubPrivate Sub MyAgent_Command(ByVal UserInput As Object) Select Case UserInput.Name Case "Time" Genie.Speak "The time is " amp; Time Case "Word" Genie.Speak "Yes,sir!" Shell "d:\winword\winword.exe", vbNormalFocus Case "Bigger" Genie.Width = Genie.Width * 1.5 Genie.Height = Genie.Height * 1.5 Case "Smaller" Genie.Width = Genie.Width / 1.5 Genie.Height = Genie.Height / 1.5 End SelectEnd Sub
相关信息· 让你的Firefox标签页使用3D特效
· 如何实现MSSQL7.0、Sysbase、Access向Oracle8i移植
· 双绞线的制作和直联线交叉线区别
· 硬盘常见故障及排除详解
65326
85072
