收藏 分享(赏)

基于SpeechSDK开发中英文混合朗读程序.doc

上传人:tkhy51908 文档编号:7105395 上传时间:2019-05-06 格式:DOC 页数:4 大小:46.50KB
下载 相关 举报
基于SpeechSDK开发中英文混合朗读程序.doc_第1页
第1页 / 共4页
基于SpeechSDK开发中英文混合朗读程序.doc_第2页
第2页 / 共4页
基于SpeechSDK开发中英文混合朗读程序.doc_第3页
第3页 / 共4页
基于SpeechSDK开发中英文混合朗读程序.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

1、基于 Speech SDK 开发中英文混合朗读程序摘 要 中英文混合朗读一直是个难点,本文在分析 Microsoft Speech SDK 中英文引擎的基础上,提出了根据文本类型实时切换中英文引擎的方法,在 Visual C+6.0 中实现了一个示例程序。关键词 Speech SDK;中英文混合朗读; Visual C+ 1 Speech SDK 简介语音识别(SR)和语音合成(TTS)一直是计算机应用的热点,如果你想在 Windows 平台上开发具有语音识别和语音合成功能的应用程序,使用 Microsoft Speech SDK 是较好的选择。现在许多应用程序的语音识别和语音合成部分,例如金

2、山词霸,就是在此基础上开发的。Microsoft Speech SDK 是微软公司推出的支持语音应用程序开发的工具包,其最新版本是 5.1,可以在微软的网站免费下载,如果要支持中文,还要下载相应的 Language Pack。下载后先安装 Speech SDK,再安装简体中文语言包,这样你的计算机就具有中英文语音能力了。下面介绍在 Visual C+6.0 中如何利用 Speech SDK 开发中英文全文朗读的程序。2 SpVoice 类介绍SpVoice 类是支持语音合成(TTS)的核心类。通过 SpVoice 对象调用 TTS 引擎,从而实现朗读功能。 SpVoice 类有以下主要属性:V

3、oice:表示发音类型,相当于进行朗读的人,包括 Microsoft Mary,Microsoft Mike,Microsoft Sam 和 Microsoft Simplified Chinese 四种。其中前三种只能读英文,最后一种可以读中文,也可以读英文,但对于英文单词只能将其包括的各个字母逐一朗读出来。下面的程序中我们将会想办法解决这个问题。Rate:语音朗读速度,取值范围为-10 到+10。数值越大,速度越快。Volume:音量,取值范围为 0 到 100。数值越大,音量越大。SpVoice 有以下主要方法:Speak:完成将文本信息转换为语音并按照指定的参数进行朗读,该方法有 Te

4、xt 和Flags 两个参数,分别指定要朗读的文本和朗读方式(同步或异步等) 。Pause:暂停使用该对象的所有朗读进程。该方法没有参数。Resume:恢复该对象所对应的被暂停的朗读进程。该方法没有参数。3 建立工程并导入类型库建立一个名字为 mytts 的 MFC AppWizard(exe) 工程,在 step1 里面选择 Dialog Based,在 step2 里面把 Automation 选项勾上。 其它的选默认值。查找 spai.dll,将其拷贝到工程的 res 目录,打开 MFC ClassWizard,选择 Automation 页,单击按钮“Add Class“,选择“Fro

5、m a type library“,选中“sapi.dll“ 文件,这时系统会出现 confirm Classes 对话框,询问将要导入的类,我们全部选中。4 增加控件给对话框 IDD_MYTTS_DIALOG 增加控件,结果如图 1 所示。图 1 程序界面5 编写代码这里只说明关键的代码,完整代码可参考源文件。1) 对话框的初始化这里主要完成语音对象的速度,音量等基本参数的设置。BOOL CMyttsDlg:OnInitDialog() CLSIDFromProgID(L“SAPI.SpVoice“,&CLSID_ SpVoice) ;voice.CreateDispatch(CLSID_S

6、pVoice); /创建一个对象pDisp = voice.m_lpDispatch;HRESULT hr = pDisp-QueryInterface(CLSID_SpVoice,(void*)&voice.m_lpDispatch) ;if (hr = S_OK) pDisp-Release();else voice.AttachDispatch(pDisp,TRUE); /关联对象与接口voice.SetRate(0);/设置速度voice.SetVolume(100);/设置音量voiceList=voice.GetVoices(NULL,NULL); /读取语音列表:m_Text=“

7、你好 How are you“;/设置要阅读的初始文本UpdateData(FALSE);2) 阅读按钮的代码这部分代码是本程序的核心,主要解决的问题是实现中英文引擎的实时切换。实现方法是这样:依次处理文本中的每个字符,判断该字符的中英文类型,若其类型与前面的字符一致,继续处理后面的字符。直到发现一个字符与前面字符的类型不一致时,将前面的字符读出来(当然要根据字符类型设置相应的引擎) ,然后再处理后面的字符。具体代码如下:void CMyttsDlg:OnBtnRead()long i,len;char curr;CString str;int flagPre,flagCur ;int icn

8、t, first;UpdateData(TRUE); len=m_Text.GetLength();flagPre=iChn;icnt=0;first=0 ;for (i=0;i=A & curr=a & curr=z) flagCur=iEng;/ 如果是英文字母,标志设为 0else flagCur=iChn;/否则标志设为 3if (flagCur=flagPre) icnt+;else if (icnt!=0) /字符类型变化,读出前面的文本 voice.SetRefVoice(voiceList.Item(flagPre);str=m_Text.Mid(first,icnt);voi

9、ce.Speak(str,1);flagPre=flagCur;first=i;icnt=1;/读出最后一段文本voice.SetRefVoice(voiceList.Item(flagPre);str=m_Text.Mid(first,icnt);voice.Speak(str,1); 6 总结本文给出了一种根据文本类型实时切换 Microsoft Speech SDK 的中英文引擎的方法,程序在 Windows 2000 和 Visual C+6.0 环境中调试通过。读者可以在此基础上添加其它功能。参考文献1 毕晓君,静广宇,徐先锋利用 TTS 技术实现文本文件的语音合成J 自动化技术与应用,2004,23(9):49-512 徐雨明在 VFP 中调用 MSTTS 技术实现英文语音输出的方法J 电脑编程技巧与维护,2001(1):17,243 陈再良,沈海澜基于 MSTTS 英文朗读功能的实现J计算机时代,2002(4) :34-35

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报