基于事件驱动的文本语音转换TTS实例

本文提供了一个基于事件驱动的文本语音转换(TTS)实例,讲解了如何在Windows环境下使用Visual C++ 6.0和微软的SAPI5.1 SDK创建一个图形界面应用程序,实现简单的文本到语音的功能。首先介绍了设置SAPI路径,然后逐步讲解如何创建“Speak”菜单命令,初始化COM,设置语音,触发语音并响应事件。示例代码包括了COM的初始化,语音对象创建,设置感兴趣事件,以及如何处理事件。
摘要由CSDN通过智能技术生成
 
事件驱动的文本语音转换(TTS)实例
 
译者注:本文来自微软的 SAPI5.1文档, --seasun/openpaper论坛 2007-10-22
 
本教程介绍了一个基本的文字转语音的例子,应用程序使用图形界面(非控制台应用程序)
建立项目
本实例的基本代码,是用 Visual C++ 6.0自动生成的一个简单"您好,世界"例子。首先,创建一个新的windows 32平台应用程序项目,并且命名为“Test”。在随后的向导中,选择一个典型的“Hello world!”应用。由此产生的项目代码比命令行版本的长,且大多数新的复杂代码与sapi关系不大,但是是实现图形界面所必须的代码。
设置sapi的路径

与 SAPI相关的文件路径必须在项目中声明。以下是设置“sapi.h”路径的步骤:
1,在菜单上,选择工具“ Tools”,然后单击选项“Options”。
2,单击“ Directories 选项卡。
3,选择“ Include Files”下拉式选单
4,单击最后一行闲置在路径清单,并输入“ sapi.h”的文件路径:“ C:/Program Files/Microsoft Speech SDK 5.1/Include
5,选择“ Library Files”下拉式选单,并输入“sapi.lib”的文件路径: “ C:/Program Files/Microsoft Speech SDK 5.1/Lib/i386。最后单击确定。
创建“Speak”菜单命令
为了使应用程序响应我们发出“ Speak”命令,并且发出声音,需要对自动生成的菜单项做一些修改。读者可以通过VC6.0的资源管理器,在“File”菜单下面,增加一个“Speak”命令项,并且将该命令项的资源ID设置为“IDM_SPEAK”。后文再讲述如何处理这个命令事件的代码。现在先来编译和运行这个应用程序,确保以上的设置准确无误。程序除了在屏幕上面显示“Hello world”之外,其它什么事情也没做,但是它确实可以运行起来了。
使用这个实例
这并不是具体实际应用的例子,因为它只是简单地说了一句话。在实际健壮和灵活的应用中,程序会从一个对话框,资源或文件中获得说话内容的。但是在本例中,它展示了文本 -语言转换的基本功能,并且也说明了很多这方面的机制和原理。
更重要的是,它展现了 sapi和应用程序之间相互通信机制。通过这种通信机制,程序在运行过程中,就可以实时地获得说话内容。在另外两个不同的例子(其它文档中有介绍),利用这些交互信息,程序实时地以文字形式显示出当前的说话内容,和将它们高亮显示在屏幕上。这样做,目的是展现SAPI的事件驱动模式。本例子主要介绍了一些语音消息和有趣味性的特色。趣味性是SAPI最终的目的。
此外,互动信息并不限于确定的正在说的文字。涉及 sapi或语音引擎各式的各种内部动作事件,也是对程序非常有用。 speventenum名单中列出了可能发生的事件。举例来说,如果你的程序是模拟一个生动活泼语音人,你将对每次一个嘴形感兴趣。该嘴形代表了讲话时嘴的变化。所以在说话过程中,嘴形是一闭一合不断变化的。同样,开始和停止的讲话音可能也会对程序十分有用。一般来说,这些事件和活动都是和有趣的。

第 1步:初始化com
第 2步:设置声音
第 3步:讲!
第 4步:设置感兴趣的事件
第 5步:确定事件类型
第 6步:响应事件
 
第1步:初始化com
正如任何其它 sapi的应用一样, com必须成功地初始化。下面用一个winmain中的程序段说明。唯一的限制是在使用任何sapi的特定代码前com必须是初始化完成了,并且在运行sapi过程中,COM一直都是活动的。既然sapi是用initinstance来实例化的,COM的初始化就应该在initinstance之前被初始化 ,并在消息环之后被撤销。
 
程序清单 1:粗体字代表着这个例子的新代码
 
   if( FAILED( CoInitialize(NULL) ) )
   {
  
      return FALSE;
   }
   // Perform application initialization:
   if (!InitInstance (hInstance, nCmdShow)) 
   {
 
      return FALSE;
   }
   hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_GUIAPP);
   // Main message loop:
   while (GetMessage(&msg, NULL, 0, 0)) 
   {
 
      if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
      {
 
         TranslateMessage(&msg);
         DispatchMessage(&msg);
      }
   }
 
   CoUninitialize();
 
第2步:设置声音
 
    一旦com运行后,下一步就是要创建语音对象。这里需要用到cocreateinstance() 。正如上一篇中的命令例子中说, sapi使用很多智能的默认配置。所以只要进行很少的初始化,你即时可以使用语音对象。这些默认配置放在在语音属性,控制面板,一个可选的声音模式(如果你的系统有一个以上的),和语言(英文,日文等)。有些则默认是显而易见的,其他的就没这么明显(如讲话速率,基音周期等)。不过,你可以以编程的方式或
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值