![SAPI 5.1 语音合成 和 语音识别 [C#].docx_第1页](http://file.renrendoc.com/FileRoot1/2020-1/17/9db716c4-05a3-4b52-a553-111695ee427a/9db716c4-05a3-4b52-a553-111695ee427a1.gif)
![SAPI 5.1 语音合成 和 语音识别 [C#].docx_第2页](http://file.renrendoc.com/FileRoot1/2020-1/17/9db716c4-05a3-4b52-a553-111695ee427a/9db716c4-05a3-4b52-a553-111695ee427a2.gif)
![SAPI 5.1 语音合成 和 语音识别 [C#].docx_第3页](http://file.renrendoc.com/FileRoot1/2020-1/17/9db716c4-05a3-4b52-a553-111695ee427a/9db716c4-05a3-4b52-a553-111695ee427a3.gif)
![SAPI 5.1 语音合成 和 语音识别 [C#].docx_第4页](http://file.renrendoc.com/FileRoot1/2020-1/17/9db716c4-05a3-4b52-a553-111695ee427a/9db716c4-05a3-4b52-a553-111695ee427a4.gif)
![SAPI 5.1 语音合成 和 语音识别 [C#].docx_第5页](http://file.renrendoc.com/FileRoot1/2020-1/17/9db716c4-05a3-4b52-a553-111695ee427a/9db716c4-05a3-4b52-a553-111695ee427a5.gif)
已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SAPI 5.1 语音合成 和 语音识别 C#翻译源:Speech Synthesis & Speech Recognition Using SAPI 5.1 By Brian Long (/)翻译说明:并不全文翻译,只翻译些对本人有用的部分,原版代码为Delphi,译文用C# .NET Framework 2.0实现,有些有关Delphi的解释略去,另添加一些C#使用SAPI的个人理解注释,不定期更新1语音合成在简单层面上实现语音合成,只需要创建SpVoiceClass对象并调用其中的Speak方法,最简单的实现如下读出文本框中的文字private void button1_Click(object sender, EventArgs e)SpVoiceClass svc = new SpVoiceClass(); svc.Speak(textBox1.Text,SpeechVoiceSpeakFlags.SVSFDefault);.Tachikoma注:此处并未提到编程时添加对SAPI的引用,对COM组件的引用较简单,请自行处理对Speak方法的参数作如下说明:0对Speak方法的调用默认情况下将会是同步的,也就是说在朗读完指定文字之前不会返回值同步/异步状态可用第二参数调整0Speak方法返回一个流标号,当存在多个异步声音流时可通过标号识别,标号可作为参数提供给某些函数1第一个参数为要阅读的文字2第二参数为可调节的一些参数Flags,可用或运算符将其连接同时使用# SVSFDefault 该方法将同步阅读具体见说明0# SVSFlagAsync 该方法将异步阅读,调用后将立即返回,可通过事件监视朗读结束时间,或调用WaitUntilDone 方法,或通过SpeakCompleteEvent 得到一个事件句柄并提供给WaitForSingleObject# SVSFPurgeBeforeSpeak 所有朗读中的和待朗读的字符都将被取消# SVSFNLPSpeakPunc 标点将被阅读出来# SVSFIsFilename 标明第一个参数为要朗读文本所在的文件名# SVSFIsXML 标明文本中含有XML标签,用于控制朗读的音量频率等参数,示例HelloDelphi developers!I can speak high and low.I can speak very quickly and very slowly.I can speak quietly and loudly.Go to source web page: SAPI 5.1 语音合成 和 语音识别 C#1 - Tachikoma的乱七八糟 - 博客园列举语音Voices翻译说明:由于这个部分涉及到了Delphi编写的简单程序,将其换成C#实现,有些不必要的说明不按照原文翻译,基本上是按照原文复述本节目标:调整朗读语音,调整语音频率和音量代码环境设定:两个TrackBar代表语音频率和音量,trackBarRate,trackBarVolume,一个ComboBox选择朗读语音,comboBoxLanguagePS:朗读语音,可能会不明白朗读语音的意思,就是在控制面板-语音-文字语音转换-语音选择中的项,比如Microsoft Mary,Microsoft Sam等等SpVoiceClass类中GetVoices函数原型如下public virtual ISpeechObjectTokens GetVoices(string RequiredAttributes, string OptionalAttributes);该函数返回一个ISpeechObjectToken集合ISpeechObjectTokens,ISpeechObjectToken描述了每个朗读语音函数两个参数均为对所得到集合的限制,第二参数为对第一参数的补充,比如使用GetVoices(Gender = male, )就会得到男声集合对于这些参数,一般有如下参数:Name,Vendor,Age,Gender,Language有没有更多的不知道,翻过SAPI的帮助也没找到相关说明调用以下语句作以说明ISpeechObjectToken sot = svc.GetVoices(String.Empty, String.Empty).Item(0);System.Diagnostics.Trace.WriteLine(sot.GetAttribute(Name);System.Diagnostics.Trace.WriteLine(sot.GetAttribute(Vendor);System.Diagnostics.Trace.WriteLine(sot.GetAttribute(Age);System.Diagnostics.Trace.WriteLine(sot.GetAttribute(Gender);System.Diagnostics.Trace.WriteLine(sot.GetAttribute(Language);输出中会显示Microsoft MaryMicrosoftAdultFemale409;9其中409;9代表该语音支持409英语和9.语言这里原文提到了申请ISpeechObjectToken实例的垃圾处理的问题,由于C#的垃圾处理机制,不翻译了必要函数介绍完了,下面是完成目标的代码,很简单,一些没说到的写在了注释里SpVoiceClass svc = new SpVoiceClass();private void button1_Click(object sender, EventArgs e) svc.Volume = trackBarVolume.Value;svc.Rate = trackBarRate.Value;svc.Voice = svc.GetVoices(string.Empty, string.Empty).Item(comboBoxLanguage.SelectedIndex);svc.Speak(textBox1.Text, SpeechVoiceSpeakFlags.SVSFDefault);private void Form1_Shown(object sender, EventArgs e)trackBarRate.Minimum = -10;trackBarRate.Maximum = 10;trackBarRate.Value = svc.Rate;/Rate取值 -10 10trackBarVolume.Maximum = 100;trackBarVolume.Value = svc.Volume;/Volume取值 0100ISpeechObjectTokens sots = svc.GetVoices(String.Empty, String.Empty);int i = 0;foreach (ISpeechObjectToken sot in sots)String str = sot.GetDescription(0);/得到语音名称|相当于sot.GetAttribute(name)comboBoxLanguage.Items.Add(str);if (str = svc.Voice.GetDescription(0) comboBoxLanguage.SelectedIndex = i;i+;Go to source web page: SAPI 5.1 语音合成 和 语音识别 C#2 - Tachikoma的乱七八糟 - 博客园翻译说明:这篇译原文五个部分Making Your Computer Talk,Voice Events,Animating Speech, Keeping Track Of Spoken Text,Speaking Dialogs只是说翻译范围覆盖这五个部分的范围,其中有一些例子不重写了,因为我暂时用不上,有一些乱七八糟的话不译,怕出错,毕竟对其理解不是很深,只挑一些重要的进行复述Making Your Computer Talk 部分提及了如何让朗读暂停和进行,只提取其中用到的几个函数,基本上原型一些出来就知道怎么回事,不详细翻译了类SpVoiceClasspublic virtual void Pause(); /暂停函数public virtual void Resume();/恢复函数public virtual int Skip(string Type, int NumItems);/跳过朗读函数基本一看名称就知道了,只对Skip的参数做一个说明,Type参数代表要跳过的Item的类型如 sentence 按句子跳过.,但注意这个参数目前只能是Sentence,后面的NumItems 是指要跳过多少个句子Voice Events 事件部分事件的使用和正常的使用没什么大的区别,唯一需要注意的是类SpVoiceClasspublic virtual SpeechVoiceEvents EventInterests get; set; 这个属性,运行原理如下:朗读开始后,类会检测EventInterests属性里所有事件,并触发事件,没有包括在内的事件不会触发SpeechVoiceEvents枚举变量如下Enum SpeechVoiceEventsSVEStartInputStream = 2SVEEndInputStream = 4SVEVoiceChange = 8SVEBookmark = 16SVEWordBoundary = 32SVEPhoneme = 64SVESentenceBoundary = 128SVEViseme = 256SVEAudioLevel = 512SVEPrivate = 32768SVEAllEvents = 33790End Enum多个枚举变量用或运算符连接,变量代表的事件具体说明见SAPI的帮助Animating Speech 动画语音OnViseme 事件由每个可识别位置引发可识别位置指朗读一段时发音嘴型需要明显改变的位置,英语朗读里一共有22个可识别位置根据迪斯尼定义的13个可识别位置(早期动画用13个图片代表嘴唇动作)可以用相应的嘴形图片形成简单的发音动画具体例子不重做了,需要的请见原文Keeping Track Of Spoken Text 跟踪朗读文字原文通过事件 OnWord & OnSentence 简单实现了高亮显示正在阅读的文字简单不翻译了.懒.Speaking Dialogs 朗读对话框原文穷举了一个Form的Label 和 Button 属性,朗读出所有的Text,简单不翻译到此,原文 Speech Synthesis 语音合成部分结束译后,才发现没译出什么,主要是比较简单,原文实现了一些例子,将其中重要的TIPs提取出来,主要是实现并不难,对本人没有参考价值明天在此处放一个实现的简单例子下一部分 语音识别比较难理解,也需要点时间好好翻译,Go to source web page: SAPI 5.1 语音合成 和 语音识别 C#3 - Tachikoma的乱七八糟 - 博客园翻译说明:语音识别中重点翻译命令识别Command recognition,对本人比较有用.语音识别语音识别可以使用两种识别器:a shared recogniser(TSpSharedRecognizer) 共享识别器和 an in-process recogniser (TSpInprocRecognizer)独占识别器,独占识别器效率更高但是独占麦克风,其他程序不能接收到语音输入,相对的,共享识别器可以和其它程序共享使用,其他程序可以接收到语音输入,因此使用共享识别器更多识别器使用一个 继承了TSpInprocRecoContext或TSpSharedRecoContext接口的上下文环境,这一上下文环境允许控制开始/停止识别,设置语法,接受事件等语法语法规定了可识别的词,定义了识别规则等,使用XML来描述语法,一个简单的例子如下colourpleaseredbluegreen在这个例子中,下面的内容可以被识别 colour redcolour red pleasecolour bluecolour blue pleasecolour greencolour green please更多关于此的内容见SAPI的帮助待续,该熄灯了.继续连续识别这个功能很便于使用,我们需要放置一个为共享识别器设置上下文环境SpSharedRecoContextNote:识别器可自动被创建,不必手动创建,如果需要直接使用识别器,可以手动创建SpSharedRecognizerClass或SpInprocRecognizerClass对象下面是个简单的例子private void button1_Click(object sender,EventArgs e) ssrc = new SpSharedRecoContext(); srg =ssrc.CreateGrammar(0);srg.DictationSetState(SpeechRuleState.SGDSActive);尊重原文,原文这里给出了这个例子,个人认为没什么用.,比较有用的还是后面C & C的例子语法事件这一节以复述为主,翻译实在是有点罗嗦,个人认为说明的不是特别清楚主要提到两个事件OnRecognition和OnHypothesisOnRecognition ,顾名思义,在识别出一个元素后激发OnHypothesis,原文的意思不是很好理解,这里引用微软帮助上的说明A hypothesis is an interim recognition result.Each time the engine attempts a recognition it generates an interim results and Hypothesis events are sent out意思就是假设是识别的一个中间结果,每次识别时,系统产生一个中间结果集并激发这一事件第二个时间具体的例子不举了,一般用不上,原文有个例子,只是把中间结果集输出,可以用于理解一下工作原理Engine Dialogs主要是原文例子的一个设计,这里没有做这个例子,所以.略Command and Control Recognition命令识别这节没什么好说的,举个例子就可以了,不举原文的例子,写了个识别中文的例子,如要调试此例,请看完文后的乱七八糟定义XML命令配置文件XMLRules.xml颜色 红色黄色绿色private SpeechLib.SpSharedRecoContext ssrc;private ISpeechRecoGrammar srg;private void button1_Click(object sender, EventArgs e) ssrc = new SpSharedRecoContext(); srg =ssrc.CreateGrammar(0);srg.CmdLoadFromFile(g:XMLRules.xml, SpeechLoadOption.SLODy
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑工程门窗安装施工方案
- 思维的发生与发展04课件
- 低空经济飞行器维修保养方案
- 养鸭场饲料配方优化方案
- 正常人体解剖学感觉器49课件
- 二零二五年风力发电兼职电工合作协议
- 二零二五年度新能源设备采购合同(货物类)
- 二零二五年度区块链技术竞业禁止与知识产权保护协议
- 2025版环境监测行业联盟合作协议
- 二零二五年度花岗石石材行业企业并购合同规范
- 测振仪使用方法
- GB/T 9871-2008硫化橡胶或热塑性橡胶老化性能的测定拉伸应力松弛试验
- GB/T 26480-2011阀门的检验和试验
- GB/T 19861-2005丙烯酸系阴离子交换树脂强碱基团、弱碱基团和弱酸基团交换容量测定方法
- GB/T 11085-1989散装液态石油产品损耗
- GB 30000.3-2013化学品分类和标签规范第3部分:易燃气体
- (完整版)沪教牛津版小学一至六年级英语单词汇总(最新)
- JJF 1587-2016 数字多用表校准规范-(高清现行)
- 完整课件-西方经济学下册(第二版)
- 机械制图教学通用课件(全套)
- 球阀自动泄压计算
评论
0/150
提交评论