




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、我们都使用过一些某某词霸的英语学习工具软件,它们大多都有朗读的功能,其实这就是利用的 Windows的TT(Text To Speech)语音引擎。它包含在 WindowsSpeech SDK开发包中。我们也可以使用此开发包根据自己的需要开发程序。鸡 啄米下面对TTS功能的软件开发过程进行详细介绍。一. SAPI SDK的介绍SAPI ,全称是The Microsoft Speech API 。就是微软的语音 API。由 Win dows Speech SDK提 供。Windows Speech SDK包含语音识别SR引擎和语音合成SS引擎两种语音引擎。语音识别引擎用于识别语音命令,调用接口完
2、成某个功能,实现语音控制。 语音合成引擎用于将文字转换成语音输出。SAPI 包括以下几类接口: Voice CommandAPI、Voice Dictation API、 Voice Text API 、Voice Telephone API 和 Audio Objects API 。我们要实现语 音合成需要的是 Voice Text API。目前最常用的 Windows Speech SDK版本有三种:5.1、5.3和5.4。Windows Speech SDK 5.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 SDK 5.1,下载地址为:c根据微软下载说明,有几点需要注意:1. 如果你想下载例子程序、文档、SAPI和用于开发的美国英文语音引擎, 请下载 SpeechSDK51.exe2. 如果你想使用日文和简体中文引擎用于开发,请下载SpeechSDK51.exe和 SpeechSDK51LangPach.exe3. 如果你想将语音引擎集成到你的产品跟产品一起发布,就下载SpeechSDK51MSM.exe4. 如果你仅想获得XP系统下的Mike和Mary语音,就下载Sp5TTIntXP.exe。
5、5. 如果你只想要文档请下载sapi.chm。下载完成后可先安装引擎SpeechSDK51.exe再安装中文语言补丁包 SpeechSDK51La ngPach.exe这样就可以使用其中的中 文男声语音库了。如果想 要在 Vista 或 Win7 系统下使用 Mike、Mary 和 Microsoft Simplified Chinese 中文男声语音库也可以下载相应的文件安装。三. VC+环境配置如果是在XP系统下开发,先安装 SpeechSDK51.exe再安装 SpeechSDK51LangPach.exe 假设安装路径为默认的 C:Program Files'Microsoft
6、 Speech SDK5.1,则接下来需要配置 VC+ 以 VS2010为 例, 在Solution Exporer中的工程名上点右键,在右键菜单中选择properties,弹出Property Pages对话框,然后在左侧树中选择节点”VC+Directories “,在右侧列表的 Include Directories处输入” C:Program FilesMicrosoft SpeechInclude “,Library Directories 处输入” C :Programi386 “。VS2005 VS2008和 VC6.0 可以 按照各自的方法设置。最后,在程序中使用语音引擎以前包
7、含头文件和lib库:#in clude "sapi.h"#in clude "sphelper.h"#pragma comme nt(lib, "sapi.lib")如果是在Vista或者Win7系统中开发的话,因为头文件和lib库所在路 径已默认附加到编译器了,所以不需手动添加,直接在程序中包含头文件和lib库即可。四. SAPI接口的使用说明1. 基本朗读过程的实现在使用语音引擎之前进行初始化:ISpVoice *pSpVoice; /重要 COM接 口:CoI ni tialize(NULL);/ COM初始化/ 获取 ISpV
8、oice 接口CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_INPROC_SERVER, IID_ISpVoice, (void*)&pSpVoice);获取到 ISpVoice 接口以后,我们就可以通过 pSpVoice 指针调用 SAPI 接口了。我们可以设置音量: pSpVoice->SetVolume(80); 。 SetVolume 的参数即 音量的范围在 0 到 100 之间。可以这样朗读字符串内容: pSpVoice->Speak(string, SPF_DEFAULT, NULL);。这样string 里的内容就会
9、被朗读出来了,第二个参数 SPF_DEFAUL表 示使用默认设置,包括同步朗读的设置。异步朗读可以设置成SPF_ASYNC同步 朗读表示读完 string 中的内容, speak 函数才会返回,而异步朗读则将字符串 送进去就返回,不会阻塞。使用完语音引擎后应执行:pSpVoice->Release();:CoUninitialize();这样资源被释放,语音朗读过程结束。以上就完成了一个简单的语音合成朗读的功能。2.ISpVoice 的成员函数鸡啄米再简单说明几个 ISpVoice 接口的成员函数:HRESULT Speak(LPCWSTR *pwcs, DWORD dwFlags, U
10、LONG *pulStreamNumber);用于读取字符串pwcs里的内容。参数pwcs为要朗读的字符串。dwFlags 是用于控制朗读方式的标志,具体意义可以查看文档中的枚举SPEAKFLAGSpulStreamNumber为输出参数,它指向本次朗读请求对应的当前输入流编号,每次朗读一个字符串时都会有一个流编号返回,异步朗读时使用。HRESULT SetRate( long RateAdjust);/设置朗读速度,取值范围: -10 到 10HRESULT GetRate(long *pRateAdjust);/获取朗读速度HRESULT SetVoice(ISpObjectToken *
11、pToken); /设置使用的语音库HRESULT GetVoice(ISpObjectToken*ppToken); /获取语音库HRESULT Pause ( void );/暂停朗读HRESULT Resume ( void ); / 恢复朗读/ 在当前朗读文本中根据 lNumItems 的符号向前或者向后跳过指定数 量( lNumItems 的绝对值)的句子。HRESULT Skip(LPCWSTR *pItemType, long lNumItems, ULONG *pulNumSkipped);/播放WAV文件HRESULT SpeakStream(IStream *pStream
12、, DWORD dwFlags, ULONG *pulStreamNumber);/将声音输出到WAX文件HRESULT SetOutput(IUnknown *pUnkOutput,BOOL fAllowFormatChanges);HRESULT SetVolume(USHORT usVolume); / 设置音量,范围: 0 到 100HRESULT GetVolume(USHORT *pusVolume); / 获取音量HRESULT SetSyncSpeakTimeout(ULONG msTimeout); / 设置同步 朗读超时时间,单位为毫秒HRESULT GetSyncSpea
13、kTimeout(ULONG *pmsTimeout); /获取同步朗读超时时间因为在同步朗读时, speak 函数是阻塞的,如果语音输出设备被其他程 序占用, 则 speak 则会一直等待, 所以最好设置好超时时间, 超时后 speak 函数 自行返回。3.使用XML朗读在进行TTS开发时可以使用XML SAPI可以分析XML标签,通过XML能 够实现一些 ISpVoice 的成员函数的功能。比如设置语音库、音量、语速等。此 时speak函数的dwFlags参数要设置为包含 SPF_IS_XM。如:/ 选择语音库 Microsoft Sam pSpVoice->speak(L"
14、;<VOICE REQUIRED='NAME=Microsoft Sam'/> 鸡啄米 ", SPF_DEFAULT | SPF_IS_XML, NULL);/设置音量vVOLUME LEVEL='90'> 鸡啄米 v/VOLUME>/设置语言<lang langid='804'>鸡啄米 </lang>804 代表中文,409代表英文。如果用函数 SpGetLanguageFromToker获 取语言时, 0x804 表示中文, 0x409 表示英文。五. Microsofot Speec
15、h SDK开发程序举例:CoInitialize(NULL); / COM初始化CLSID CLSID_SpVoice;CLSIDFromProgID(_T("SAPI.SpVoice"), &CLSID_SpVoice);ISpVoice *pSpVoice = NULL;IEnumSpObjectTokens *pSpEnumTokens = NULL;/ 获取 ISpVoice 接口if (FAILED(CoCreateInstance(CLSID_SpVoice, NULL,CLSCTX_INPROC_SERVER, IID_ISpVoice, (void*
16、)&pSpVoice)return -1;/列举所有的语音token,可以通过pSpEnumToken指向的接口得到if (SUCCEEDED(SpEnumTokens(SPCAT_VOICES, NULL, NULL, &pSpEnumTokens)ISpObjectToken *pSpToken = NULL;/依次获取每个 token 并朗读字符串while (SUCCEEDED(pSpEnumTokens->Next(1, &pSpToken,NULL) && pSpToken != NULL) pSpVoice->SetVoice(
17、pSpToken); /设置当前语音 token 为 pSpTokenpSpVoice->Speak(L"Hello Word世界你好 ",SPF_DEFAULT, NULL); / 朗读中文和英文的混合字符串 pSpToken->Release(); /释放 tokenpSpEnumTokens->Release(); /释放pSpE nu mToke n接口pSpVoice->Release();:CoUninitialize();鸡啄米通过调试和朗读效果得出结论,Vista和Win7上的MicrosoftLili 语音库可以中英文混读, Mic
18、rosoft Speech SDK 5.1 中的中文男声 Microsoft Simplified Chinese 语音库朗读英文的时候只能一个字母一个字母 的读,Anna Mike、Sam只能读英文,中文略过。那么 Microsoft Simplified Chinese 、Anna Mike、Sam怎样实现中英 文混读呢?鸡啄米告诉大家,可以修改字符串,加入XMLS记,将中文和英文分 别处理,上面程序中 的字符串可以修改为: L"<lang langid='409'>Hello Word</lang> <lang langid=
19、9;804'> 世界你好 </lang>" 。这样当前语音库不能读 的语言会自动选择同性别的其他语音来读。六. 如何制作SAPI组件安装包SAPI 开发的程序想要正常运行,必须保证计算机上安装了 SAPI 组件, 所以我们的软件发布时最好同时发布 SAPI核心组件的安装程序,如果需要安装 新的语言,还要有语言模块。这就需要用到讲 SDK下载时提到的SpeechSDK51MSM.exeSpeechSDK51MSM.exe 安装完以后会生成三个文件夹: 1033、 1041和2052。 其中,1033下主要是用于英文的TTS和SR的.msm文件,1041下主要是用于日 文SR的.msm文件,2052下是用于中文TTS和SR的msm文件。我们要开发的是TTS程序,所以不需要SR的相关文件。英文TTS需要 包含 1033 下的这些文件:Sp5.msmSp5Intl.msm、Sp5itn.msm、Sp5TTInt.msm、 SpCommon.msm如果需要 Mike和Mary的语音还需Sp5TTIntXP.msm文件。如果 还要支持中文 TTS 则需再包含 2052下的文件: Sp5Intl.msm 、 Sp5itn.msm、 SP5TT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信阳涉外职业技术学院《深度学习实验》2023-2024学年第二学期期末试卷
- 2025至2031年中国移动式记事板行业投资前景及策略咨询研究报告
- 2025-2030年中国B超仪行业市场运行趋势分析及投资预测研究报告
- 广东省广州市越秀区知用中学2024届中考数学仿真试卷含解析
- 2025公司项目负责人安全培训考试试题5A
- 2024-2025企业员工安全培训考试试题附参考答案【黄金题型】
- 2024-2025项目管理人员年度安全培训考试试题附完整答案(网校专用)
- 25年公司厂级员工安全培训考试试题及一套答案
- 25年公司、项目部、各个班组安全培训考试试题及参考答案(培优B卷)
- 2025工厂员工安全培训考试试题1套
- 数字化转型对企业财务绩效影响研究
- 公路养护施工组织设计 公路设施、交安设施、公路绿化日常维护管理施工方案
- 软瓷产品原材料供应与需求分析
- 部编本一年级下册1、吃水不忘挖井人名师公开课获奖课件百校联赛一等奖课件
- 黄金销售合同书
- 【加盖拧盖装置的总体方案设计12000字(论文)】
- 五年级下册英语教案-Unit 3 Lesson 17 Danny's Email(冀教版)
- 土壤样品制备实验室建设规范
- 2024年银行校园招聘入职考试模拟试题及答案(共三套)
- 伟大的《红楼梦》智慧树知到期末考试答案章节答案2024年北京大学
- 地下车库地坪施工金刚砂地坪施工方法及工艺要求
评论
0/150
提交评论