版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、使用SAPI实现语音识别与合成实践与经验 德厕褰现语啬钒剔合戚 肖玮 (华东理工大学计算机科学与技术系,上海201512) , 摘要:本文对SpeechSDK中的主要组件接口进行详细介绍,探讨了语音应用的编程实现技术,最后 结合一个实例加以具体说明. 关键词:语音应用程序接口;微软连续语音识别引擎;微软串联语音合成引擎 引言 语音是人类最自然的交互方式,也是现阶段软 件用户界面发展的最高目标.微软公司一直积极 推动语音技术的发展,并且公布了语音开发平台 SpeechSDK帮助开发人员实现语音应用.本文系 统地介绍如何利用SAPI开发语音应用程序. 1SpeeChSDK简介 微软的SpeechS
2、DK是基于COM的视窗操作 系统开发工具包.这个SDK中含有语音应用程序 接口(SAPI),微软连续语音识别引擎(MCSR)以及 串联语音合成(又称文本到语音)引擎(TTS)等等. SAPI中还包括对于低层控制和高度适应性的直接 语音管理,训练向导,事件,语法,编译,资源,语音识 别管理以及文本到语音管理,其结构如图l所示. IISAPIRuntimeI DDI 图1 语音引擎通过设备驱动接口(DDI)和SAPI 运行库通信,应用程序(Application)则通过应用程 序接口(API)层和SAPI交互.通过使用这些API就 能进行语音识别与语音合成方面软件的开发. 2主要的COM接口 (1
3、)ISpVoice 该接口的主要功能是访问,IT】【S实现文本到语 音的转换,其有许多成员函数,具体用法请参考 SDK的相关文档.下面简要介绍一下其几个主要 成员函数的用法: HRESULTSpeakfconstWCHARpwcs. DWORDdwFlags,ULONG$PulStreamNumber):其中 参数pwcs为输入的文本字符串指针,且该文本字 符串必须为Unicode型(在SpeechSDK中所有的 中西文字符都是这种数据类型),如不是则必须先 转换为Unicode型;dwFlags用来标志Speak的方 式,若为SPF-lSXML表示输入文本含有XML标 签;PulStream
4、Number用来获取当前文本输入的等 候播放队列的位置,只有在异步模式才有用. HRESULTSetRate(1ongRateAdjust).HRE. SULTGetRate(1ongpRateAdjiust):设置/获取播放速 度,范围:一1oIO;HRESULTSetVolume(USHORTus Volume),HRESULTGetVolume(USHORTpusVol- ume):设置/获取播放音量,范围:Ol00. HRESULTSetOutputfIUnknownpUnkOutput. BOOLfAllowFormatChangesInProc Recognizer).它们对应的C
5、LSID分别为CLSID SpSharedRecognizer和CLSID_ SpInprocRecognizer. (3)ISpRecoContext 语音识别上下文接口.主要用于发送和接收与 语音识别有关的消息通知,创建语法规则对象,一 般每个语音识别上下文对象都对应一个消息处理 函数,该对象由函数ISpRecognizer:CreateRecoCon- text(ISpRecoContext料ppNewContext)0建. (4)ISpRecoGrammar 语法规则接口,定义引擎需要识别的具体内 容.用于创建,载入和激活识别用的语法规则.语 法规则也有两种类型:一种是听写(Dicta
6、tion)型,允 许使用引擎中的大量短语,但识别效率较低;另一 种是命令和控制(CommandandContro1)型,能最大 限度识别自定义的短语故识别效率高.语法规则 对象由函数ISpRecoContext:CreateGrammer(U LONGLONGullGrammerld.ISpRecoGrammar枷PP Grammar)创建,然后加载合适的语法规则,对于听 写型使用函数ISpRecoGrammar:LoadDictation (constWCHARpszTopicName,SPLOADO阿ONS Options),而命令和控制型使用函数ISpRecoGram mar:”Load
7、CmdFromFilefconstWCHARpszFile. Name,SPLOADOPTIONSOptions).最后是激活语法 规则,对于两种类型的语法规则分别使用函数IS. pRecoGrammar:SetDictationState(SPRESULTSTATE NewState)和ISpRecoGrammar:SetRuleStatefconst WCHARpszName.voidpReserved.SPRESULT. STATENewState). 一 个ISpRecognizer,无论其对应的语音识别引 擎对象是共享型还是独占型.可以有多个ISpReco. Context与其相关联
8、,每个语音识别上下文按照各 自的消息通知机制工作,一个ISpRecoContext可以 创建多个ISpRecoGrammar,每个语法规则对象识 别各自规定的内容. 3应用实例 下面将通过一个完整的实例介绍利用SAPI 开发语音应用程序的具体方法,此实例应用程序的 功能是:用户语音输入”关闭应用程序”,应用程序 识别并输出合成语音”关闭应用程序”,之后应用程 MODERNCOMPUTER2005.2 序将自行关闭. (1)具体步骤 使用函数Colnitialize初始化COM库,在使 用SAPI5.0COM的API之前必须先对其进行初始 化.使用完毕之后调用函数CoUninitialize将其
9、卸 载. (通过函数CoCreateInstance创建一个语音识 别引擎(Recognizer)对象. (通过Recognizer对象的CreateRecoContext, 创建一个语音识别上下文(RecoContext)对象. 设置消息通知机制,函数SetNotifyWindow Message将RecoContext对象与其相关的消息处理 函数联系起来,函数SetInterest用来指定应用程序 关心的消息类别:正确识别消息(sPELRECOGNI TION),假设识别消息(SPEIHYPOTHESIS)和错误 识别消息(SPEIFALSE_RECOGNITION). 通过文本编辑器编写
10、所需的语法规则.引擎 会根据规则中定义的词来最大限度匹配从音频输 入设备输入的命令. 装载语法规则,通过RecoContext对象的 CreateGrammar函数创建一个语法规则对象,再调 用LoadCmdFromFile函数从XML文件中装载语法 规则. 将语法规则对象置成激活状态. 若识别用户命令则通过ISpVoice接口输出 相应语音信息并关闭应用程序. (2)具体实现 (1)编写语法规则 <GRAMMARLANGID=804”> /汉语的语言编号是804,英语是409 <DE兀NE> <IDNAME=CMDVAL=“10,> /定义一个语法规则的I
11、D </DE兀NE> <RULENAME=COMMAND”ID=CMDTOPLEVEL= ACVE,> /定义一个语法规则 <L> /列表 <P>关闭应用程序</P> /定义一个词 </L> </RUI> </GRAMMAR> 存为XML文档CmdCtr1.xml 初始化COM库 近!SUCCEEDED(:CoInitialize(NU exit(0): 应用程序主体 :CoUninitialize(); 退出时释放相关资源 初始化识别引擎 CComPtr<ISpRecognizer>m
12、_ cpRecognizer; CComPtr<ISpRecoContext>m_ cpRecoCtxt; CComPtr<ISpRecoGrammar>m_ cpCmdGrammar; CComPtr<ISpAudio>mcpAudio; hr=m_ cpRecongnizer.CoCreateInstance(CLSID_SpShare? dRecognizer) 创建一个独占型语音识别引擎对象 !SUCCEEDED(hr) exit(0): hr=m_ cpRecognizer->CreateRecoContext(&m_cpRecotx
13、t); 为该语音识别引擎创建一个语音识别上下文 !SUCCEEDED(hr) exit(O): hr=m_cpRecoCtxt->SetNotffyWindowMessage(hWnd, Msg,0,0); 设置语音识别上下文对象的识别通知消息(hWnd, Msg),并由该消息所指定的消息处理函数接受处理该通知消 息 !SUCCEEDED0ar) exit(O); 设定触发识别通知消息的引擎识别消息:正确识别消 息,错误识别消息 constUL0NGL0NGunteresl=SPFEI(SPEI_RECOGNI. 1r10 ISPFEI1SPEI_FALSERECOGNITION); h
14、r=m_ cpRecoCtxt->SetInterest(ullInteresLullInterest); !SUCCEEDED(hr) 实践s经验 exit(O); hr=-SpCreateDefaultObjectFromCategoryId(SPCAT_ AUDIOIN,&mcpAudio); 创建默认的音频输入设备对象 !SUCCEEDED(hr) exit(O); hr=-mcpRecognizer->SetInput(m_cpAudio,TRUE); 将上面的音频输入对象作为识别引擎对象的音频输 入源 if【!SUCCEEDEDO) exit(O); hr=mc
15、pRecoCtxt一>CreateGrammarfGID_SRCMDCN, &mcpCmdGrammar); 创建一个语法规则对象 !SUCCEEDED0) exit(O); hr=mcpCmdGrammar->LoadCmdFromFilerCmdCtr1. xmI”,SPLO_ DYNAMIC); 从XML文件中装载语法规则 !SUCCEEDEDd) exit(O); hr=mc:pCmdGrammar->SetRuleState(NULL,NULL, SPRS_ACTIVE); 将语法规则对象置成激活状态 讧(!SUCCEEDED0ar) exit(0); 消息
16、miti数 voidOnRecoEvent(WPARAMwParam,LPARAseSPEI FALsE RECOGNmON: break; caseSPEI RECOGNIr兀ON: ? m_ cpCmdGrammar->SetRuleState(NULL,NULL, SPRS_INACr兀VE1; CComPtr<ISpRecoResult>cpResuh; CSpDynamicStringdstrText; CStringstrResuh; cpResult=event.RecoResult(); 获得识别结果cpResdt一>GetText(SP_GETWHOL
17、E PHRASE,SP_ GETWHOLEPHRASE,TRUE,&dstrText,NU; strResuh=W2T(dstrText); 将结果转换为CString类型 川!strResuh.CompareNoCasd_T(“程序) m_ strSpeak.Format(“关闭应用程序; OnSpeak(); OnExit(); 语音合成输出函数 voidOnSpeak() ISpVoicepVoice=NULL HRESULThr=CoCreatelnstance(CLSID_SpVoice.NULL CLSCTX_ALLI/D_ ISpVoiee,(void)&pVoi
18、ee); if(SUCCEEDED(hr) hr=pVoice->Speak(L”关闭应用程序,0,NULL); pVoice->Release(); pVoice=NULL; CoUninitialize(); 结语 微软的SAPI作为Windows的一部分,已经被 集成在Windows里面.相对于其他引擎,它的识别 率比较高,如果做过适应性调整,识别率可以达到 90%以上.而且其开发包可以免费获取,各种文档 资源也很齐全,很方便做二次开发.随着电信行业 的竞争日益加剧,网络运营商和业务开发商都在寻 找不同的业务增长点去吸引客户,MCSR和【s作 为一种诱人的新技术,如果能很好地嵌入到增值业 务的应用中去,必将形成一个很好的应用前景. 参考文献 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年度公务员(国考)题库试题附答案详解(轻巧夺冠)
- 2024-2025学年度执法资格考试彩蛋押题附参考答案详解AB卷
- 骨科患者心理护理查房
- 压疮护理的职业发展
- 客户关系管理(CRM)平台
- 2024-2025学年度冶金工业技能鉴定考试彩蛋押题附参考答案详解【培优】
- 2024-2025学年度医师定期考核考前冲刺练习题及参考答案详解(巩固)
- 2024-2025学年医疗卫生系统人员考前冲刺练习试题含答案详解【满分必刷】
- 2024-2025学年度电梯考试每日一练试卷附参考答案详解(研优卷)
- 2024-2025学年度电工考前冲刺练习试题含答案详解【满分必刷】
- 2026年安徽城市管理职业学院单招职业适应性测试题库附参考答案详解(能力提升)
- 第2课 让我们的家更美好 第二课时(课件)2025-2026学年《道德与法治》五年级下册
- 未来五年新形势下击剑器材及零件行业顺势崛起战略制定与实施分析研究报告
- 学前教育政策与法规考试试题(含答案)
- 2025年江西信息应用职业技术学院单招综合素质考试试题及答案解析
- 2026年社会工作师(中级)考试题库及参考答案【典型题】
- 2026年春青岛版(五四制)(新教材)小学科学二年级第二学期教学计划及进度表
- 《电子产品制图与制板(基础篇)》全套教学课件
- 浙江省嘉兴市2025-2026学年度第一学期期末测试高一化学试题 (含答案)
- 民爆安全知识试题及答案
- 2026国考行测真题及其答案
评论
0/150
提交评论