www.pudn.com > MSTTSSpeech.rar > SpRecognition.cs


using System; 
 
namespace WindowsApplication1 
{ 
	/* 
	下面简单介绍一下中文语音识别的方法:  
 
	先把该语音识别的类源代码贴在下面,然后再做说明:  
*/ 
	public class SpRecognition  
 
	{  
 
  private static SpRecognition _Instance = null ;  
 
  private SpeechLib.ISpeechRecoGrammar isrg ;  
 
  private SpeechLib.SpSharedRecoContextClass ssrContex =null;  
 
  private System.Windows.Forms.Control cDisplay ;  
 
  private SpRecognition()  
 
  {  
 
	  ssrContex = new SpSharedRecoContextClass() ;  
 
	  isrg = ssrContex.CreateGrammar(1) ;  
 
	  SpeechLib._ISpeechRecoContextEvents_RecognitionEventHandler recHandle = new _ISpeechRecoContextEvents_RecognitionEventHandler(ContexRecognition) ;  
 
	  ssrContex.Recognition += recHandle ;  
 
  }  
 
  public void BeginRec(Control tbResult)  
 
  {  
 
	  isrg.DictationSetState(SpeechRuleState.SGDSActive) ;  
 
	  cDisplay = tbResult ;  
 
  }  
 
  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)  
 
  {  
 
	  cDisplay.Text += result.PhraseInfo.GetText(0,-1,true) ;  
 
  }  
 
	}  
 
 /* 
	我们定义了ssrContex 和isrg为语音识别的上下文和语法,通过设置isrg的DictationSetState方法, 
	我们可以开始或结束识别,在上面的程序中是BeginRec和CloseRec方法。 
	cDisplay 是我们用来输出识别结果的地方,为了能够在大部分控件上都可以显示结果, 
	我用了一个Control 类来定义它。当然, 
	每次语音识别后都会触发ISpeechRecoContextEvents_RecognitionEventHandler 事件, 
	我们定义了一个这样的方法ContexRecognition来响应事件, 
	并且在这个方法里输出识别结果。 
	*/ 
}