好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

微软TTS语音引擎深度开发入门.docx

6页
  • 卖家[上传人]:人***
  • 文档编号:419315262
  • 上传时间:2022-12-27
  • 文档格式:DOCX
  • 文档大小:20.34KB
  • / 6 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • Windows TTS 开发介绍开篇介绍:我们都使用过一些某某词霸的英语学习工具软件,它们大多都有朗读的功能, 其实这就是利用的Windows的TTS(Text To Speech)语音引擎它包含在Windows Speech SDK开发包中我们也可以使用此开发包根据自己的需要开发程序鸡 啄米下面对TTS功能的软件开发过程进行详细介绍一.SAPI SDK的介绍SAPI,全称是The Microsoft Speech API就是微软的语音API由 Windows Speech SDK 提供Windows Speech SDK包含语音识别SR引擎和语音合成SS引擎两种语音 引擎语音识别引擎用于识别语音命令,调用接口完成某个功能,实现语音控制 语音合成引擎用于将文字转换成语音输出SAPI 包括以下几类接口: Voice Commands API、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英文男声语音库,想要中文引 擎就需要安装 Windows Speech SDK 5.1Windows 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 支持中英文混读二SAPI SDK的下载和安装如果是在XP系统下进行开发则需要下载Microsoft Speech SDK 5.1, 下载地址为: 如果你想下载例子程序、文档、SAPI和用于开发的美国英文语音引擎, 请下载 SpeechSDK51.exe。

      2. 如果你想使用日文和简体中文引擎用于开发,请下载SpeechSDK51.exe 和 SpeechSDK51LangPach.exe3. 如果你想将语音引擎集成到你的产品跟产品一起发布,就下载 SpeechSDK51MSM.exe4. 如果你仅想获得 XP 系统下的 Mike 和 Mary 语音,就下载 Sp5TTIntXP.exe5. 如果你只想要文档请下载 sapi.chm下载完成后可先安装引擎SpeechSDK51.exe,再安装中文语言补丁包 SpeechSDK51LangPach.exe,这样就可以使用其中的中 文男声语音库了如果想 要在 Vista 或 Win7 系统下使用 Mike、 Mary 和 Microsoft Simplified Chinese 中文男声语音库也可以下载相应的文件安装三.VC++环境配置如果是在 XP 系统下开发,先安装 SpeechSDK51.exe 再安装SpeechSDK51LangPach.exe,假设安装路径为默认的 C:\Program Files\Microsoft Speech SDK 5.1,则接下来需要配置 VC++,以 VS2010 为 例, 在Solu tion Exporer中的工程名上点右键,在右键菜单中选择proper ties,弹 出Property Pages对话框,然后在左侧树中选择节点”VC++Directories“,在 右侧列表的 IncludeDirectories 处输入” C:\ProgramFiles\Microsoft Speech SDK 5.1\Include“,Library Direc to ries 处输入"C:\Program Files\Microsoft Speech SDK 5.1\lib\i386“。

      VS2005、 VS2008 和 VC6.0 可以 按照各自的方法设置最后,在程序中使用语音引擎以前包含头文件和 lib 库:#include "sapi.h"#include "sphelper.h"#pragma comment(lib, "sapi.lib")如果是在 Vista 或者 Win7 系统中开发的话,因为头文件和 lib 库所在路 径已默认附加到编译器了,所以不需手动添加,直接在程序中包含头文件和 lib 库即可四・SAPI接口的使用说明1. 基本朗读过程的实现 在使用语音引擎之前进行初始化://重要COM接口// COM 初始化ISpVoice *pSpVoice;::CoInitialize(NULL);// 获取 ISpVoice 接口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);这样st ring里的内容就会被朗读出来了,第二个参数SPF_DEFAULT表 示使用默认设置,包括同步朗读的设置异步朗读可以设置成SPF_ASYNC同步 朗读表示读完st ring中的内容,speak函数才会返回,而异步朗读则将字符串 送进去就返回,不会阻塞使用完语音引擎后应执行:pSpVoice->Release();::CoUninitialize();这样资源被释放,语音朗读过程结束以上就完成了一个简单的语音合成朗读的功能2.ISpVoice 的成员函数鸡啄米再简单说明几个 ISpVoice 接口的成员函数:HRESULT Speak(LPCWSTR *pwcs, DWORD dwFlags, ULONG *pulStreamNumber);用于读取字符串pwcs里的内容参数pwcs为要朗读的字符串dwFlags 是用于控制朗读方式的标志,具体意义可以查看文档中的枚举 SPEAKFLAGS pulStreamNumber 为输出参数,它指向本次朗读请求对应的当前输入流编号,每 次朗读一个字符串时都会有一个流编号返 回,异步朗读时使用。

      HRESULT SetRate( long RateAdjust); // 设置朗读速度,取值范围: -10 到 10HRESULT GetRate(long *pRateAdjust); // 获取朗读速度HRESULT SetVoice(ISpObjectToken *pToken); // 设置使用的语 音库HRESULT GetVoice(ISpObjectToken** ppToken); // 获取语音库// 暂停朗HRESULT Pause ( void );HRESULT Resume ( void ); // 恢复朗读// 在当前朗读文本中根据 lNumItems 的符号向前或者向后跳过指定数 量(lNumltems的绝对值)的句子HRESULT Skip(LPCWSTR *pItemType, long lNumItems, ULONG *pulNumSkipped);// 播放 WAV 文件HRESULT SpeakStream(IStream *pStream, DWORD dwFlags,ULONG *pulStreamNumber);// 将声音输出到 WAV 文件HRESULT SetOutput(IUnknown *pUnkOutput,BOOL fAllowFormatChanges);HRESULT SetVolume(USHORT usVolume); // 设置音量,范围:0 到 100HRESULT GetVolume(USHORT *pusVolume); // 获取音量HRESULT SetSyncSpeakTimeout(ULONG msTimeout); // 设置同步朗读超时时间,单位为毫秒HRESULT GetSyncSpeakTimeout(ULONG *pmsTimeout); // 获取同步朗 读超时时间因为在同步朗读时,speak函数是阻塞的,如果语音输出设备被其他程 序占用,则speak则会一直等待,所以最好设置好超时时间,超时后speak函数 自行返回。

      3.使用XML朗读在进行TTS开发时可以使用XML,SAPI可以分析XML标签,通过XML能 够实现一些ISpVoice的成员函数的功能比如设置语音库、音量、语速等此 时speak函数的dwFlags参数要设置为包含SPF_IS_XML如:// 选择语音库 Microsoft SampSpVoice->speak(L〃 鸡啄米 ", SPF_DEFAULT | SPF_IS_XML, NULL);// 设置音量〈VOLUME LEVEL二'90'> 鸡啄米〈/VOLUME〉// 设置语言 鸡啄米 804 代表中文, 409 代表英文如果用函数 SpGetLanguageFromToken 获 取语言时,0x804表示中文,0x409表示英文五.Microsofot Speech 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**)&pSpVoice))){return -1;}//列举所有的语音token,可以通过pSpEnumTokens指向的接口得到 if (SUCCEEDED(SpEnumTokens(SPCAT_VOICES, NULL, NULL, &pSpEnumTokens))){ISpObjectToken *pSpToken = NULL;// 依次获取每个 token 并朗读字符串while (SUCCEEDED(pSpEnumTokens->Next(1, &pSpToken, NULL)) && pSp。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.