关于语音合成论文如何怎么撰写 与语音合成技术的功能设计和实现类论文范本

本论文是一篇免费优秀的关于语音合成论文范文资料,可用于相关论文写作参考。

语音合成技术的功能设计和实现

摘 要:简要介绍了语音合成技术、SDK及其配置、SAPI,通过代码示例详细介绍了ISpVoice接口的调用步骤和常用方法,基于TTS引擎设计实现了语音阅读系统及其软件,阐述了该软件实现的主要功能,讨论了语音接口调用的4个类和阅读内容的存储方式.

关键词:Speech SDK;SAPI;TTS引擎;MFC;语音合成

中图分类号:TN912.33;TP317.52 文献标志码:A DOI:10.3969/j.issn.1674-9146.2016.12.084

1 语音合成技术简介

现在,随着电脑的普及和互联网的广泛应用,网络上的资源越来越丰富、越来越全面,越来越多爱好读书的人将目光从以前的纸制书本投向了电子书籍,这不仅节省了寻找书本的时间,而且节省了读书的开支.可是,问题也随之而来,长时间使用电子设备看书对人们的视力影响极其不好,越来越多的年轻人早早地戴上了厚厚的近视镜.如果有一种方法,既能满足人们阅读网络上种类齐全、便宜的电子书籍,又能很好地保护人们的视力,该有多好.

利用语音合成就能满足人们的这个需求.语音合成就是人工通过一定的机器设备产生出语音,它是人机语音通信的重要组成部分.语音合成研究的目的就是制造一种会说话的机器,解决的就是如何能够让机器像人那样说话的问题,使一些以其他方式表示或者存储的信息能够转换成语音,让人们通过听觉而方便地获得这些信息[1].

现在,科学家们已经搜集并录制了大量的不同语种的单词和词汇到合成的语音库中,一些技术成熟的公司已经将所需的关键技术点封装成函数供语音开发人员调用,编程开发人员只要掌握了调用该函数的方法和相关的注意事项,通过相应的SAPI接口正确调用函数就能够完成文本到语音的转换[2].

目前,语音合成技术已经十分广泛地应用到了各个领域上.语音合成技术比较成熟的有美国微软公司、我国科大讯飞公司等,其中微软已经公布了部分语音合成及识别所调用的函数和相应的调用文档,现在市面上一般的语音方面的产品也主要以微软提供的SDK为根本.因此笔者以微软的SDK为例,讲述如何完成文本到语音的转换.

2 SDK和SAPI

2.1 SDK简介及其配置

Microsoft Speech SDK(微软标准语音开发工具)是微软公司为开发Windows平台上的语音应用程序而提供的软件开发包,它主要兼容了Win32的语音应用程序编程接口(Speech Application Programming Interface,SAPI)、编译和调试语音应用程序的工具以及帮助文档.目前几乎所有的文本朗读工具都是使用这个SDK开发的,语音合成已经在一定程度上得到了广泛使用[3].

Microsoft Speech SDK可以在微软的网站上免费下载,目前的版本是5.1,为了支持中文或者其他语种如日文,还要把附加的语言包(LangPack)一起下载.然后安装Microsoft Speech SDK version 5.1后在C:\Profram Files\Common Files\Microsoft Shared\Speech目录下找到sapi.dll,并将sapi.dll复制到项目文件下.还有一种方法是使用向导将sapi.lib手动添加到项目中去,如果下载不到sapi.dll,可以采用添加sapi.lib的方式下面介绍的例子都是采用第二种方式,注意只有正确配置SDK才能完成文本到语音的成功转化[4].

2.2 SAPI简介

SDK提供的Speech API(SAPI)的两种基本类型是API for Text-to-Speech和API for Speech Recognition.其中API for Text-to-Speech就是文本语音转换(Text To Speech,TTS)引擎,TTS可以将文本中的字符或者文档合成为语音并“说”出来,通过它可以很容易地建立功能强大的文本语音程序[5].

应用程序可以通过ISpVoice COM接口控制使用TTS.应用程序一旦建立了ISpVoice对象,它只需调用ISpVoice:: Speak来从文本数据生成语音.另外,ISpVoice接口同样提供了多种方式来改变程序所发出的声音、音调和其他属性,例如ISpVoice:: SetRate改变语音速度,ISpVoice:: SetVolume改变语音音量等[6].

除了ISpVoice接口之外,SAPI同样提供更多的高级TTS应用——通过手动控制COM接口.

3 ISpVoice接口详解

3.1 ISpVoice接口调用步骤

ISpVoice是COM标准提供的一组对语音操控的接口,它是由微软架构在COM之上的SAPI实现的.调用ISpVoice接口大致分为5个步骤:一是初始化COM(由于ISpVoice是COM标准中提供的接口);二是获取指向ISpVoice接口的指针;三是通过该指针控制TTS引擎;四是释放指针;五是关闭COM接口[7].

3.2 ISpVoice接口调用代码示例

下面这段代码示例就是为了让大家更清晰更具体地了解如何获取ISpVoice接口指针,并利用其操作SAPI中的TTS(文本合成语音)引擎,同时作为初学者也可以在这个基础上练习如何使用此接口.

#include<sapi.h>

//CoInitialize CoCreateInstance 需要调用ole32.dll

#pragma comment(lib,"ole32.lib")

//sapi.lib在SDK的lib目录,必须正确配置

#pragma comment(lib,"sapi.lib")

int main(int argc,char*ar[])

{

//ISpVoice接口类型指针

ISpVoice*pVoice等于NULL;

//COM初始化

if(FAILED(::CoInitialize(NULL)))

return FALSE;

//获取ISpVoice接口,接口指针存入pVoice中

HRESULT hr等于CoCreateInstance(CLSID_SpVoice,

NULL,

CLSCTX_ALL,

IID_ISpVoice,

(void**)&pVoice);

/*读出"This is a system which can speak your text"*/

if(SUCCEEDED(hr))

{

hr等于pVoice->Speak(L"This is a system wh-

ich can speak your text",0,NULL);

pVoice->Release();

pVoice等于NULL;

}

//千万不要忘记关闭COM接口

::CoUninitialize();

return TRUE;

}

注意:一定要先释放指针,然后再关闭COM接口,否则程序很有可能会发生崩溃.

3.3 IspVoice接口常用方法

成功调用ISpVoice接口后,接下来就可以使用ISpVoice的主要函数控制语音阅读了,下面给出的是ISpVoice的几种常用控制方法[8-9].

SetVoice():设置综合文本所使用声音的特性.默认时,ISpVoice可以使用控制面板里面的语言属性来进行设置里面的设定.

Speak():阅读文本或文档的内容,其中它的第二个参数可以设置为同步或者异步,两者的主要区别在于,同步不可以实现对语音的适时控制,而异步则可以实现对语音的适时控制,大多数程序使用的都是异步方式.

SetRate():设置实时阅读速度.

SetVolume():设置实时阅读音量.

SetVoice():设置发音人.

GetStatus():获取当前所读状态信息.

Pause():暂停发音.

Resume():恢复发音.

……

4 语音阅读的实现

笔者基于微软Speech SDK中的SAPI内TTS引擎,设计实现了语音阅读系统及其软件.TTS引擎可以根据输入的字符串自动合成与之相对应的语音并输出.该语音阅读系统能够将接收到的文字(ANSI或UNICODE标准)串或者字符串传入引擎内来完成文本到语音的转换.该语音阅读系统的界面开发应用微软基础类(Microsoft Foundation Classes,MFC)完成[10-12].

该语音阅读软件主要实现对输入字符或从电脑上载入的文本文档等进行汉语、英语、日语以及混合发音的阅读,并且可以随意切换发音人,调节阅读的语音音量和语音速度,还可以将音频保存到W文件中[13].

4.1 主要功能

要实现一款好的语音阅读软件,只是能够实现文本到语音的转换是远远不够的,还需要具备其他多种功能.图1为笔者设计的语音阅读软件的主要功能.

笔者设计的软件使用的主要开发工具是Microsoft Visual Studio 2010,如果没有此开发系统,也可以使用Microsoft Visual Studio 2008 或者VC++ 6.0进行开发,使用MFC模式,建立基于对话框的工程[10].

4.2 相关类介绍

语音阅读实际上就是对语音接口的成功调用,而与之相关的主要有3个类:CSAPIWrapper,CSAPI4Wrapper和CSAPI5Wrapper.还有一个比较重要的类即CSpeechController类,以下对这4个类分别予以介绍.

4.2.1 CSAPI4Wrapper和CSAPI5Wrapper

由于CSAPI4Wrapper和CSAPI5Wrapper这两个类结构相似,所以在这里将它们一并介绍,它们的区别在于第一个类使用的是SAPI4, 其对TTS引擎的调用没有像SAPI5那样的方便,最主要应用到的接口有ITTSCentral和ITTSAttributes,下面先来看一看他们的相同点.

它们都采用异步方式对文档内容进行阅读,以便能够在阅读的同时对语音等进行控制,主要包含以下操作.

SpeakText():读出输入的文本.

StopSpeak():停止读文本.

PauseSpeak():暂停读文本.

ResumeSpeak():恢复读文本.

SetVolume():设置声音大小.

SetRate():设置语速.

ChangeVoice():改变发音者.

……

以上方法都是在CSAPI5Wrapper通过ISpVoice*类型的成员变量m_pVoice指针来调用SAPI5的TTS引擎来实现发音的.而对于CSAPI4 Wrapper则略有不同,它需要调用多个接口,主要有ITTSCentral和ITTSAttributes.

通过ITTSCentral接口可以控制TTS引擎的阅读、暂停等功能,主要包含以下操作.

TextData():读文本.

AudioPause():暂停.

AudioResume():恢复.

AudioReset():停止.

……

通过ITTSAttributes接口可以调用TTS引擎的音量、语速等控制功能,主要包含以下操作.

SpeedSet():设置语速.

VolumeSet():设置音量.

……

4.2.2 CSAPIWrapper

它涵盖了以上两个类的所有操作,其作用就是将操作细节封装起来,让对它的使用变得更方便而不用在意下面是如何运行的.它对两个SAPI的集成是通过一个枚举类型WRAPPERTYPE作为其私有变量来完成的,当WRAPPERTYPE等于SAPI4 时则调用CSAPI4 Wrapper对象的方法,否则调用CSAPI5 Wrapper对象的方法.

4.2.3 CspeechController

这个类位于逻辑控制层,它提供了用户界面对语音控制所需要的所有接口,其最重要的成员变量就是CSAPI Wrapper对象m_cSAPIWrapperObj,该对象会提供具体的执行动作.这个类主要包含以下操作.

Play():播放.

Pause():暂停.

Resume():恢复.

Stop():停止.

ChangeAnnouncer():变换发音人.

SeFile():保存文件.

……

这个类会把用户进行的操作通过m_cSAPIWrapperObj转换成具体的底层操作,转换过程都在各个成员函数内部中进行.具体示例如下.

void CSpeechController::ChangeAnnouncer(int enTy-

pe)

{

m _cSAPIWrapperObj.StopSpeak();

m _cSAPIWrapperObj.ChangeVoice(enType);

return;

}

该函数就把用户需要的变换发音人的操作转换成了停止发音和设定新的发音人两个操作.这个类是为了联系上层界面和连接底层语音控制而设计的,它与底层具有一对一的聚集关系.

4.3 阅读内容的存储方式

笔者把阅读的内容存储在一个CString类型的向量容器vector中,因为无论是CString还是vector都是通过动态分配内存存储的自动管理,所以不必过分关注内存组织或异常情况.把每一次打开的文件内容都先加载到一个临时CString中再存入vector内并将其显示在主界面文本框中,在每一次重新读文本时,都会用文本框的内容刷新当前所读CString并换掉vector中相应位置元素,这样就实现了对文本的修改与读音同步.这种存储方式不仅对文档的内容进行了存储,还轻松地实现了对所加载的多篇文档进行切换[14].

5 结束语

鉴于语音合成技术的广泛应用,笔者以微软的SDK为例,为编程开发人员或者有一定软件相关基础的初学者讲述了开发文本到语音转换相关系统的一些基本知识,设计了语音阅读系统的基本功能框架.笔者的主要工作和成果如下.

1)讲述语音合成技术使用的SDK工具以及相应接口.

2)列举文本到语音转换时经常用到的相应的接口和相关的函数,使读者基本了解到要使用语音合成开发语音方面的软件基本要做的工作.

3)设计语音阅读系统的基本功能框架,方便读者根据股票功能框架了解基本的技术点,减少了开发中的工作.

4)分别讲述了语音合成开发语音方面的软件使用的基本类和类中包含的函数以及该函数的功能,进一步使读者了解了语音合成.

参考文献:

[1] 王炳锡,王洪.变速率语音编码[M].西安:西安电子科技大学出版社,2004.

[2] 刘幺和,宋庭新.语音识别与控制应用技术[M].北京:科学出版社,2008.

[3] Moulines Eric. Charpentier Francis.Pitch-synchronous w-eform processing techniques for text-to-speech synthesis us-ing diphones[J]. Speech Communication, 1990(9): 1-10.

[4] Sleepwom. VC使用TTS发声[EB/OL]. [2010 - 05 - 18].http:// www.cppblog.com/sleepwom/archive/2010/05/18/

115742.html.

[5] 王立峰,梁智颖.微软产品集成[M].北京:科学出版社,2005.

[6] 杨家沅.语音识别与合成[M].成都:四川科学技术出版社,1994.

[7] 潘爱民,刘彤.COM原理与应用[M].北京:清华大学出版社,2002.

[8] 党建成,周晶.语音合成技术及其应用[J].计算机与信息技术,2007(6):31-33.

[9] Microsoft Corporation. Microsoft Windows SDK for Win-dows 7 and .NET Framework 4[EB/OL]. [2016-01-01]. http:// www.microsoft.com/ en-us/ download/ details.aspx?id等于8279.

[10] 赵常寿,吴红权,张玉忠.VC++开发基于Microsoft Spee-ch SDK的TTS软件[J].电脑编程技巧与维护,2013(19):13-18.

[11] 韩忠军. .NET平台下SAPI语音接口的C#开发与应用[J].实验室研究与探索,2010(8):175-179.

[12] 张艳.基于MFC平台下的语音识别系统的设计[J].电脑与电信,2010(3):53-55.

[13] 吴振宇.个性特征的语音合成与模拟技术研究[D].上海:华东师范大学,2011.

[14] Stanley B, Lippman Barbara E, Moo Josée LaJoie. C++Primer中文版[M].李师贤,译.4版.北京:人民邮电出版社,2006.

(责任编辑 邸开宇)

语音合成论文范文结:

关于语音合成方面的的相关大学硕士和相关本科毕业论文以及相关语音合成论文开题报告范文和职称论文写作参考文献资料下载。