我目前正在使用Microsoft Kinect SDK开发语音识别应用程序。该应用程序的目标是加载包含语法的任何(有效)XML文件,并使用它来处理语音。
该应用程序基于已有的应用程序,我非常了解其所有代码,除了一部分:
RecognizerInfo ri = GetKinectRecognizer();
if (ri != null)
{
this.spRecEng = new SpeechRecognitionEngine(ri.Id);
using (var memoryStream = new MemoryStream(Encoding.ASCII.GetBytes(Properties.Resources.SpeechGrammar)))
{
var g = new Grammar(memoryStream);
spRecEng.LoadGrammar(g);
}
spRecEng.SpeechRecognized += spRecEng_SpeechRecognized;
spRecEng.SpeechRecognitionRejected += spRecEng_SpeechRecognitionRejected;
spRecEng.SetInputToAudioStream(kinect.AudioSource.Start(), new SpeechAudioFormatInfo(EncodingFormat.Pcm, 16000, 16, 1, 32000, 2, null));
spRecEng.RecognizeAsync(RecognizeMode.Multiple);
关于" Properties.Resources.SpeechGrammar" referencem当我仔细检查应用程序属性的内容时,它具有以下功能:
internal static string SpeechGrammar {
get {
return ResourceManager.GetString("SpeechGrammar", resourceCulture);
}
这个功能背后的目的是什么?该应用程序没有包含一个Schema文件,用于验证应用程序加载的XML语法文件,从哪里获取它?
我还包括项目的源代码(它非常小),您可以在以下位置找到它:https://dl.dropboxusercontent.com/u/28555145/KinectForWindowsSpeech.rar
答案 0 :(得分:1)
该项目包括一个带有语音识别语法的XML文件。这种资源可以通过项目中分配的ID访问,不需要使用常用函数来处理带文件的任务。 关于验证,该项目使用Microsoft.Speech库进行验证,例如,如果xml文件不包含根元素,您将在语法加载中获得异常。