通过微软的SAPI,不仅仅可以实现语音合成TTS,同样可以实现语音识别SR。下面我们就介绍并贴出相关代码。主要有两种方式:
1、使用COM组件技术,不管是C++,C#,Delphi都能玩的转,开发出来的东西在XP和WIN7都能跑。(注意要引入系统组件SpeechLib,XP要安装识别引擎)
2、使用WIN7的windows api,其实最终还是调用了SAPI,所以开发出来的东西就只能在WIN7上面跑。
其实不管是哪一种,都是调用SAPI,可能后一种代码比较简单。
使用第一种方式,需要注意在COM选项卡里面的Microsoft Speech object library引用
public class SpRecognition
{
private static SpRecognition _Instance = null;
private SpeechLib.ISpeechRecoGrammar isrg;
private SpeechLib.SpSharedRecoContextClass ssrContex = null;
public delegate void StringEvent(string str);
public StringEvent SetMessage;
private SpRecognition()
{
ssrContex = new SpSharedRecoContextClass();
isrg = ssrContex.CreateGrammar(1);
SpeechLib._ISpeechRecoContextEvents_RecognitionEventHandler recHandle =
new _ISpeechRecoContextEvents_RecognitionEventHandler(ContexRecognition);
ssrContex.Recognition += recHandle;
}
public void BeginRec()
{
isrg.DictationSetState(SpeechRuleState.SGDSActive);
}
public static SpRecognition instance()
{
if (_Instance == null)
_Instance = new SpRecognition();
return _Instance;
}
public void CloseRec()
{
isrg.DictationSetState(SpeechRuleState.SGDSInactive);
}
private void ContexRecognition(int iIndex, object obj, SpeechLib.SpeechRecognitionType type, SpeechLib.ISpeechRecoResult result)
{
if (SetMessage != null)
{
SetMessage(result.PhraseInfo.GetText(0, -1, true));
}
}
}
第二种同样需要引入,不过引入的是Win7中的.NET3.5类库
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Speech;
using System.Speech.Recognition;
using System.Globalization;
using System.Windows.Forms;
namespace StudyBeta
{
public class SRecognition
{
public SpeechRecognitionEngine recognizer = null;//语音识别引擎
public DictationGrammar dictationGrammar = null; //自然语法
public System.Windows.Forms.Control cDisplay; //显示控件
public SRecognition(string[] fg) //创建关键词语列表
{
CultureInfo myCIintl = new CultureInfo("en-US");
foreach (RecognizerInfo config in SpeechRecognitionEngine. InstalledRecognizers())//获取所有语音引擎
{
if (config.Culture.Equals(myCIintl) && config.Id == "MS-1033-80-DESK" )
{
recognizer = new SpeechRecognitionEngine(config);
break;
}//选择美国英语的识别引擎
}
if (recognizer != null)
{
InitializeSpeechRecognitionEngine(fg);//初始化语音识别引擎
dictationGrammar = new DictationGrammar();
}
else
{
MessageBox.Show("创建语音识别失败");
}
}
private void InitializeSpeechRecognitionEngine(string[] fg)
{
recognizer.SetInputToDefaultAudioDevice();//选择默认的音频输入设备
Grammar customGrammar = CreateCustomGrammar(fg);
//根据关键字数组建立语法
recognizer.UnloadAllGrammars();
recognizer.LoadGrammar(customGrammar);
//加载语法
recognizer.SpeechRecognized += new EventHandler <SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
recognizer.SpeechHypothesized += new EventHandler <SpeechHypothesizedEventArgs>(recognizer_SpeechHypothesized);
}
public void BeginRec(Control tbResult)//关联窗口控件
{
TurnSpeechRecognitionOn();
TurnDictationOn();
cDisplay = tbResult;
}
public void over()//停止语音识别引擎
{
TurnSpeechRecognitionOff();
}
public virtual Grammar CreateCustomGrammar(string[] fg) //创造自定义语法
{
GrammarBuilder grammarBuilder = new GrammarBuilder();
grammarBuilder.Append(new Choices(fg));
return new Grammar(grammarBuilder);
}
private void TurnSpeechRecognitionOn()//启动语音识别函数
{
if (recognizer != null)
{
recognizer.RecognizeAsync(RecognizeMode.Multiple);
//识别模式为连续识别
}
else
{
MessageBox.Show("创建语音识别失败");
}
}
private void TurnSpeechRecognitionOff()//关闭语音识别函数
{
if (recognizer != null)
{
recognizer.RecognizeAsyncStop();
TurnDictationOff();
}
else
{
MessageBox.Show("创建语音识别失败");
}
}
private void recognizer_SpeechRecognized(object sender, SpeechRecognized EventArgs e)
{
//识别出结果完成的动作,通常把识别结果传给某一个控件
string text = e.Result.Text;
cDisplay.Text = text;
}
private void TurnDictationOn()
{
if (recognizer != null)
{
recognizer.LoadGrammar(dictationGrammar);
//加载自然语法
}
else
{
MessageBox.Show("创建语音识别失败");
}
}
private void TurnDictationOff()
{
if (dictationGrammar != null)
{
recognizer.UnloadGrammar(dictationGrammar);
//卸载自然语法
}
else
{
MessageBox.Show("创建语音识别失败");
}
}
}
}
分享到:
相关推荐
在C#中实现语音识别和文本转换,通常我们会利用微软的Speech API(SAPI),这是一个强大的接口,允许开发者集成自然语言处理功能,包括语音识别和语音合成。本教程将深入探讨如何利用SAPI来实现这些功能。 首先,...
通过微软的SAPI,不仅仅可以实现语音合成TTS,同样可以实现语音识别SR。下面我们就介绍并贴出相关代码。主要有两种方式: 1、使用COM组件技术,不管是C++,C#,Delphi都能玩的转,开发出来的东西在XP和WIN7都能跑。...
以下是两种利用C#调用SAPI实现语音合 成的方法: 1. 使用COM组件技术: 这种方法适用于XP和Win7等较旧的操作系统。首先,你需要在项目中引用`SpeechLib`,这是一个COM组件,通常可以在项目属性的"引用"选项中找到并...
C#中的SAPI库主要由两个关键部分组成:语音合成(ISpVoice)和语音识别(ISpRecognizer)接口。 ### 语音合成(TTS) 使用ISpVoice接口,我们可以将文本转换为自然流畅的语音输出。以下是一些关键步骤: 1. **初始化...
总的来说,C++实现Windows语音识别虽然相比C#或其他现代语言可能较为复杂,但它提供了更多的底层控制和灵活性。通过熟悉和掌握Windows API的语音识别接口,开发者可以构建高效且定制化的语音识别系统。在实践中,...
SAPI(Speech Application Programming Interface)是微软提供的一种用于开发语音识别和合成应用的接口,它允许程序员集成自然语言处理功能到他们的应用程序中。在Windows 7操作系统中,如果你遇到“组件未注册”的...
在C#编程中,SAPI(Speech API,语音应用程序编程接口)是由微软提供的一套用于实现文本转语音(TTS)和语音识别的库。在本文中,我们将深入探讨如何使用SAPI中的SpVoice类来实现一个简单的点名系统。 首先,为了在...
`SAPI.SpVoice`虽然主要涉及语音合成,但在了解了语音识别的基本原理和流程后,结合这两个方面的知识,可以实现更完整的语音应用解决方案。记得在实际项目中,不断尝试和优化,以提升用户体验。
3. 开始语音识别:调用ISpRecognizer的SetInput方法指定音频输入源,然后启动识别。 4. 处理识别事件:订阅ISpeechRecoResult事件,如Result事件,当有新的识别结果时进行处理。 5. 结合WPF:将识别结果绑定到WPF UI...
根据给定的信息,本文将详细解析C#中的英文语音合成及中文语音识别技术,并通过具体的代码实例来展示如何实现这两种功能。 ### C# 英文语音合成与中文语音识别技术 #### 一、安装Microsoft Speech Application SDK...
### 用C#开发基于Microsoft Speech SDK的语音应用程序 #### 0. 引言 长久以来,人类一直在努力实现让...无论是语音合成还是语音识别,都可以通过调用SDK中的接口来实现,极大地降低了开发门槛,提高了开发效率。
在IT领域,文字语音转换(Text-to-Speech, TTS)和语音识别(Speech Recognition, SR)是两个关键的技术方向,它们在人机交互、无障碍技术、智能客服等多个场景中有着广泛的应用。本项目利用C#语言实现了这些功能,...
控制台例子通常更直接,可能使用C#、VB.NET等.NET语言调用SAPI接口实现TTS。通过Console.WriteLine命令输出的文本可以被转换成语音,这对于自动化脚本或者没有图形界面的应用场景非常有用。控制台应用还可能支持...
微软的Microsoft Speech API是一个综合性的语音技术平台,它包含了语音识别和TTS两个主要部分。对于文字转语音,我们主要关注的是TTS引擎。这个引擎可以读取输入的文本,并将其转换成音频流,支持多种语言和发音风格...