在SAPI 5.1中加载多个语法文件

时间:2009-09-09 11:07:15

标签: speech-recognition sapi

我正在使用XML语法文件来开发命令和控制应用程序。由于语法中有大约4000个条目,因此我无法将它全部放在一个文件中(当我尝试加载它时会出错)。我编写了多个XML语法文件,但是当我尝试加载多个文件时,它会替换以前加载的文件。也就是说,程序只识别第二个语法文件中的短语。谁能告诉我如何在单个语音识别应用程序中加载多个语法?

1 个答案:

答案 0 :(得分:2)

您可以创建多个语法,您必须为它们提供不同的ID。 这些片段在Delphi中,但您可以适应:

  // init
  FGrammar1 := SpSharedRecoContext1.CreateGrammar(1); // ID 1
  FGrammar1.CmdLoadFromFile('CommandMemo1.xml', SLODynamic);
  FGrammar2 := SpSharedRecoContext1.CreateGrammar(2); // ID 2
  FGrammar2.CmdLoadFromFile('CommandMemo2.xml', SLODynamic);
  // start
  FGrammar1.CmdSetRuleIdState(0, SGDSActive);
  FGrammar2.CmdSetRuleIdState(0, SGDSActive);
...
  // in the onRecognition event, test the grammar Id
  case Result.PhraseInfo.GrammarId of
    1: if SameText(Txt, 'erase memo') then
         Memo1.Text := ''
       else
       if SameText(Txt, 'select memo') then
         Memo1.SelectAll;  
    2: if SameText(Txt, 'copy memo') then
         CopyToClipboard(Memo1.Text)
       else
       if SameText(Txt, 'paste memo') then
         Memo1.Text := PasteFromClipboard;
    else
      raise Exception.Create('bad GrammarId');
  end;