实验二语音交互设计-TTS.doc_第1页
实验二语音交互设计-TTS.doc_第2页
实验二语音交互设计-TTS.doc_第3页
实验二语音交互设计-TTS.doc_第4页
实验二语音交互设计-TTS.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

文本语音(Text-to-Speech,以下简称TTS),它的作用就是把通过TTS引擎把文本转化为语音输出。简单介绍如何运用Microsoft Speech SDK 建立自己的文本语音转换应用程序。Microsoft Speech SDK是微软提供的软件开发包,提供的Speech API (SAPI)主要包含两大方面: 1. API for Text-to-Speech:微软TTS引擎的接口,通过它我们可以很容易地建立功能强大的文本语音程序 ; 2. API for Speech Recognition:与TTS相对应的语音识别为了在VC中使用这SDK,必需在工程中添加SDK的include和lib目录,为免每个工程都添加目录,最好的办法是在VC的Option-Directoris加上SDK的include和lib目录。一、TTS基于控制台这是一个基于控制台的语音程序示例。这个例子中,使用了最简单的COM框架,并让计算机“说”一句简单的话。同时介绍了如何使用XML标签来对语音进行修改。主要包括如下步骤:-Step1:建立工程项目-Step2:初始化COM接口-Step3:创建语音对象-Step4:开始说话-Step5:用XML标签修改语音1、Step1:建立工程 (1) 利用Visual Studio的开发环境中的应用程序向导建立一个Win32控制台(console)程序。在创建过程中时,选择一个简单的“Hello world”应用程序工程项目。(2) 创建完成后,打开“stdafx.h”头文件,把以下的内容粘贴在“#include ”与“#end if”之间。这样把SAPI所需的其它依赖信息包含进来。#define _ATL_APARTMENT_THREADED #include (3) 在工程中增加两个文件sapi.h和sapi.lib的路径。在菜单栏中选择“Project”|“Settings”|“C/C+”标签页,接着在“Category”下拉列表中选择“Preprocessor”,在“Additional include directories”编辑框中填入实际头文件路径,“F:Program FilesMicrosoft Speech SDK 5.1Include”。(4) 再设置sapi.lib的路径。在同样的“Settints”对话框中,选择“Link”标签页;在“Category”下拉列表中选择“Input”;在“Additional library path”编辑框中填入sapi.lib的路径:“F:Program FilesMicrosoft Speech SDK 5.1Libi386 ;(5) 在同样的“Link”标签页中的“Object/library modules”栏中增加“sapi.lib”,注意,这里的各个库名字之间用空格隔开。Step2:初始化COM接口 SAPI 是基于COM框架的,所以使用SAPI相关函数之前和SAPI对象被激活时,程序必须初始化COM接口。下面的代码虽然除了初始化之外没有任何其它的功能,但是它确保COM能被正常启动。程序清单2:#include #include int main(int argc, char* argv) if (FAILED(:CoInitialize(NULL) return FALSE; :CoUninitialize();return TRUE;Step3:创建语音对象 COM 运行环境建立起来之后,接下来创建语音对象。语音对象是一个简单的COM对象。另外,语音对象使用很多智能的默认配置,在自身初始化过程中,SAPI自动为其配置大多数的默认值,语音对象创建完成后就可以立即被程序使用。这些默认的参数是从“控制面板”的“语言属性”中获得的,包括语言种类等。所有的默认参数,包括显见的和非显见的(比如说话速度,基音周期等),都可以用编程的方式改变,或从控制面板中的语言属性中修改。#include #include int main(int argc, char* argv) ISpVoice * pVoice = NULL; /获取ISpVoice接口: if (FAILED(:CoInitialize(NULL) return FALSE; HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void *)&pVoice); if( SUCCEEDED( hr ) ) pVoice-Release(); pVoice = NULL;/ pVoice设置为NULL空值不是必须的,但这样做有助于检查错误,也可以作为一个提示,表示这个指针的空间已经分配了或者被释放了。 :CoUninitialize(); return TRUE;注:SDK提供的SAPI是基于COM封装的,只要按部就班地用CoInitialize()、 CoCreateInstance()获取IspVoice接口就够了,需要注意的是初始化COM后,程序结束前一定要用CoUninitialize()释放资源。Step4:开始说话 上述程序的流程是获取IspVoice接口,然后用ISpVoice:Speak()把文本输出为语音,只需调用“Speak”函数即可。HRESULT Speak(const WCHAR *pwcs,DWORD dwFlags,ULONG *pulStreamNumber);(1) *pwcs 输入的文本字符串,必需为Unicode,如果是ansi字符串必需先转换为Unicode.(2) dwFlags 用来标志Speak的方式,其中SPF_IS_XML 表示输入文本含有XML标签。(3) PulStreamNumber 输出,用来获取去当前文本输入的等候播放队列的位置,只有在异步模式才有用。代码如下:#include #include int main(int argc, char* argv) ISpVoice * pVoice = NULL; if (FAILED(:CoInitialize(NULL) return FALSE; HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void *)&pVoice); if( SUCCEEDED( hr ) ) hr = pVoice-Speak(LHello world, 0, NULL); pVoice-Release(); pVoice = NULL; :CoUninitialize(); return TRUE; Step5:用XML标签修改语音 TTS API功能最强大之处在于能够分析XML标签,通过XML标签设置音量、音调、延长、停顿,几乎可以使输出达到自然语音效果。前面已经提过,把Speak参数dwFlags设为SPF_IS_XML,TTS引擎就会分析XML文本,输入文本并不需要严格遵守W3C的标准,只要含有XML标签就行了,在下面的例子中,后部分的语音基音频率会比前部分的低10个等级。#include #include int main(int argc, char* argv) ISpVoice * pVoice = NULL; if (FAILED(:CoInitialize(NULL) return FALSE; HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void *)&pVoice); if( SUCCEEDED( hr ) ) hr = pVoice-Speak(LHello world, 0, NULL); /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论