在C#中使用微软AGENT之TTS

2016-02-19 16:59 45 1 收藏

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的在C#中使用微软AGENT之TTS教程,一起来看看吧!超容易上手~

【 tulaoshi.com - 编程语言 】

  微软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轴顺序的最顶端。用户可以通过鼠标左键拖动角色移动角色所在的窗口,角色的图像随着指针而移动。

  说话汽球圈

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

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  在互联网网页中使用微软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:

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  要在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)服务器时,它能够使多个被称为客户或客户端应用软件的应用程序同时托管或使用其动画、输入、输出服务。

来源:https://www.tulaoshi.com/n/20160219/1613777.html

延伸阅读
在C#是一种类似 Java 的完全面向对象的高级编程语言,其处理过程采用事件驱动方式,但在实际的使用过程中,有时候通过调用系统原有的消息处理起来会更简单,特别是在处理与DLL文件的交互时,实践证明的确是非常方便的。 在C#中使用自定义消息 在C#中使用自定义消息非常简单,只需要下面几个简单的步骤就可以了: 1、定义消...
在前两篇文章中我们讨论了XML文件的读取和写入,但都是基于流模型的解决方案,今天我们就来谈谈在C#中如何实现DOM,DOM确实有它的不足,但在编程工作中它还是不可或缺的技术。下面我们来简单了解一下DOM的相关知识。 DOM的全称是Document Object Model(文档对象模型),它是来自W3C的官方标准,它允许按照W3C标准W3C DOM Level1和W3C...
C# 用户经常提出两个问题:我为什么要另外编写代码来使用内置于 Windows 中的功能?在框架中为什么没有相应的内容可以为我完成这一任务?当框架小组构建他们的 .NET 部分时,他们评估了为使 .NET 程序员可以使用 Win32 而需要完成的工作,结果发现 Win32 API 集非常庞大。他们没有足够的资源为所有 Win32 API 编写托管接口、加以测试并编写...
Delphi的出现将一大批程序员带入了Windows下的可视化编程,为一些C&C++的死党程序员所羡慕、感叹。直到C++Builder的出现这些Programer才用到了梦寐以求的编程工具,也将一些不得已"投敌"到Delphi下的程序员又拉回到C++的怀抱。她正真将Windows下的可视化编程和面向对象编程语言有机的融合在一起。但是由于C++Builder面市时间...
因为在Visual C++中使用内联汇编不需要额外的编译器和联接器,且可以处理Visual C++中不能处理的一些事情,而且可以使用在C/C++中的变量,所以非常方便。内联汇编主要用于如下场合: 1.使用汇编语言写函数; 2.对速度要求非常高的代码; 3.设备驱动程序中直接访问硬件; 4."Naked" Call的初始化和结束代码。 /...

经验教程

408

收藏

80
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部