[size=medium]
我们都知道现在的语音合成TTS是可以通过微软的SAPI实现的,好处我就不多说了,方便而已,因为在微软的操作系统里面就自带了这个玩意,主要的方式有两种:
[color=red]
1、使用COM组件技术,不管是C++,C#,Delphi都能玩的转,开发出来的东西在XP和WIN7都能跑。(要引入SpeechLib,好像在项目上点引用,然后选到系统COM吧,好久没弄,记不清楚了)
2、使用WIN7的windows api,其实最终还是调用了SAPI,所以开发出来的东西就只能在WIN7上面跑。
[/color]
其实不管是哪一种,都是调用SAPI,可能后一种代码比较简单,使用已经安装的TTS引擎,现在一般用NeoSpeech,这个就不解释了,太强大了这个发音。。。
[/size]
COM组件技术:

public class Speach { private static Speach _Instance = null ; private SpeechLib.SpVoiceClass voice =null; //SAPI5.1private SpeechLib.SpVoice voice = null;//SAPI 5.4private Speach() { BuildSpeach() ; } public static Speach instance() { if (_Instance == null) _Instance = new Speach() ; return _Instance ; }

private void SetChinaVoice() { voice.Voice = voice.GetVoices(string.Empty,string.Empty).Item(0) ; } 

private void SetEnglishVoice() { voice.Voice = voice.GetVoices(string.Empty,string.Empty).Item(1) ; } 

private void SpeakChina(string strSpeak) { SetChinaVoice() ; Speak(strSpeak) ; } 

private void SpeakEnglishi(string strSpeak) { SetEnglishVoice() ; Speak(strSpeak) ; } 

public void AnalyseSpeak(string strSpeak) { int iCbeg = 0 ; int iEbeg = 0 ; bool IsChina = true ; for(int i=0;i<strSpeak.Length;i++) { char chr = strSpeak[i] ; if (IsChina) { if (chr<=122&&chr>=65) { int iLen = i - iCbeg ; string strValue = strSpeak.Substring(iCbeg,iLen) ; SpeakChina(strValue) ; iEbeg = i ; IsChina = false ; } } else { if (chr>122||chr<65) { int iLen = i - iEbeg ; string strValue = strSpeak.Substring(iEbeg,iLen) ; this.SpeakEnglishi(strValue) ; iCbeg = i ; IsChina = true ; } } }//end for if (IsChina) { int iLen = strSpeak.Length - iCbeg ; string strValue = strSpeak.Substring(iCbeg,iLen) ; SpeakChina(strValue) ; } else { int iLen = strSpeak.Length - iEbeg ; string strValue = strSpeak.Substring(iEbeg,iLen) ; SpeakEnglishi(strValue) ; } } 

private void BuildSpeach() { if (voice == null) voice = new SpVoiceClass() ; }

public int Volume { get { return voice.Volume ; } 

set { voice.SetVolume((ushort)(value)) ; } } 

public int Rate { get { return voice.Rate ; } set { voice.SetRate(value) ; } } 

private void Speak(string strSpeack) { try { voice.Speak(strSpeack,SpeechVoiceSpeakFlags.SVSFlagsAsync) ; } catch(Exception err) { throw(new Exception("发生一个错误:"+err.Message)) ; } } 

public void Stop() { voice.Speak(string.Empty,SpeechLib.SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak) ; } 

public void Pause() 

{ voice.Pause() ; } 

public void Continue() { voice.Resume() ; } }//end class 

[color=blue][size=medium]在 private SpeechLib.SpVoiceClass voice =null;这里,我们定义个一个用来发音的类,并且在第一次调用该类时,对它用BuildSpeach方法进行了初始化。

我们还定义了两个属性Volume和Rate,能够设置音量和语速。

我们知道,SpVoiceClass 有一个Speak方法,我们发音主要就是给他传递一个字符串,它负责读出该字符串,如下所示。 [/size][/color]

private void Speak(string strSpeack) { try { voice.Speak(strSpeack,SpeechVoiceSpeakFlags.SVSFlagsAsync) ; } catch(Exception err) { throw(new Exception("发生一个错误:"+err.Message)) ; }} 

[color=violet][size=medium]第二种使用.NET类库和系统API的代码如下:[/size][/color]

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Speech.Synthesis;using System.Speech;

namespace StudyBeta{    public class SRead    {        public SpeechSynthesizer synth; //语音合成对象        public SRead()        {            synth = new SpeechSynthesizer();        }        public SRead(int m, int n)        {            //使用 synth 设置朗读音量 [范围 0 ~ 100]            synth.Volume = m;            //使用 synth 设置朗读频率 [范围 -10 ~ 10]            synth.Rate = n;        }        public void SpeakChina(string ggg)        {            //SpVoice Voice = new SpVoice();            synth.SelectVoice("Microsoft Lili");            //Voice.Speak(ggg, SpFlags);            synth.SpeakAsync(ggg);            //String speechPeople = synth.Voice;            //使用 synth 设置朗读音量 [范围 0 ~ 100]            // synth.Volume = 80;            //使用 synth 设置朗读频率 [范围 -10 ~ 10]            //      synth.Rate = 0;            //使用synth 合成 wav 音频文件:            //synth.SetOutputToWaveFile(string path);        }        public void SpeakEnglish(string ggg)        {            //SpVoice Voice = new SpVoice();            synth.SelectVoice("VW Julie");            synth.Speak(ggg); //ggg为要合成的内容        }        public int m        {            get            {                return synth.Volume;            }            set            {                synth.Volume = value;            }        }        public int n        {            get            {                return synth.Rate;            }            set            {                synth.Rate = value;            }        }}

C#调用SAPI实现语音合成的两种方法相关推荐

  1. dede列表页if判断输出html,首页、列表页调用文章body内容的两种方法

    随着源码的开放性,很多SEOER对页面的要求也越来越复杂多样性,很多时候,织梦系统的原有功能并不能满足seoer的页面布置要求,这就需要继续开发页面,做更多的功能调用. 今天徐金华SEO给大家讲的是关 ...

  2. 织梦首页、列表页调用文章body内容的两种方法

    关于首页.列表页调用文章body内容的两种方法,具体方法如下: 第一种方法: {dede:arclist row='1' typeid='1' addfields='body' idlist='1' ...

  3. ant中调用外部ant任务的两种方法

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  4. 【PyQt】pyqt加载调用ui界面文件的两种方法

    使用PyQt开发界面软件,自然会用到Qt Designer进行界面设计,拖拖按钮.设置菜单什么的,然后保存为 .ui 文件.但是在 Python 代码里面如何使用这些 .ui 文件呢? 有两种方法: ...

  5. Python3调用谷歌机翻的两种方法

    笔者环境:win10 + python3.9 + requests 2.25.1 + urllib3 1.25.8 + selenium 3.141.0 + chromedriver.exe 90.0 ...

  6. [整理] C#调用SQLDMO.DLL时间数据库备份 / 还原。 (香神无涯) // C#实现SQLSERVER2000数据库备份还原的两种方法 (带进度条)...

    /// <summary> /// 通过调用MSSQL的SQLDMO.DLL文件来实现备份数据库 /// 1.首先在在项目中引用SQLDMO.DLL文件. /// 2.在引用中的SQLDM ...

  7. Py之qrcode:调用python的qrcode库两种方式生成二维码、带logo的二维码

    Py之qrcode:调用python的qrcode库两种方式生成二维码.带logo的二维码 目录 python编程实现生成二维码 1.第一种方式-纯文本 2.第二种方式-带logo

  8. PhpCms V9调用指定栏目子栏目文章的两种方法

    PhpCms V9调用指定栏目子栏目文章的两种方法 第一种.直接写子栏目id ,用cat in {pc:get sql="SELECT * from v9_news where status ...

  9. VB中FSO的调用的两种方法

    方法一:   Dim   objFso      Set   objFso   =   CreateObject("Scripting.FileSystemObject")    ...

最新文章

  1. 妙用vector:根据第一个不等的元素比较两个序列大小的利器
  2. 使用lucce分词怎么_深度学习时代,分词真的有必要吗
  3. 提问赠书 | 我们请了 7 位云原生专家,等你来问
  4. 从国考大数据看中国哪个省的人最爱当官
  5. 编程实现将一个N进制数转换成M进制数
  6. LeetCode动态规划 环形子数组的最大和
  7. 应用程序的主入口点应用程序的主入口点应用程序的主入口点
  8. Vscode 用Filter Line看日志,很爽
  9. SAP License:BWBCS学习记录
  10. python之decorator理解
  11. airtestide 下载后打不开_惠普打印机驱动怎么下载 惠普打印机驱动安装方法【步骤】...
  12. 001 spring介绍
  13. 【noip2013】d2解题报告
  14. 计算机odbc数据源管理位置,ODBC 常见数据源配置整理
  15. 【C/C++】在Dosbox安装和体验Turbo C++ 3.0
  16. 迅雷专用下载的几种代码
  17. Pico Neo3 4VR一体机破解版游戏资源合集安装包下载及安装教程分享
  18. 密西根州立大学计算机qs分数,密歇根州立大学有哪些专业_专业排名(QS世界排名)...
  19. Python 基础变量声明
  20. java下的Http多线程下载与断点续传分析【转自酷勤网】

热门文章

  1. mysql数据库删除数据的三种方式:
  2. SystemVerilog HVL:子程序
  3. 在中国年薪20万属于什么水平?程序员能达到这收入?
  4. 激光投影行业正在发生四大变化
  5. android机器人酷炫壁纸,完美酷炫体验 A60动态桌面小应用实测
  6. 用什么电脑配置做视频剪辑比较好?
  7. HTML提供模板供用户编辑,[html模板制作.ppt
  8. 基于asp.net的社区人口信息管理系统
  9. 微信开发笔记之-用户绑定
  10. 长程、中程、短程调度