private
static RecognizerInfo TryGetKinectRecognizer()
????????{
????????????IEnumerable<RecognizerInfo> recognizers;
????????????// This is required to catch the case when an expected recognizer is not installed.
????????????// By default - the x86 Speech Runtime is always expected.
????????????try
????????????{
????????????????recognizers = SpeechRecognitionEngine.InstalledRecognizers();
????????????}
????????????catch (COMException)
????????????{
????????????????return
null;
????????????}
????????????foreach (RecognizerInfo recognizer in recognizers)
????????????{
????????????????string
value;
????????????????recognizer.AdditionalInfo.TryGetValue("Kinect", out
value);
????????????????if ("True".Equals(value, StringComparison.OrdinalIgnoreCase) && "en-US".Equals(recognizer.Culture.Name, StringComparison.OrdinalIgnoreCase))
????????????????{
???????????????????//return recognizer;
????????????????}
????????????????if ("zh-CN".Equals(recognizer.Culture.Name, StringComparison.OrdinalIgnoreCase))
????????????????{
????????????????????return recognizer;
????????????????}
????????????}
????????????return
null;
????????}
RecognizerInfo ri = TryGetKinectRecognizer();
this.speechEngine = new SpeechRecognitionEngine(ri.Id);
var directions = new Choices();
directions.Add(new SemanticResultValue("前", "FORWARD"));
directions.Add(new SemanticResultValue("前进", "FORWARD"));
?directions.Add(new SemanticResultValue("前移", "FORWARD"));
?directions.Add(new SemanticResultValue("后", "BACKWARD"));
?directions.Add(new SemanticResultValue("后退", "BACKWARD"));
??directions.Add(new SemanticResultValue("后移", "BACKWARD"));
??directions.Add(new SemanticResultValue("左", "LEFT"));
??directions.Add(new SemanticResultValue("右", "RIGHT"));
?var gb = new GrammarBuilder { Culture = ri.Culture };
gb.Append(directions);
var g = new Grammar(gb);
? this.speechEngine.LoadGrammar(g);