科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件在C#中使用微软AGENT之TTS

在C#中使用微软AGENT之TTS

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

微软Agent API能够提供卡通角色的显示,另外,它还可以支持语音识别,因此应用软件可以对语音命令作出反应

作者:刘彦青 来源:yesky 2007年11月14日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
语音应用程序的编程接口

  微软语音应用程序编程接口在Win32(Windows 95、Windows NT)下使用了OLE组件对象模式(COM)架构,微软的Agent架构在合成语音输出中使用了微软语音应用程序编程接口(SAPI),还使用SAPI支持语音输入(语音识别SR或文本-语音转换TTS)。微软的Agent定义了让应用程序访问其服务的接口,使得应用程序能够控制角色动画、支持用户输入事件,指定输出方式。

  角色窗口

  在微软Agent应用程序中,卡通角色是在它们各自的窗口中被显示的,这些窗口总是出现在Z轴顺序的最顶端。用户可以通过鼠标左键拖动角色移动角色所在的窗口,角色的图像随着指针而移动。

  说话汽球圈

  除了语音输出外,动画角色还支持以卡通类型说话汽球圈形式的文字字幕,角色说话时,所说的文字就出现在汽球圈儿中,当说完时,汽球圈也就不见了。

  在互联网网页中使用微软AGENT

 要在互联网网页中使用微软Agent服务,可以在网页中的或元素中使用HTML标记,指定控制的CLSID(类标识符),另外,还需要使用CODEBASE参数指定微软Agent的安装文件的位置和版本号。
我们可以使用Vbscript、JavaScript和JScript在互联网网页中使用微软Agent。


图1


  在.NET架构中使用微软AGENT

  微软Agent不是以ActiveX控制DLL的形式提供的。要在.NET中使用它,可以使用由.NET框架SDK提供的AxImp.exe工具:

  AxImp -->> ActiveX控制-Win窗体组合体生成器 

   Syntax: AxImp [/? | [[/source] OCXName]]

  Aximp agentctl.dll

  上面的命令生成二个文件:AxAgentObjects.dll和AgentObjects.dll。通过使用这二个文件,我们就可以在.NET中使用Agent了。

  C#中的微软Agent:

  要在C#中使用微软Agent,我们必须在程序中添加二个DLL文件:AxAgentObjects.dll和AgentObjects.dll。加载动画角色的代码是相当简单的:

AxAgent.Characters.Load("Genie",(object)"C:/Windows/Msagent/chars/GENIE.acs");
Character = AxAgent.Characters["Genie"];
file://将语言设置为美国英语
Character.LanguageID = 0x409;
file://该行代码显示角色
Character.Show(null);

  让角色说话的代码如下所示:

   Character.Speak ("Welcome you sir VISIT www.onlinecsharpteach.netfirms.com ",null);

  下面我们来看一个例子:

  The Example:

using System;
using System.Drawing;
using System.WinForms;
using AgentObjects;

public class Hello: Form
{
private System.ComponentModel.Container components;
private System.WinForms.Button button2;
private System.WinForms.Button button1;
private System.WinForms.TextBox textBox1;
private AxAgentObjects.AxAgent AxAgent;


private IAgentCtlCharacterEx Character;

public Hello()
{
InitializeComponent();
}

public static void Main(string[] args)
{
Application.Run(new Hello());
}

private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.button1 = new System.WinForms.Button();
this.button2 = new System.WinForms.Button();
this.textBox1 = new System.WinForms.TextBox();
this.AxAgent = new AxAgentObjects.AxAgent();


AxAgent.BeginInit();

button2.Click += new System.EventHandler(button2_Click);


button1.Location = new System.Drawing.Point(88, 208);
button1.BackColor =
(System.Drawing.Color)System.Drawing.Color.FromARGB((byte)255, (byte)128, (byte)128);
button1.Size = new System.Drawing.Size(152, 32);
button1.TabIndex = 1;
button1.Text = "Load character";

button2.Location = new System.Drawing.Point(120, 240);
button2.BackColor =
(System.Drawing.Color)System.Drawing.Color.FromARGB((byte)255, (byte)128, (byte)128);
button2.Size = new System.Drawing.Size(96, 24);
button2.TabIndex = 2;
button2.Text = "SPEAK";

textBox1.Location = new System.Drawing.Point(48, 8);
textBox1.Text = " ";
textBox1.Multiline = true;
textBox1.TabIndex = 0;
textBox1.Size = new System.Drawing.Size(248, 200);
textBox1.BackColor =
(System.Drawing.Color)System.Drawing.Color.FromARGB((byte)255, (byte)128, (byte)128);
this.Text = "MSAGENT DEMO";
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.WindowState = System.WinForms.FormWindowState.Maximized;
this.BackColor =
(System.Drawing.Color)System.Drawing.Color.FromARGB((byte)255, (byte)192, (byte)192);
this.ClientSize = new System.Drawing.Size(344, 301);

this.Controls.Add(button2);
this.Controls.Add(button1);
this.Controls.Add(textBox1);
this.Controls.Add(AxAgent);
button1.Click += new System.EventHandler(button1_Click);
AxAgent.EndInit();
}

protected void button2_Click(object sender, System.EventArgs e)
{
if(textBox1.Text.Length == 0)
return;
Character.Speak(textBox1.Text, null);
}
protected void button1_Click(object sender, System.EventArgs e)
{

OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.AddExtension = true;
openFileDialog.Filter = "Microsoft Agent Characters (*.acs)|*.acs";
openFileDialog.FilterIndex = 1 ;
openFileDialog.RestoreDirectory = true ;

if(openFileDialog.ShowDialog() != DialogResult.OK)
return;

try { AxAgent.Characters.Unload("CharacterID"); }
catch { }
AxAgent.Characters.Load("CharacterID", (object)openFileDialog.FileName);
Character = AxAgent.Characters["CharacterID"];
Character.LanguageID = 0x409;
Character.Show(null);
Character.Play ("announce");
Character.Speak ("welcome you sir",null);

}

}
  
  输出:


图2


图3


  结束语:

  微软的Agent API提供了支持动画角色显示的服务,被配置为OLE Automation(COM)服务器时,它能够使多个被称为客户或客户端应用软件的应用程序同时托管或使用其动画、输入、输出服务。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章