2009-09-09 6 views
0

J'utilise un fichier de grammaire XML pour développer une application de commande et de contrôle. Comme il y a environ 4000 entrées dans la grammaire, je ne peux pas tout avoir dans un seul fichier (cela donne une erreur quand j'essaie de le charger). J'ai écrit plusieurs fichiers de grammaire XML, mais lorsque j'essaie de charger plus d'un fichier, il remplace le fichier précédemment chargé. C'est le programme reconnaît seulement les phrases dans le deuxième fichier de grammaire. Quelqu'un peut-il me dire comment charger plusieurs grammaires dans une seule application de reconnaissance vocale?Chargement de plusieurs fichiers de grammaire dans SAPI 5.1

Répondre

2

Vous pouvez créer plusieurs grammaires, vous devez leur donner des ID différents. Ces extraits sont en Delphi, mais vous pouvez les adapter:

// 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; 
Questions connexes