通过微软的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# 用SAPI实现语音识别及文本转换的详细教程 每一步都特别详细 相信看完之后 语音识别这快就没问题了 翻译的可能有些问题
c#用SAPI实现录音朗读以及语音识别 有界面 学习的例子
主要介绍了C#中调用SAPI实现语音识别的2种方法,本文直接给出实现代码,需要的朋友可以参考下
语音识别和语音朗诵代码,根据微软的SAPI编写,有需要的可以下载看看
我们都知道现在的语音合成TTS是可以通过微软的SAPI实现的,好处我就不多说了,方便而已,因为在微软的操作系统里面就自带了这个玩意,主要的方式有两种: 1、使用COM组件技术,不管是C++,C#,Delphi都能玩的转,开发...
语音是人类最自然的交互方式,也是现阶段软 件用户界面发展的最高目标。微软公司一直积极 推动语音技术的发展,并且公布了语音开发平台 Speech SDK帮助开发人员实现语音应用。...统地介绍如何利用SAPI开发语音应用程序
C++使用SAPI实现语音合成和语音识别代码,语音识别必是手机未来的主流方向。
windows 讯飞语音听写 微软sapi 离在线 语音识别 此应用申请讯飞语音应用已通过 完全原创,仅供研究使用 适用于win7 及以上版本 点击exe即可运行,无需配置环境 readme doc 相关开发和使用说明 本人在学校机器人基地...
基于C# 编程,使用微软SAPI SDK的人机交互的语音对话DEMO 展示SAPI的基本用法,便于用户在开发相应的产品时,做一个参考。
c#利用SAPI进行语音识别打开关闭相应程序,语音控制鼠标上下左右移动,单击双击右击等操作
基于SAPI语音识别的研究与应用.基于SAPI语音识别的研究与应用.
使用SAPI实现了本地识别和语音提示功能。
VC++6.0写的基于SAPI5.3的语音识别完整代码,内有编译好的程序,可直接运行。
朋友分享的一个调用微软4.0语音库接口的方法,希望对大家有所帮助。
Delphi7 应用微软Speech SDK 5.4(SAPI 5.4)语音开发包开发语音朗读与语音识别功能。语音朗读支持鼠标选择文字朗读,也支持朗读word文件内容;语音识别功能已实现,但识别率目前不高。
SAPI语音识别的头文件及源码__SAPICompliant_src
VB调用的方法 API相关问题
voxx_code_使用SAPI和VB编写的语音识别和合成的一个程序,非常棒的资源,很值得借鉴学习~~非常难找的资源啊,我可是费了九牛二虎之力的