在C#中使用微软AGENT之TTS

微软

微软AGENT简介 

微软Agent API能够提供卡通角色的显示,另外,它还可以支持语音识别,因此应用软件可以对语音命令作出反应,而卡通角色可以通过合成的语音、录制好的音频信号或文字对命令作出反应。

使用微软AGENT的要求

要使用该技术,我们必须有下面的组件: 

·微软Agent核心组件 

·微软Agent中的卡通角色━━Genie、Merlin、Robby和Peedy 

·微软Speech API 4.0a运行时间库 

·微软语音识别引擎 

·Lernout和Hauspie文字-语音引擎 

上面的所有这些组件都可以从http://microsoft.com/products/msagent/downloads.htm下载。 

语音技术简介 

文字-语音转换指的是计算机将文字信息转换为合成语音进行输出,语音识别是指计算机能够识别出说话者所说的话,接受说话者的命令和输入的数据。 

语音识别和文字-语音转换都需要用到相关的引擎,几乎所有的语音识别引擎都是将输入的语音数据转换为与特定引擎相关的音素,然后这些音素被转换为应用程序能够使用的文字。 

文本-语音转换的二种方式: 

1、合成文本-语音转换 

2、连续文本-语音转换 

合成文本-语音转换方式: 

在合成的发音方式中,引擎处理每个单词,并产生该单词的发音音素,然后这些音素被转入一个复杂的算法中,模仿人类的发声方式,生成语音。 

连续文本-语音转换方式: 

在连续文本-语音转换方式中,引擎对文本信息进行处理,从一个预先录制好的语音库中找出句子、单词和短语,在这种方式中,生成的语音是连续的。

语音应用程序的编程接口 

微软语音应用程序编程接口在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。


在.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);  

}

 }  

 
输出: 

结束语: 

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

时间: 2024-09-29 20:34:25

在C#中使用微软AGENT之TTS的相关文章

如何一键恢复 Windows 8/8.1 中的微软拼音长句模式

这事情最早追溯到前年 8 月的一篇文章<十个步骤找回 Win8 中的微软拼音新体验模式>,其实就是手工注册一个COM完事,只是大微软可以弄了注册表权限来屏蔽,操作起来略微繁琐.到目前为止,Win8重装系统已经不下十次了,每次都是这样手工操作,我已经厌倦了. 另外还有Win8.1上的问题,由于大微软已经完全删除了文件,就没法这么搞了,就算从Win8拷过文件来,也无法简单注册使用.加上我对8.1非常非常不感冒,一直没去研究.前些天看到之前的那篇文章里 Charles Leigh 回复了两篇文章(E

逝去的纪念:如何在Linux中同步微软 OneDrive

逝去的纪念:如何在Linux中同步微软 OneDrive [编者注]:本文译文完成之后不久,OneDrive 就成了中国人的昨日黄花了.编者想了想,还是发出来罢,仅以此文纪念我们逝去的这个.那个.以及这些和那些.也许若干年后我们回忆起来,我们曾经有过那么多那些,而当时却挑三拣四,没有珍惜,如果再给我一次机会-- OneDrive(以前称为SkyDrive)是微软的一个广受欢迎的云存储产品.目前OneDrive为每一个新注册用户提供7GB免费存储空间.正如你所想,OneDrive与微软其他软件产品

幻想中的微软技术

  C#.NET核心编程与C#3.0/3.5的新特性 C#从3.0开始尝试将静态语言和动态语言进行整合,微软吸收了很多动态语言的特长,并全新地改变了C#3.0/3.5的语法,提供了很多静态语言(比如Java)无法实现的高效开发体验.该课程主要是讲解C#.NET核心编程基础并推荐使用C#3.0/3.5的新语法特征替换原先的语法模型   方向: l        C# 结构化编程.常用对象和集合类 l        突破类型和值:动态定义和动态赋值 l        突破类型定义:匿名新定义 l  

在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持

在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle.SQLServer.Mysql这些常规的数据库,也有可能访问SQLite.Access,或者一些我们可能不常用的PostgreSQL.IBM DB2.或者国产达梦数据库等等,这些数据库的共同特点是关系型数据库,基本上开发的模型都差不多,不过如果我们基于ADO.NET的基础上进行开发的话,那么各种数据库都有自己不同的数据库操作对象,微软企业库Enterprise Library是基于这些不同数据库的操作做的抽象模型,适合多数据

野村证券分析师里克薛伦在其报告中给予微软买入评级

据国外媒体报道,野村证券分析师里克•薛伦(rick sherlund)在其报告中给予微软"买入"评级.不过,他认为微软最新款Xbox One游戏机今年400万销量目标存质疑,这款设备今年的毛利润将为负,整个微软Xbox业务今年将亏损超过10亿美元. 以下为里克•薛伦报告摘要: "我们曾预期Xbox One今年12月份的销量在420万台左右.但是,鉴于索尼PS4价格优势(PS4售价399美元,微软Xbox One售价499美元)对其构成的竞争压力,再加上Xbox One目前只在

由神秘到简单 教你在网页中添加微软地图

网页|微软 自Google推出地图服务以后,微软和百渡也相继推出地图服务.地图成为目下网络流行的时尚,如果你想追赶它,那么来吧,我将会帮助你学会使用微软的Virtual Earth Map Control,为你的网站添加一道亮丽的风景. 本文最终效果图: MapControl控件 Virtual Earth Map Control脚本可以在MSN网站下载:http://virtualearth.msn.com/js/MapControl.js. 当然你可以直接在网站中链接这个脚本,但这会导致一些

视觉设计中的微软雅黑的字体设计

一.雅黑设计理念 雅黑字体是为微软公司设计的屏幕显示汉字.它具有个性独特.结体优美.识别性强.块状效果好.显示清晰等优点.在当今数字化时代更是用途广泛.这副字可以说是科技进步的产物,是人类社会的需要,在设计上也有所突破. 首先打破传统结体方式,采用大字面设计,字怀放开,增大内白,使文字方正,布白匀称.由于字体中宫放开,使文字的适用性也随之增强,不但适合小级数文字的使用,更适合屏幕显示. 在笔型塑造上去除"喇叭头".为防止文字笔划缺乏美感.没有精神,在撇.捺.点.勾的处理上使其粗细有略微

在VC++中实现Microsoft Agent

用过Office97或Office2000的人会知道,Office软件中有一个可爱的Office助手,能够根据不同的操作作出一些有趣的提示与动画,使用户操作更人性化.有趣化.正象这Office助手"大眼侠"一样,Microsoft提供了代理软件开发技术,称为"Microsoft Agent",它能支持中文.有强大的交互功能与人性特点,不仅能给出有趣的提示信息,还能给出幽默的动画效果,使用"Microsoft Agent"能让您的程序增色不少. &

M#部分新特性融进C# 7.0中,微软新系统Midori变成Wavefront

  大名鼎鼎的WalkingCat (h0x0d,MSDN 账户 felix9)在长期研究中发现了有关C#和微软新系统的最新消息. 根据WalkingCat援引前M#开发者Jared Parsonswrote的博文,M#将把自身部分特性融入C# 7.0新版中.M#为C#语言的一种扩展,用于构建基于微软下一代系统Midori (与Singularity OS相关)本身和相关应用,意在增强可靠性和性能. 但根据WalkingCat此前的推文,Midori项目基本可以确定停摆,大部分参与员工都已经离开