我一直在使用带有 SAPI 5.4 的 SRGS 语法来定义命令和控制语法。现在我想切换到文本语法,以便它们与 SAPI 5.1(甚至可能是 SAPI 4?)兼容。
我在这里找到了一个与SAPI 5.4 兼容的文本语法的示例
我想在运行时从它的 XML 文件加载该语法,而不是使用语法编译器工具,然后将语法的二进制版本作为资源。理想情况下,我希望能够在内存中创建一个 XDocument,然后让 Speech.Recognizer 监听这些命令。
有谁知道如何做到这一点?谢谢!
我一直在使用带有 SAPI 5.4 的 SRGS 语法来定义命令和控制语法。现在我想切换到文本语法,以便它们与 SAPI 5.1(甚至可能是 SAPI 4?)兼容。
我在这里找到了一个与SAPI 5.4 兼容的文本语法的示例
我想在运行时从它的 XML 文件加载该语法,而不是使用语法编译器工具,然后将语法的二进制版本作为资源。理想情况下,我希望能够在内存中创建一个 XDocument,然后让 Speech.Recognizer 监听这些命令。
有谁知道如何做到这一点?谢谢!
要使用文本语法,您必须直接与 SAPI COM 交互(通过包含 Microsoft 语音对象库) - 而不仅仅是使用更高级别的 System.Speech。
因此,如果您复制了上面链接的文本语法并将其保存为 sol.xml(它位于 SAPI SDK 示例中),您可以使用以下代码加载它:
SpSharedRecoContext reco = new SpSharedRecoContext();
ISpeechRecoGrammar grammar;
grammar = reco.CreateGrammar();
grammar.CmdLoadFromFile("sol.xml");
grammar.CmdSetRuleIdState(0, SpeechRuleState.SGDSActive);
我使用 XP (5.1)、Visa (5.3) 和 7 (5.4) 测试了该代码。