SAPI 5.1 语音合成 和 语音识别 [C#].docx

上传人:pu****.1 文档编号:543174947 上传时间:2024-03-05 格式:DOCX 页数:8 大小:34.79KB
返回 下载 相关 举报
SAPI 5.1 语音合成 和 语音识别 [C#].docx_第1页
第1页 / 共8页
SAPI 5.1 语音合成 和 语音识别 [C#].docx_第2页
第2页 / 共8页
SAPI 5.1 语音合成 和 语音识别 [C#].docx_第3页
第3页 / 共8页
SAPI 5.1 语音合成 和 语音识别 [C#].docx_第4页
第4页 / 共8页
SAPI 5.1 语音合成 和 语音识别 [C#].docx_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《SAPI 5.1 语音合成 和 语音识别 [C#].docx》由会员分享,可在线阅读,更多相关《SAPI 5.1 语音合成 和 语音识别 [C#].docx(8页珍藏版)》请在金锄头文库上搜索。

1、SAPI 5.1 语音合成 和 语音识别 C#翻译源:Speech Synthesis & Speech Recognition Using SAPI 5.1 By Brian Long (http:/ .NET Framework 2.0实现,有些有关Delphi的解释略去,另添加一些C#使用SAPI的个人理解注释,不定期更新1语音合成在简单层面上实现语音合成,只需要创建SpVoiceClass对象并调用其中的Speak方法,最简单的实现如下读出文本框中的文字private void button1_Click(object sender, EventArgs e)SpVoiceClass

2、svc = new SpVoiceClass(); svc.Speak(textBox1.Text,SpeechVoiceSpeakFlags.SVSFDefault);.Tachikoma注:此处并未提到编程时添加对SAPI的引用,对COM组件的引用较简单,请自行处理对Speak方法的参数作如下说明:0对Speak方法的调用默认情况下将会是同步的,也就是说在朗读完指定文字之前不会返回值同步/异步状态可用第二参数调整0Speak方法返回一个流标号,当存在多个异步声音流时可通过标号识别,标号可作为参数提供给某些函数1第一个参数为要阅读的文字2第二参数为可调节的一些参数Flags,可用或运算符将其

3、连接同时使用# SVSFDefault 该方法将同步阅读具体见说明0# SVSFlagAsync 该方法将异步阅读,调用后将立即返回,可通过事件监视朗读结束时间,或调用WaitUntilDone 方法,或通过SpeakCompleteEvent 得到一个事件句柄并提供给WaitForSingleObject# SVSFPurgeBeforeSpeak 所有朗读中的和待朗读的字符都将被取消# SVSFNLPSpeakPunc 标点将被阅读出来# SVSFIsFilename 标明第一个参数为要朗读文本所在的文件名# SVSFIsXML 标明文本中含有XML标签,用于控制朗读的音量频率等参数,示例

4、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#实现,有些不必要的说明不按照原文翻译,基本上是按照原文复述本节目标:调整朗读语音,调整语音频率和音量代码环境设定:两个TrackB

5、ar代表语音频率和音量,trackBarRate,trackBarVolume,一个ComboBox选择朗读语音,comboBoxLanguagePS:朗读语音,可能会不明白朗读语音的意思,就是在控制面板-语音-文字语音转换-语音选择中的项,比如Microsoft Mary,Microsoft Sam等等SpVoiceClass类中GetVoices函数原型如下public virtual ISpeechObjectTokens GetVoices(string RequiredAttributes, string OptionalAttributes);该函数返回一个ISpeechObjec

6、tToken集合ISpeechObjectTokens,ISpeechObjectToken描述了每个朗读语音函数两个参数均为对所得到集合的限制,第二参数为对第一参数的补充,比如使用GetVoices(Gender = male, )就会得到男声集合对于这些参数,一般有如下参数:Name,Vendor,Age,Gender,Language有没有更多的不知道,翻过SAPI的帮助也没找到相关说明调用以下语句作以说明ISpeechObjectToken sot = svc.GetVoices(String.Empty, String.Empty).Item(0);System.Diagnostic

7、s.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 Mary

8、MicrosoftAdultFemale409;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.

9、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 10trac

10、kBarVolume.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

11、= 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只是说翻译范围覆盖这五个部分的范围,其中有一些例子不重写了,因为我暂时用不上,有一些乱七八糟

12、的话不译,怕出错,毕竟对其理解不是很深,只挑一些重要的进行复述Making Your Computer Talk 部分提及了如何让朗读暂停和进行,只提取其中用到的几个函数,基本上原型一些出来就知道怎么回事,不详细翻译了类SpVoiceClasspublic virtual void Pause(); /暂停函数public virtual void Resume();/恢复函数public virtual int Skip(string Type, int NumItems);/跳过朗读函数基本一看名称就知道了,只对Skip的参数做一个说明,Type参数代表要跳过的Item的类型如 sente

13、nce 按句子跳过.,但注意这个参数目前只能是Sentence,后面的NumItems 是指要跳过多少个句子Voice Events 事件部分事件的使用和正常的使用没什么大的区别,唯一需要注意的是类SpVoiceClasspublic virtual SpeechVoiceEvents EventInterests get; set; 这个属性,运行原理如下:朗读开始后,类会检测EventInterests属性里所有事件,并触发事件,没有包括在内的事件不会触发SpeechVoiceEvents枚举变量如下Enum SpeechVoiceEventsSVEStartInputStream = 2SVEEndInputStream = 4SVEVoiceChange = 8SVEBookmark = 16SVEWordBoundary = 3

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号