如何加载使用SAPI 5.3标记的语法xml文件?

时间:2009-02-13 15:46:59

标签: .net xml sapi

我的问题是如何加载使用它们在MSDN文档中列出的标记的语法文件? 我想在标题语法格式标记(SAPI 5.3)下使用MSDN中记录的格式标记。

http://msdn.microsoft.com/en-us/library/ms723634(VS.85).aspx

在那里列出了DEFINE,LIST,OPT等标签。但是每当我尝试在grammar.xml文件中使用这些标签时,我都会收到错误消息,说明该标签不受支持。

如果使用仅使用标签中的一个,项目等的语法文件,则在MSDN中列出;语法文件加载。

http://msdn.microsoft.com/en-us/library/ms870140.aspx

我知道这可能很简单,但我似乎无法弄清楚......

语法文件......有效

  <grammar xmlns="http://www.w3.org/2001/06/grammar"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.w3.org/2001/06/grammar
                                http://www.w3.org/TR/speech-grammar/grammar.xsd"
            xml:lang="en-US" version="1.0" root="command">


  <rule id="command" scope="public">

    <one-of>
      <item>nail</item>
      <item>hammer</item>
      <item>saw</item>
    </one-of>
  </rule>

   </grammar>

代码清单-------------------

    public Form1()
    {

        InitializeComponent();

        // set up the recognizer
        _speechRecognizer = new SpeechRecognizer();
        _speechRecognizer.Enabled = false;
        _speechRecognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(_speechRecognizer_SpeechRecognized);

        // set up the command and control grammar
        Grammar commandGrammar = new Grammar(@"grammar.xml");
        commandGrammar.Name = "main command grammar";
        commandGrammar.Enabled = true;

        // activate the command grammer
        _speechRecognizer.LoadGrammar(commandGrammar);

        _speechRecognizer.Enabled = true;
    } 

1 个答案:

答案 0 :(得分:1)

您似乎正在使用c#,因此使用语音系统的.NET接口。据我所知,.NET接口只显式支持W3C SRGS XML语法格式, http://www.w3.org/TR/speech-grammar/。虽然您链接的语法格式是MS特定格式,他们似乎称之为CFG。只有低级COM API提供CFG格式的详细信息。

您应该能够在SRGS中执行与CFG中相同的操作。

使用SDK工具编译后,您可以加载二进制版本的CFG。