我们都知道现在的语音合成TTS是可以通过微软的SAPI实现的,好处我就不多说了,方便而已,因为在微软的操作系统里面就自带了这个玩意,主要的方式有两种:
1、使用COM组件技术,不管是C++,C#,Delphi都能玩的转,开发出来的东西在XP和WIN7都能跑。(要引入SpeechLib,好像在项目上点引用,然后选到系统COM吧,好久没弄,记不清楚了)
2、使用WIN7的windows api,其实最终还是调用了SAPI,所以开发出来的东西就只能在WIN7上面跑。
其实不管是哪一种,都是调用SAPI,可能后一种代码比较简单,使用已经安装的TTS引擎,现在一般用NeoSpeech,这个就不解释了,太强大了这个发音。。。
COM组件技术:
public class Speach { private static Speach _Instance = null ; private SpeechLib.SpVoiceClass voice =null; //SAPI5.1 private SpeechLib.SpVoice voice = null;//SAPI 5.4 private 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
在 private SpeechLib.SpVoiceClass voice =null;这里,我们定义个一个用来发音的类,并且在第一次调用该类时,对它用BuildSpeach方法进行了初始化。
我们还定义了两个属性Volume和Rate,能够设置音量和语速。
我们知道,SpVoiceClass 有一个Speak方法,我们发音主要就是给他传递一个字符串,它负责读出该字符串,如下所示。
private void Speak(string strSpeack) { try { voice.Speak(strSpeack,SpeechVoiceSpeakFlags.SVSFlagsAsync) ; } catch(Exception err) { throw(new Exception("发生一个错误:"+err.Message)) ; } }
第二种使用.NET类库和系统API的代码如下:
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实现语音识别的2种方法,包括了C#中调用SAPI实现语音识别的2种方法的使用技巧和注意事项,需要的朋友参考一下 通过微软的SAPI,不仅仅可以实现语音合成TTS,同样可以实现语音识别SR。下面我们就介绍并贴出相关代码。主要有两种方式: 1、使用COM组件技术,不管是C++,C#,Delphi都能玩的转,开发出来的东西在XP和WIN7都能跑。(注意要引入系统组件Spe
本文向大家介绍利用python实现汉字转拼音的2种方法,包括了利用python实现汉字转拼音的2种方法的使用技巧和注意事项,需要的朋友参考一下 前言 在浏览博客时,偶然看到了用python将汉字转为拼音的第三方包,但是在实现的过程中发现一些参数已经更新,现在将两种方法记录一下。 xpinyin 在一些博客中看到,如果要转化成带音节的拼音,需要传递参数,‘show_tone_marks=True',
1.1.1. TTS 1.1.1. TTS 我们的语音合成接口使用 C/S 架构,服务端默认启动,开发者需要通过调用客户端接口与服务端通讯,TTS服务架构图如下: 客户端头文件目录位于: #include <tts/tts_client.h> 除了要 include 头文件外,还需要链接 -lrktts。 API int tts_init(); // tts初始化接口 int tts_spe
1.1. TTS(语音合成) HTTP接口文档 1.1.1. 概述 1.1.2. 服务地址 1.1.3. 协议详解 1.1.4. 协议概述 1.1. TTS(语音合成) HTTP接口文档 1.1.1. 概述 本文档目的是描述Rokid云TTS(语音合成)HTTP接口协议,面向想要了解TTS细节,并具有一定开发能力的开发者或用户。 1.1.2. 服务地址 环境 地址 用途 线上 https://ma
1.1. TTS(语音合成) WebSocket接口文档 1.1.1. 概述 1.1.2. 服务地址 1.1.3. 协议详解 1.1.4. 协议地址 1.1.5. 协议概述 1.1. TTS(语音合成) WebSocket接口文档 1.1.1. 概述 本文档目的是描述Rokid云TTS(语音合成)WebSocket接口协议,面向想要了解TTS细节,并具有一定开发能力的开发者或用户。 1.1.2.
1.1.1. 开放平台接口定义文档(http版) - 语音合成 1.1.2. 简介 1.1.3. 编解码 1.1.4. 认证方式 1.1.5. Curl示例 1.1.6. 设备认证 1.2. 语音合成API 1.2.1. 请求URL 1.2.2. proto 文件 1.2.3. 请求和回复数据 1.1.1. 开放平台接口定义文档(http版) - 语音合成 1.1.2. 简介 Rokid语音合成服