人人范文网 范文大全

实验二 语音交互设计TTS

发布时间:2020-03-02 21:26:54 来源:范文大全 收藏本文 下载本文 手机版

文本语音(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”下拉列表中选择“Preproceor”,在“Additional include directories”编辑框中填入实际头文件路径,“F:\\Program Files\\Microsoft Speech SDK 5.1\\Include”。

(4)再设置sapi.lib的路径。在同样的“Settints”对话框中,选择“Link”标签页;在“Category”下拉列表中选择“Input”;在“Additional library path”编辑框中填入sapi.lib的路径:“F:\\Program Files\\Microsoft Speech SDK 5.1\\Lib\\i386 ;

(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提供的

是基于COM封装的,只要按部就班地用CoInitialize()、

CoCreateInstance()获取IspVoice接口就够了,需要注意的是初始化COM后,程序结束前一定要用CoUninitialize()释放资源。

SAPIStep4:开始说话

上述程序的流程是获取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(L\"Hello 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(L\"Hello world\", 0, NULL); // Change pitch hr = pVoice->Speak(L\"This sounds normal but the pitch drops half way through\", SPF_IS_XML, NULL ); pVoice->Release(); pVoice = NULL; } ::CoUninitialize(); return TRUE; }

实验二 语音交互设计TTS基于图形用户界面

实验二语音信号分析与处理

数字交互设计

交互设计档案

交互设计全档案

交互设计实习报告

交互设计心得整理

用户交互设计学习心得

设计鼠标交互教学设计

语音教学设计

实验二 语音交互设计TTS
《实验二 语音交互设计TTS.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档