微软TTS语音引擎编程入门.docx

上传人:scccc 文档编号:12764236 上传时间:2021-12-06 格式:DOCX 页数:6 大小:16.82KB
返回 下载 相关 举报
微软TTS语音引擎编程入门.docx_第1页
第1页 / 共6页
微软TTS语音引擎编程入门.docx_第2页
第2页 / 共6页
微软TTS语音引擎编程入门.docx_第3页
第3页 / 共6页
微软TTS语音引擎编程入门.docx_第4页
第4页 / 共6页
微软TTS语音引擎编程入门.docx_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《微软TTS语音引擎编程入门.docx》由会员分享,可在线阅读,更多相关《微软TTS语音引擎编程入门.docx(6页珍藏版)》请在三一文库上搜索。

1、我们都使用过一些某某词霸的英语学习工具软件,它们大多都有朗读的功能, 其实这就是利用的的 TTS(Text To Speech)语音引擎。它包含在 WindowsSpeech SDK开发包中。我们也可以使用此开发包根据自己的需要开发程序。鸡啄米下面 对TTS功能的过程进行详细介绍。一. SAPI SDK的介绍SAPI,全称是 The Microsoft Speech API。就是微软的语音 API。 由 Windows Speech SDK提供。Windows Speech SDK包含语音识别SR引擎和语音合成SS引擎两 种语音引擎。 语音识别引擎用于识别语音命令, 调用接口完成某个功能, 实

2、现语 音控制。语音合成引擎用于将文字转换成语音输出。SAPI 包括以下几类接口: Voice CommandsAPI、Voice Dictation API、Voice Text API 、Voice Telephone API 和 Audio Objects API 。我们要实 现语音合成需要的是 Voice Text API 。目前最常用的 WindowsSpeech SDK版本有三种:5.1、5.3和5.4。Windows Speech SDK5.1 版本支持 xp 系统和 server 2003 系统, 需要下载安装。XP系统默认只带了个Microsoft Sam英文男声语音库,想要中

3、 文引擎就需要安装 Windows Speech SDK 5.1。Windows Speech SDK 5.3 版本支持 Vista 系统和 Server 2008 系 统,已经集成到系统里。 Vista 和 Server 2003 默认带 Microsoft lili 中文女 声语音库和 Microsoft Anna 英文女声语音库。Windows Speech SDK 5.4版本支持 Windows7系统,也已经集成 到系统里,不需要下载安装。Win7系统同样带了 Microsoft lili中文女声语音 库和 Microsoft Anna 英文女声语音库。 Microsoft lili

4、支持中英文混读。二. SAPI SDK的下载和安装如果是在XP系统下进行开发则需要下载 Microsoft Speech SDK5.1 ,下载地址为:。根据微软下载说明,有几点需要注意:1. 如果你想下载例子程序、文档、SAPI和用于开发的美国英文语 音引擎,请下载 SpeechSDK51.exe。2. 如果你想使用日文和简体中文引擎用于开发,请下载SpeechSDK51.exe和 SpeechSDK51LangPach.exe3. 如果你想将语音引擎集成到你的产品跟产品一起发布,就下载 SpeechSDK51MSM.exe4. 如果你仅想获得 XP 系统下的 Mike 和 Mary 语音,就

5、下载 S p 5TTIntXP . ex e 。5. 如果你只想要文档请下载 sapi.chm 。下载完成后可先安装引擎SpeechSDK51.exe再安装中文语言补 丁包 SpeechSDK51LangPach.exe 这样就可以使用其中的中 文男声语音库了。 如果想要在 Vista 或 Win7 系统下使用 Mike、Mary 和 Microsoft Simplified Chinese 中文男声语音库也可以下载相应的文件安装。三. VC+环境配置如果是在XP系统下开发,先安装 SpeechSDK51.exe再安装 SpeechSDK51LangPach.ex,e 假设安装路径为默认的 C

6、:Program Files'MicrosoftSpeech SDK5.1,则接下来需要配置 VC+ 以为 例,在 SolutionExporer 中的工程名上点右键,在右键菜单中选择 properties ,弹出 Property Pages对话框,然后在左侧树中选择节点”VC+Directories “,在右侧列表的Include Directories 处输入” C:Program FilesMicrosoft Speech SDKInclude “, Library Directories 处输入” C:Program FilesMicrosoft i386 “。VS2005

7、VS2008和VC6.0可以按照各自的方法设最后,在程序中使用语音引擎以前包含头文件和 lib 库:#include "sapi.h"#include "sphelper.h"#pragma comment(lib, "sapi.lib")如果是在Vista或者Win7系统中开发的话,因为头文件和lib 库所在路径已默认附加到编译器了, 所以不需手动添加, 直接在程序中包含头文 件和 lib 库即可。四. SAPI接口的使用说明1. 基本朗读过程的实现在使用语音引擎之前进行初始化:ISpVoice *pSpVoice;/ 重要 COM

8、接 口:CoInitialize(NULL);/ COM 初始化/ 获取 ISpVoice 接口CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_INPROC_SERVER, IID_ISpVoice, (void*)&pSpVoice);获取到 ISpVoice 接口以后,我们就可以通过 pSpVoice 指针调用SAPI 接口了。我们可以设置音量: pSpVoice->SetVolume(80); 。 SetVolume 的 参数即音量的范围在 0 到 100 之间。可以这样朗读字符串内容: pSpVoice->Speak(str

9、ing, SPF_DEFAULT, NULL)。; 这样 string 里的内容就会被朗读出来了,第二个参数 SPF_DEFAUL表示使用默认设置,包括同步朗读的设置。异步朗读可以设置成 SPF_ASYNC同步朗读表示读完string 中的内容,speak函数才会返回,而异步 朗读则将字符串送进去就返回,不会阻塞。使用完语音引擎后应执行:pSpVoice->Release();:CoUninitialize();这样资源被释放,语音朗读过程结束。以上就完成了一个简单的语音合成朗读的功能。2.ISpVoice 的成员函数鸡啄米再简单说明几个 ISpVoice 接口的成员函数:HRESULT

10、 Speak(LPCWSTR *pwcs, DWORD dwFlags, ULONG *pulStreamNumber);用于读取字符串pwcs里的内容。参数pwcs为要朗读的字符串。 dwFlags 是用于控制朗读方式的标志,具体意义可以查看文档中的枚举 SPEAKFLAGSulStreamNumber为输出参数,它指向本次朗读请求对应的当前输 入流编号,每次朗读一个字符串时都会有一个流编号返 回,异步朗读时使用。HRESULTSetRate( long RateAdjust);/设置朗读速度,取值范围: -10 到 10HRESULTGetRate(long *pRateAdjust);/

11、 获取朗读速度HRESULT SetVoice(ISpObjectToken *pToken);/设置使用的语音库HRESULTGetVoice(ISpObjectToken* ppToken); / 获取语音HRESULT Pause( void ); / 暂停朗读HRESULT Resume( void );/ 恢复朗读/ 在当前朗读文本中根据 lNumItems 的符号向前或者向后跳 过指定数量( lNumItems 的绝对值)的句子。HRESULT Skip(LPCWSTR *pItemType, long lNumItems, ULONG *pulNumSkipped);/ 播放WA

12、X文件HRESULT SpeakStream(IStream *pStream,DWORDdwFlags, ULONG*pulStreamNumber);/将声音输出到WAX文件HRESULT SetOutput(IUnknown *pUnkOutput,BOOL fAllowFormatChanges);HRESULTSetXolume(USHORTusXolume);/ 设置音量,范围: 0 到 100HRESULT GetXolume(USHORT *pusXolume); / 获取音量HRESULT SetSyncSpeakTimeout(ULONGmsTimeout); / 设置同步

13、朗读超时时间,单位为毫秒HRESULTGetSyncSpeakTimeout(ULONG*pmsTimeout); / 获取 同步朗读超时时间因为在同步朗读时, speak 函数是阻塞的,如果语音输出设备被 其他程序占用,则 speak 则会一直等待, 所以最好设置好超时时间, 超时后 speak 函数自行返回。3.使用XML朗读在进行TTS开发时可以使用XML SAPI可以分析XML标签,通过 XML能够实现一些ISpVoice的成员函数的功能。比如设置语音库、音量、语速 等。此时speak函数的dwFlags参数要设置为包含SPF_IS_XML如:/ 选择语音库 Microsoft Sam

14、pSpXoice->speak(L"<XOICE REQUIRED='NAME=MicrosofStam'/> 鸡啄米", SPF_DEFAULT | SPF_IS_XML, NULL);/ 设置音量vVOLUME LEVEL='9O鸡啄米 v/VOLUME>/ 设置语言<lang langid='804'> 鸡啄米 </lang>804 代表中文, 409 代表英文。如果用函数SpGetLanguageFromToke获取语言时,0x804表示中文,0x409表示英文。五. Micro

15、sofot Speech SDK开发程序举例:Col ni tialize(NULL);/ COM初始化CLSlD CLSlD_SpVoice; CLSlDFromProglD(_T("SAPl.SpVoice"), &CLSlD_SpVoice); lSpVoice *pSpVoice = NULL;lEnumSpObjectTokens *pSpEnumTokens = NULL;/ 获取 lSpVoice 接口if (FAlLED(CoCreatelnstance(CLSlD_SpVoice, NULL, CLSCTX_lNPROC_SERVER, llD_l

16、SpVoice, (void*)&pSpVoice)return -1;/ 列举所有的语音token ,可以通过pSpEnumTokenS旨向的接口 得到if (SUCCEEDED(SpEnumTokens(SPCAT_VOlCES, NULL, NULL, &pSpEnumTokens)lSpObjectToken *pSpToken = NULL; / 依次获取每个 token 并朗读字符串 while (SUCCEEDED(pSpEnumTokens->Next(1&,pSpToken, NULL) &&pSpToken!= NULL) pS

17、pVoice->SetVoi ce(pSpToken);/ 设置当前语音 token 为 pSpTokenpSpVoice->Speak(L "Hello Word 世界你好 ", SPF_DEFAULTN,ULL);/ 朗读中文和英文的混合字符串pSpToken->Release ();/ 释放 tokenpSpEnumTokens->Release(); / 释放 pSpEnumToken接口pSpVoice->Release();:CoUninitialize();鸡啄米通过调试和朗读效果得出结论, Vista 和 Win7 上的 Mic

18、rosoft Lili 语音库可以中英文混读, Microsoft Speech SDK 5.1 中的中文 男声 Microsoft Simplified Chinese 语音库朗读英文的时候只能一个字母一个 字母的读,Anna Mike、Sam只能读英文,中文略过。那么 Microsoft Simplified Chinese 、Anna Mike、Sam怎样实 现中英文混读呢?鸡啄米告诉大家,可以修改字符串,加入XML标记,将中文和英文分别处理, 上面程序中 的字符串可以修改为: L"<lang langid='409'>Hello Word</

19、lang> <lang langid='804'> 世界你好 </lang>" 。这样当前语音库不能读 的语言会自动选择同性别的其他语音来读。六. 如何制作 SAPI 组件安装包SAPI开发的程序想要正常运行,必须保证计算机上安装了 SAPI 组件,所以我们的软件发布时最好同时发布 SAPI核心组件的安装程序,如果需 要安装新的语言,还要有语言模块。这就需要用到讲 SDK下载时提到的SpeechSDK51MSM.exeSpeechSDK51MSM.e>安装完以后会生成三个文件夹:1033、1041 和2052。其中,1033下主要是

20、用于英文的 TTS和SR的.msm文件,1041下主要 是用于日文SR的.msm文件,2052下是用于中文TTS和SR的msm文件。我们要开发的是TTS程序,所以不需要SR的相关文件。英文TTS需要包含 1033 下的这些文件:Sp5.msm Sp5Intl.msm、Sp5itn.msm、 Sp5TTInt.msm、SpCommon.m§n如果需要 Mike 和 Mary 的语音还需 Sp5TTIntXP.msm文件。如果还要支持中文 TTS则需再包含2052下的文件: Sp5Intl.msm 、 Sp5itn.msm、 SP5TTINTr.msm。仍以VS2010为例,安装包制作的

21、具体过程如下:1. 选择 File->new->project ,弹出 NewProject 对话框,在左侧 面板中的 Installed Templates 下展开 Other Project Types ,继续展开起子节 点 Setup and Deployment ,最后选择 Visual Studio Installer ,右侧面板中选 择Setup Project,最后在对话框下部,设置好名称和路径点“ OK就生成工程 了。对于没有集成 Visual Studio Installer的老版本的编译器,可以在网上下载 Microsoft Visual Studio Inst

22、aller。2. 在 Solution Explorer 中的工程名上点右键, 然后在右键菜单 中选择Add->Merge Module,最后在弹出的对话框中选择上面提到的所要包含 的.msm文件即可。3. 编译运行工程,若是Debug模式则会在工程目录的Debug文件 夹下生成相应的 msi 文件,若是 Release 模式则会在 Release 目录下声称 msi 文件。SAPI 安装包到此就制作好了,我们也可以将我们的应用程序 exe 文件也一同打到安装包里。这样运行安装程序后就会将应用程序和 SAPI 组件都 装到目标主机里,应用程序可以直接运行。关于Windows TTS语音引擎的知识鸡啄米就总结完了,大家可以继续探索,开发出各种有趣的语音程序。6

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1