//Microsoft Speech SDK Version 5.1
#endregion
private SpeechLib.SpSharedRecoContext objRecoContext = null;
#region ISpeechRecoGrammar说明
//The ISpeechRecoGrammar automation interface enables applications to manage the words and phrases for the SR engine.
//为语音识别引擎自动管理应用程序单词和短语
/*
属性
Id Property Returns the Id assigned to the grammar when it was created.
RecoContext Property Returns the RecoContext object that created this grammar.
Rules Property Returns the collection of grammar rules in the RecoGrammar.
State Property Gets and sets the operational status of the speech grammar.
方法
CmdLoadFromFile Method Loads a command and control grammar from the specified file.
CmdLoadFromMemory Method Loads a compiled speech grammar from memory.
CmdLoadFromObject Method Loads a speech grammar from a COM object.
CmdLoadFromProprietaryGrammar Method Loads a proprietary speech grammar.
CmdLoadFromResource Method Loads a command and control grammar from a Win32 resource.
CmdSetRuleIdState Method Activates or deactivates a rule by its rule ID.
CmdSetRuleState Method Activates or deactivates a rule by its rule name.
DictationLoad Method Loads a dictation topic into the grammar.
DictationSetState Method Sets the dictation topic state.
DictationUnload Method Unloads the active dictation topic from the grammar.
IsPronounceable Method Determines if a word has a pronunciation.
Reset Method Clears all grammar rules and resets the grammar's language to NewLanguage.
SetTextSelection Method Sets the range of text selection information in a word sequence data buffer.
SetWordSequenceData Method Defines a word sequence data buffer for use by the SR engine.
*/
#endregion
private SpeechLib.ISpeechRecoGrammar grammar = null;
#region ISpeechGrammarRule说明
//The ISpeechGrammarRule automation interface defines the properties and methods of a speech grammar rule
//自动定义语音属性和方法的接口
/*
属性
Attributes Property Returns information about the attributes of a speech grammar rule.
Id Property Specifies the ID of the speech grammar rule.
InitialState Property Specifies the initial state of the speech grammar rule.
Name Property Specifies the name of the speech grammar rule.
方法
AddResource Method Adds a string to a speech rule.
AddState Method Adds a state to a speech rule.
Clear Method Clears a rule, leaving only its initial state.
*/
#endregion
private SpeechLib.ISpeechGrammarRule menuRule = null;
#endregion
private void cmdEnable_Click(object sender, System.EventArgs e)
{
// 得到一个RecoContext实例.
objRecoContext = new SpeechLib.SpSharedRecoContext();
// 指派一个事件给Hypothesis Event(中间层暂定的识别,即,初级的,临时的识别).
objRecoContext.Hypothesis += new _ISpeechRecoContextEvents_HypothesisEventHandler(Hypo_Event);
// 指派一个事件给语音识别.
objRecoContext.Recognition += new _ISpeechRecoContextEvents_RecognitionEventHandler(Reco_Event);
//创建grammer实例.
grammar = objRecoContext.CreateGrammar(0);
label3.Text = "Speak Out one of the follwoing./r/n1. New 2. Open 3. Close 4. Exit/r/n5. Cut 6. Copy 7. Paste 8. Delete";
//激活菜单命令.
menuRule = grammar.Rules.Add("MenuCommands",SpeechRuleAttributes.SRATopLevel|SpeechRuleAttributes.SRADynamic,1);
object PropValue = "";
menuRule.InitialState.AddWordTransition(null,"New"," ",SpeechGrammarWordType.SGLexical,"New", 1, ref PropValue, 1.0F );
menuRule.InitialState.AddWordTransition(null,"Open"," ",SpeechGrammarWordType.SGLexical,"Open", 2, ref PropValue, 1.0F );
menuRule.InitialState.AddWordTransition(null,"Close"," ",SpeechGrammarWordType.SGLexical,"Close",3, ref PropValue, 1.0F );
menuRule.InitialState.AddWordTransition(null,"Exit"," ",SpeechGrammarWordType.SGLexical,"Exit",4, ref PropValue, 1.0F );
menuRule.InitialState.AddWordTransition(null,"Cut"," ",SpeechGrammarWordType.SGLexical,"Cut",5, ref PropValue, 1.0F );
menuRule.InitialState.AddWordTransition(null,"Copy"," ",SpeechGrammarWordType.SGLexical,"Copy",6, ref PropValue, 1.0F );
menuRule.InitialState.AddWordTransition(null,"Paste"," ",SpeechGrammarWordType.SGLexical,"Paste",7, ref PropValue, 1.0F );
menuRule.InitialState.AddWordTransition(null,"Delete"," ",SpeechGrammarWordType.SGLexical,"Delete",8, ref PropValue, 1.0F );
grammar.Rules.Commit();
grammar.CmdSetRuleState("MenuCommands", SpeechRuleState.SGDSActive);
}
#region 初级和正式的语音识别事件处理
private void Reco_Event(int StreamNumber, object StreamPosition,SpeechRecognitionType RecognitionType,ISpeechRecoResult Result)
{
txtReco.Text = Result.PhraseInfo.GetText(0, -1, true);
}
private void Hypo_Event(int StreamNumber, object StreamPosition, ISpeechRecoResult Result)
{
txtHyp.Text = Result.PhraseInfo.GetText(0, -1, true);
}
#endregion
#region 清空控件和使关闭语音识别
private void cmdDiable_Click(object sender, System.EventArgs e)
{
ClearControls(label3, objRecoContext);
}
#endregion
#region 自定义函数
/// <summary>
/// 清空数据
/// </summary>
/// <param name="args">需要清空的变量及控件</param>
public void ClearControls(params object[] args)
{
foreach (object obj in args)
{
if (obj is TextBox)
{
TextBox t = (TextBox)obj;
t.Text = "";
}
if (obj is ListBox)
{
ListBox l = (ListBox)obj;
l.Items.Clear();
}
if (obj is Label)
{
Label l = (Label)obj;
l.Text = "";
}
if (obj is SpeechLib.SpSharedRecoContext)
{
SpeechLib.SpSharedRecoContext s = (SpeechLib.SpSharedRecoContext)obj;
s = null;
}
}
}
#endregion
}
}