VB 版 (精华区)

发信人: bloom (├┝┞┟┠┢┣), 信区: VB
标  题: 浅 述Agent 控 件 
发信站: 哈工大紫丁香 (2000年09月07日12:25:25 星期四), 站内信件

浅 述Agent 控 件
北 京 师 范 大 学
陈 天(chentian@263.net)
----------------------------------------------------------------------------
----
一、Agent 的 功 能 与 特 点
----Agent 控 件 的 动 画 人 物 最 显 著 的 特 点 就 是 造 型 美 观, 它 取 消
 了 原 来Office 助 手 的 方 形 窗 口, 采 用 不 规 则 窗 口, 使 人 物 形 象
 更 加 丰 满 生 动。Agent 的 人 物 可 以 分 为 两 部 分: 一 是 精 灵 本 身,
 它 可 以 通 过“ 听 觉” 或 者 由 程 序 控 制 摆 出 各 种 不 同 的 姿 势, 
如 高 兴、 鼓 掌、 再 见 等; 另 一 部 分 是 被 称 作Balloon 的 语 言 提 示 
部 分, 它 可 以 以 漫 画 人 物 的 方 式 在 精 灵 上 方 显 示 出Agent 所 说 
的 话。 微 软 已 经 提 供 了4 种 人 物 造 型, 它 们 是Genie、Merlin、Robby、
 Peedy( 如 下 图 所 示)。
----Agent 的 另 一 大 特 色 是 语 音 合 成 和 语 音 识 别 功 能。 只 要 在 系
 统 中 装 入 了L &H TruVoice Text -To -Speech Engine 和Microsoft Speech R
ecognition Engine v4.0, 在 你 的 程 序 中 输 入 任 何 一 句 话, 如“Good M
orning,Sir!”, 它 就 能 用 相 当 完 美 的 语 速 朗 读 出 来, 你 甚 至 可 以
 用 它 学 习 纯 正 的 美 国 英 语。 你 还 可 以 指 定 它 自 带 的8 种 声 音 
风 格 的 任 何 一 种。 除 英 语 外,Agent 核 心 程 序 目 前 还 支 持 简 体 中
 文、 繁 体 中 文、 法 文、 德 文、 日 文 等10 个 语 种。
二、 对Agent 控 件 编 程
----Agent 控 件 可 以 使 用 在 任 何 编 程 语 言 和 网 页 中, 在 编 程 语 言
 中 使 用Agent 比 较 简 单, 而 且 与 在 网 页 中 的 使 用 方 法 差 不 多, 
这 里 只 对 网 页 中 的 使 用 作 一 简 单 的 介 绍。
----1. 在 网 页 中 使 用Agent 控 件
----在 网 页 中 使 用Agent 控 件, 需 要 在< HEAD > 或 者< BODY > 中 间 用 到
< OBJECT > 标 签, 指 明 该 控 件 的CLSID。 另 外, 还 可 以 加 上CODEBASE 参
 数 来 指 明Agent 控 件 的 安 装 路 径 和 版 本 号。 如 果 系 统 安 装 了IE3
.0 以 上 版 本, 当 浏 览 含 有Agent 控 件 的 网 页 时, 浏 览 器 会 询 问 是
 否 下 载 该 控 件。 下 面 这 个 例 子 是 用CODEBASE 参 数 告 诉 浏 览 器 如
 何 自 动 下 载 英 文2.0 版 的Agent 控 件。< OBJECT classid= “clsid: D45FD3
1B -5C6E -11D1 -9EC1 -00C04FD7081F"CODEBASE = “ # VERSION=2,0,0,0" id=
Agent >< /OBJECT >
----当 然, 也 可 以 让Agent 控 件 从 你 的 服 务 器 上 安 装, 这 样 你 就 
需 要 有 一 个 自 解 压 的MSAGENT.EXE 文 件, 并 在 你 的 主 页 上 加 上 如 
下 代 码:
< OBJECT classid=“clsid: D45FD31B
           -5C6E -11D1 -9EC1 -00C04FD7081F"
CODEBASE = “http://your server/msagent.exe
               #VERSION=2,0,0,0"
id=Agent >< /OBJECT >
----为 了 支 持 其 他 语 言 版 本 的Agent 控 件, 你 可 以 用< OBJECT > 标 签
 来 指 明 语 言 包。 语 言 包 可 以 从 微 软 站 点 获 得。 要 使 用Agent, 首
 先 要 使 用Load 方 法 来 加 载 一 个 动 画 人 物,Load 方 法 可 以 从 本 地
 或 者 远 程 服 务 器 上 加 载 该 人 物。 加 载 以 后, 便 可 以 对 他 的 事
 件、 方 法、 属 性 进 行 编 程 了。 只 要 有 一 个 客 户 连 接, 服 务 端 的
Agent 服 务 将 一 直 持 续。 但 是 当 浏 览 者 关 闭 浏 览 器 或 者 转 入 其
 他 网 页 时,Agent 精 灵 将 从 浏 览 者 屏 幕 上 消 失。 为 了 使Agent 能 够
 在 你 的 几 个 网 页 中 持 续 出 现, 你 可 以 使 用HTML 的 页 框(Frame),
 将< OBJECT > 标 签 置 于 父 页 中, 用JavaScript 或 者VBScript 在 子 网 页 
中 调 用 父 网 页 的Script 函 数。
    用VBScript 编 程 语 法 格 式 如 下:
      agent[.object].Method parameter, [parameter]
      agent[.object].Property = value
    对 事 件 编 程, 可 以 用 如 下 的 格 式:
    Sub agent_event (ByVal parameter[,ByVal parameter])
       statements...
    End Sub
----例 如, 用VBScript (2.0 或 更 高 版 本) , 你 能 够 检 验Microsoft Agent
 控 件 是 否 已 经 在 客 户 端 安 装。 下 面 这 个 例 子 演 示 了 如 何 检 查
 是 否 已 经 安 装 了Agent 控 件 而 提 示 避 免 下 载 该 控 件。
< SCRIPT LANGUAGE=VBSCRIPT >
If HaveAgent() Then
document.write “< H2 align=center >Found< /H2 >"
Else
document.write“< H2 align=center >Not Found< /H2 >"
End If
Function HaveAgent()
   Dim agent
   HaveAgent = False
   On Error Resume Next
   Set agent = CreateObject(“Agent.Control.1")
   HaveAgent = IsObject(agent)
End Function
< /SCRIPT >
----2. 语 音 功 能
----要 让 你 的 精 灵 具 备 语 音 功 能, 必 须 首 先 安 装 语 音 识 别 引 擎
 和 文 本 - 语 音 转 化 引 擎(TTS)。 为 使 你 的 应 用 程 序 或 网 页 支 
持 语 音 输 入 功 能, 首 先 要 建 立 一 个Command 对 象, 并 且 设 置 它 的
Voice 属 性。 当 用 户 点 击“Listen” 纽 或 者 程 序 中 调 用 Listen 函 数 
后,Agent 控 件 将 自 动 加 载 语 音 识 别 引 擎, 缺 省 的 LanguageID 将 决
 定 加 载 哪 种 引 擎。 如 果 你 想 加 载 一 个 特 殊 的 引 擎, 可 以 使 用
SRModeID 属 性。
----除 语 音 识 别 外,Agent 的 另 一 个 有 用 的 功 能 是 文 本 - 语 音 转
 化。 用Speak 方 法 可 以 实 现 这 种 功 能。 同 语 音 识 别 一 样,Agent 首
 先 加 载 精 灵 的LanguageID。 如 果 精 灵 包 括 一 个 特 殊 的TTS 引 擎 并 
且 该 引 擎 可 以 使 用 这 个LanguageID, 那 么Agent 将 加 载 这 个 引 擎, 否
 则, 将 加 载 第 一 个 符 合LanguageID 的TTS 引 擎。 你 可 以 用 TTSModeID 
来 确 定 一 个 引 擎。
----加 载TTS 引 擎 后, 你 就 可 以 用Speak 方 法 来 合 成 语 音 了。 如:
    Genie.Speak “Hello,Word!"
----你 甚 至 还 可 以 通 过 一 些 特 殊 的 声 音 控 制 符 号 让Agent 能 够 唱
 歌。
----3. Agent 对 象 及 其 重 要 属 性
----Agent 对 象 是Agent 控 件 的 核 心 对 象, 下 面 是Agent 对 象 的 一 些 
重 要 的 方 法 和 属 性:
----Connected 属 性
----返 回 当 前Agent 对 象 是 否 与Microsoft Agent 服 务 器 相 连。
----表 达 式
agent.Connected [ = boolean]
----很 多 情 况 下, 控 件 将 自 动 连 接Microsoft Agent 服 务 器。 但 是, 
如 果 你 想 在 运 行 时 创 建Agent 控 件, 你 必 须 显 式 地 调 用Connected 
属 性 来 与 服 务 器 连 接。 例 如, 在VB 中, 用CreateObject 或 者New 创 建
 一 个 实 例 后, 并 没 有 自 动 与 服 务 器 连 接, 必 须 像 如 下 示 例 那
 样 与 服 务 器 相 连:
      Dim MyAgent as Agent
      Set MyAgent = New Agent
      MyAgent.Connected = True
      MyAgent.Characters.Load “Genie", “ Genie.acs"
      MyAgent.Characters(“Genie").Show
----如 果 想 在VB 中 能 对 事 件 编 程, 你 可 以 加 上WithEvents 关 键 字 来
 实 现:
      Dim WithEvents MyAgent as Agent
      Set MyAgent = New Agent
----用WithEvents 创 建 的 对 象 实 例 将 自 动 与 服 务 器 相 连, 所 以 就 
不 必 使 用 Connected 属 性 了。
----Character 属 性
----Character 属 性 是Agent 的 核 心 属 性 之 一。 下 面 是Character 属 性 的
 一 些 方 法 和 属 性:
----Load 方 法
----加 载 一 个Character 对 象 进 入Characters 集 合。
----语 法
   agent.Characters.Load “CharacterID", Provider
----CharacterID 是Character 的 名 字, 如 微 软 的 Genie,Peedy 等,Provider 
是 角 色 文 件 的 路 径。Agent 既 支 持 从 单 结 构 角 色 文 件(.ACS 角 色 
数 据 与 动 画 数 据 在 一 个 文 件 中)Load 又 支 持 从 分 离 结 构 角 色 文
 件( *.ACF 这 种 结 构 将 角 色 数 据 存 入 *.ACF 中, 将 动 画 数 据 存 
入 *.ACA 中) 中Load。 用ACS 时,ACS 文 件 存 在 本 地 硬 盘 或 者 网 络 上
。 用ACF 文 件 时, 是 从 动 画 文 件 中 加 载 单 个 动 画, 主 要 用 于 网 
络 环 境, 使 用HTTP 协 议。 使 用ACS 文 件 时 用Load 方 法 来 加 载 动 画,
 而 用ACF 文 件 时 用Get 方 法 加 载 动 画。Load 方 法 不 支 持HTTP 协 议。 
不 过ACF 有 费 用, 所 以 一 般 使 用ACS 文 件 的 情 况 居 多。 如 果 非 要 
使 用 免 费 的ACF, 用 Load(“http://agent.microsoft.com/characters/v2/genie
/genie.acf") 就 可 以 了。
----Get 方 法
----为 指 定 的 角 色 人 物 返 回 指 定 的 动 画 数 据。
----语 法
agent.Characters (“CharacterID").Get Type, Name, [Queue]
----Type 是 一 个 必 需 的 字 符 串 参 数, 用 于 指 明 所 要 求 的 数 据 类
 型。 它 可 以 使 用 三 种 数 据 类 型:“Animation" 角 色 的 动 画 数 据,“
State" 角 色 的 状 态 数 据,“WaveFile" 角 色 的 声 音 数 据。Name 是 动 画
 名 称 字 符 串, 可 用 的 名 称 有:“Gesturing"、 “GesturingDown"、“Gest
uringLeft" 等。
----备 注:
----如 果 你 使 用HTTP 协 议 加 载 角 色, 你 在 使 用Play 方 法 之 前 必 须
 使 用Get 来 得 到 动 画 数 据。 如 果 使 用ACS 文 件 你 不 能 使 用Get 方 法

----Interrupt 方 法
----中 断 指 定 角 色 的 动 画。
----语 法
agent.Characters (“CharacterID").Interrupt Request
----备 注
----下 面 是 一 个 有 关Interrupt 的 例 子, 演 示 了 Genie 和Robby 的 会 话
 过 程。
   Dim GenieRequest as Object
   Dim RobbyRequest as Object
   Dim Genie as Object
   Dim Robby as Object
   Sub FormLoad()
      MyAgent1.Characters.Load “Genie", “Genie.acs"
      MyAgent1.Characters.Load “Robby", “Robby.acs"
      Set Genie = MyAgent1.Characters (“Genie")
      Set Robby = MyAgent1.Characters (“Robby")
      Genie.Show
      Genie.Speak “Just a moment"
      Set GenieRequest = Genie.Play (“Processing")
      Robby.Show
      Robby.Play “confused"
      Robby.Speak “Hey, Genie. What are you doing?"
      Robby.Interrupt GenieRequest
      Genie.Speak “I was just checking on something."
   End Sub
----Play 方 法
----这 是 一 个 最 重 要 的 方 法, 用 于 演 示 指 定 的 动 画 动 作。
----语 法
    agent.Characters
 (“CharacterID").Play “AnimationName"
----Speak 方 法
----“ 说 出” 指 定 文 本 或 者 声 音 文 件。
----语 法
    agent.Characters (“CharacterID").Speak [ Text ], [ Url ]
----Agent 编 程 示 例 请 参 阅 http://202.112.83.73/agent/index.htm。

--
├┝┞┟┠┢┣◣◢
               ∣
             ▆▆▆    
              ▇▇            

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.170.208]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:207.295毫秒