- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验二 语音交互设计TTS-基于图形用户界面
COM:即组件对象模型,Component Object Model。
在COM构架下,人们可以开发出各种各样的功能专一的组件,组件实际上是一些小的二进制可执行程序,它们可以给应用程序、操作系统以及其他组件提供服务,然后将它们按照需要组合起来,构成复杂的应用系统(如dll)。优点:可用新组件替换原有组件,系统升级和定制更加简便;可在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM与语言、平台无关,程序员可充分发挥自己的才智与专长编写组件模块等。
使用和处理COM对象。COM独立于语言,COM为自己提供对象管理例程。COM中创建对象,实际是调用COM库中的API函数CoCreatInstance().调用该函数时,在注册表中查找COM服务器位置,将服务器加载到内存,并创建所请求的实例。
一般使用COM对象的步骤是:
初始化COM库(Initialize);
创建一个COM对象,获得相应接口;
如果对象创建成功,则调用COM对象的某个方法;
释放接口;
收回COM库(Uninitialize)
二、TTS—基于图形界面
基于图形用户界面创建一个TTS应用程序,通过对菜单命令的选择执行文本-语音的转换。
一、建立项目
1、创建一个实现典型“Hello world”应用的windows 32平台应用程序项目。
二、设置sapi路径:与SAPI相关的文件路径必须在项目中声明。(sapi.h和sapi.lib)
1、选择“Tools”→ “Options”→“Directories”选项卡;
2、选择“Include Files”下拉式选单,增加“sapi.h”的文件路径;
3、选择“Library Files”下拉式选单,增加“sapi.lib”的文件路径;
三、创建“Speak”菜单命令
1、修改自动生成的菜单项。打开“资源管理器”→“File”菜单→增加“Speak”命令项→资源ID设置为“IDM_SPEAK”。
四、实现speak功能
第1步:初始化COM
第2步:创建语音对象设置声音
第3步:调用speak函数
第4步:设置感兴趣的事件
第5步:确定事件类型
第6步:响应事件
?1、初始化COM
?if( FAILED( CoInitialize(NULL) ) )
?? {
????? return FALSE;
?? }
?? ?2、创建语音对象设置声音
? ??? 一旦com运行后,下一步就是要创建语音对象。这里需要用到CoCreatInstance().为简洁和方便起见,这个例子使用了特别的处理方式。首先,它使用initinstance ( )来初始化声音。这是最简单的初始化过程。第二,这个语音对象是全局性的。第三,语音对象建立之后,对象本省和用到的内存立即被释放。最后,如果初始化失败,应用程序应该有更强有力的检查错误机,更广泛的报告和更详细的资料。
?程序清单2:
ISpVoice *pVoice;?? //SAPI voice(初始化模块)
……
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
。。。。。。
// Instead of using IDC_TEST, use the identifier of menu resource of the current application.
SetMenu(hWnd, LoadMenu(hInstance, MAKEINTRESOURCE(IDC_TEST)));
?? ShowWindow(hWnd, nCmdShow);
?? UpdateWindow(hWnd);
//Initialize SAPI
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)pVoice);
if( SUCCEEDED( hr ) ) {
pVoice-SetInterest( SPFEI(SPEI_WORD_BOUNDARY),SPFEI(SPEI_WORD_BOUNDARY) );
pVoice-SetNotifyWindowMessage( hWnd, WM_USER, 0, 0 );
}
else
return FALSE;?
3、调用Speak函数实现“讲话”的功能
???? 要让计算机讲话只需一句简单的调用命令,要讲话的内容用一个参数传给语音对象,常是从一个对话框或一个文件获取字符串的。另外,字符串也可以从一个流中获取,但就要使用另外一个调用 ispvoice:: spe
文档评论(0)