VB 版 (精华区)
发信人: bloom (├┝┞┟┠┢┣), 信区: VB
标 题: Re: vb如何做语音、文本引擎
发信站: 哈工大紫丁香 (2000年09月07日11:02:56 星期四), 站内信件
上去了,是介绍agent技术的。我copy这么一段过来
Microsoft Agent 2.0简介
如果您用过微软的Office 2000,就一定会发现以前Office 97里的曲别针、小狗等
Office助手从方框窗体中跳了出来,实际上这就是Agent技术。以前,要想使程序具有任
意形状的窗体,必须调用API函数,要想使它们动起来则更得费一番脑筋。现在好了,使
用Agent技术可以轻松的实现我们的目的。Agent 2.0 是微软开发的一种基于组建对象模
型(COM)的ActiveX控件,提供两大类功能:活泼的角色(characters)和TTS语音扩展。我
们可以在任何支持ActiveX的编程软件,甚至网站中使用这一控件。
Microsoft Agent 2.0的组成
当初微软推出Agent2.0技术的目的是为了让程序员制作帮助向导,就像MSOffice 2
000所做的那样。Agent可以弹出一句话(即气球)来指导用户。 在Agent技术中,角色
是可以把气球中的英文读出来的,只是至今微软没有推出中文TTS Engine,因此Office
2000的助手都是哑巴,我没用过英文版的Office2000,不知伺候外国人的助手会不会讲
话。下边是Agent技术的组成示意图:
图中最上方的是TTS API,是用来识别文本的。不同的语言要用不同的API来支持,
比如英语就得用英语TTS API支持。目前微软推出了包括中文在内的多种语言的TTS API
。
仅有API是不行的,就像iProgram认识E语但读不准一样,要想读出文本,还需要TT
S Engine来支持。同样,不同的语言也需要不同的TTS Engine的支持。搞笑的是微软提
供了简体中文TTS API,却没有提供简体中文TTS Engine。我不认为这是技术上做不来,
而是什么什么的我也不知道,总之日本语的TTS API及TTS Engine到是齐全。
图中还有一个引擎叫Speech Recongnotion Engine,这是用来识别语音而达到语音
输入目的引擎。它可以像TTS一样单独使用,也可以在使用Agent2.0技术的程序中引用。
图的下半部分是组成Agent 2.0技术的角色。微软直接提供的角色只有四种。这四个
角色个有自己不同的动作,下文会分别介绍。你也许会问,哪像小狗、区别针这样的角
色从何而来?其实安装过Office2000的机器中都会有这些角色,但是要想使用更多的角
色还得自己设计。Agent Characters Editor就是这样的工具。它可以将不同的动作的位
图组成角色的动画,还可以给它们不同的嗓音、语速,非常方便。
准备工作
也许你会问,如此优秀的技术为何所见不多呢?看看Agnet2.0的组成你还不明白?
用户要想运行一个Agent程序,得安装如此之多的东东。换句话说,这些API、Engine还
有Agnet内核文件、角色的等等都得随软件发行,其中TTS Engine是最大的,不同语言有
所不同,但一般不会小于5M。这样一来很少有人会从网上下载这样的程序。难怪使用这
种技术的都是CIBA2000和Office2000之类可以用光盘发行的软件呢。
不过,这里还有一个好消息。在Windows2000中包括了英语版的TTS API、TTS Engi
ne和Agnet内核。换句话说,只要把开发出软件打上个"For Win2000 Only"就可以摆脱
找不到DLL的尴尬。BTE:Win2000还包括了诸如MSVBVM60.Dll、MFC42.DLL这样的运行库
,对我们减少程序体积很有帮助。
要想编写一个Agnet2.0程序,您自己的有Agent2.0 的开发环境。
首先检查您的Windows目录下是否有MSAgent目录,其中包含Agent2.0的核心文件。
该目录下还有一个chars目录,在安装Agent2.0核心文件后会自动添加一个角色文件Mer
lin.acs。
然后检查是否存在TTS API,它的位置是Windows目录下的Speech目录。
最后一个是TTS Engine,它不再Windows目录中,它作为系统共享问而存在于c:\Pr
ogram Files\Common Files\Microsoft Shared\SpeechEngines\TTS位置。
以上运行Agent 2.0程序已经足够了,但对于开发者还应具备设计角色的工具,因此
还得安装Agent Character Editor。当然,微软提供的其他四个Characters最好也装上
。
先不要担心这些东东无处可寻,文章的最后部分给除了下载连接。
小试一下 - 编写第一个Agent程序
现在编写一个练习程序,为的是了解Agnet2.0的两个功能:角色动画和TTS。它的目
的是引出下文。因为是练习,程序写得不太规范。
首先,新建一个标准工程,向其中添加部件。如果已经安装了Agent 2.0内核,则可
以在部件列表中看到“Microsoft Agent 2.0”字样的就是了,如果找不到(注意是找不
到而不是没有,如果是没有说明有问题)...如果找不到单击“浏览”选择C:\Windo
ws\MSAgent\AgentCTL.DLL 也行。
向Form1添加Agent1控件(注意,因为是练习,控件就都用原来的名字)、Command
1用来显示和隐藏角色;Command2用来使其产生动画;Command3让角色说:“I Love Yo
u!”
以下是各函数的代码:
Private Sub Form_Load()
Agent1.Characters.Load "Merlin", "merlin.acs"
Agent1.Characters("Merlin").LanguageID = &H409
End Sub
首先,在窗体加载时加载角色,但此时角色并未显示出来。
第一句中的“Merlin”是随便起的,因为要调用的角色是微软提供的Merlin,因此
就用了这个名字。今后就用“Merlin”来代表该角色。 由此可见同一个程序可以加载多
个角色,只需给他们起不同的名字即可。
第一句中的第二个参数是个文件名。你或许会问:为什么这个文件名没有绝对路径
呢?这样做是告诉程序:这个角色要到C:\Windows\MSAgent\Chars目录去找。前边说了
,我们可以使用自己的角色,那时再在此处使用自己的角色文件的相对路径如:App.Pa
th & "\iPro.acs"
其实可以发现这第二个参数是可省的,当省略这个参数时程序就会调用系统幕默认
的角色。不同的机子里的默认角色是不同的。换句话说,同一个程序在不同的机器中看
到的角色有可能不同。那么不同机子中的默认角色是怎么造成的呢?请试试这个语句:
Agent1.ShowDefaultCharacterProperties 这将显示一个对话框,用户可从中选择C:\W
indows\MSAgent\Chars中已有的角色,一旦确定,这个角色的ID就会被作为默认角色给
保留在注册表中。
第二句是指定角色所使用的语言。一方面,必须指定一个语言ID;另一方面,这个
语言所对应的TTS API和TTS Engine必须安装在机子中,否则不会出生的。&H409是英文
的语言ID,后文给出了语言的ID列表。
Private Sub Form_Unload(Cancel As Integer)
Agent1.Characters.Unload "Merlin"
End Sub
这样当程序结束时会自动卸载角色,需要注意的是不能够多次加载同一角色。
Private Sub Command1_Click()
Static OnShow As Boolean '为真时代表正在显示
If OnShow Then '如果正在显示则...
Agent1.Characters("Merlin").Hide
Else
Agent1.Characters("Merlin").Show
End If
OnShow = Not (OnShow)
End Sub
单击Command1时,角色Merlin就会出现,再次单击后角色隐藏起来。
Private Sub Command2_Click()
Agent1.Characters("Merlin").Play "Congratulate"
End Sub
单击Command2时,角色会做一个"Congratulate"的动作。Play后的参数叫动画参数
,后文有角色的动画参数列表
Private Sub Command3_Click()
Agent1.Characters("Merlin").Speak "I Love You!"
End Sub
单击Command3时角色说:“I Love You!”(真恶心)
【 在 bloom (├┝┞┟┠┢┣) 的大作中提到: 】
: 还不知道呢,我想不会支持,正在登陆中,呵呵
: 【 在 cameran (竹晨) 的大作中提到: 】
: : 支持中文吗?
--
├┝┞┟┠┢┣◣◢
∣
▆▆▆
▇▇
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.170.208]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.216毫秒