SAPI 5.1 multi-level grammatik
Hejsa.Jeg sidder her og er ved at lave et tale-genkendelses program, og jeg har et lille spørgsmål.
Jeg bruger SAPI 5.1 og vil gerne have sub-rules, men jeg kan kun finde ud af at have top-level rules.
Det vil sige at jeg kan få den til at genkende feks:
{Hello world}
Men jeg vil gerne have lavet min grammatik så jeg kan opnå følgende:
{Hello, Gooday, Greetings} {Sir, Madam, Child}
Sådan at man kan sige {Hello Child} .. eller {Gooday Sir} Ud fra de samme to regler.
Derudover vil jeg gerne have "wildcard" regler, dvs.
{Show, open} *{me} *{my, new} {Mail, Letter}
Sådan at man kan sige {Show Mail} .. Eller {Open new Mail}.. Eller pirat versionen: {Open me letter}
Nedenfor er kode snipplet:
private SpeechLib.ISpeechGrammarRule FirstWord = null;
private SpeechLib.ISpeechGrammarRule SecondWord = null;
private SpeechLib.ISpeechGrammarRules theRules = null;
//private SpeechLib.ISpeechGrammarRuleState ruleState1 = null;
//private SpeechLib.ISpeechGrammarRuleState ruleState2 = null;
private SpeechLib.SpSharedRecoContext objRecoContext = null;
private SpeechLib.ISpeechRecoGrammar grammar = null;
!!!------- Action for knappen man skal trykke på når den skal høre hvad man siger ------ !
private void cmdEnable_Click(object sender, System.EventArgs e)
{
objRecoContext = new SpeechLib.SpSharedRecoContext();
objRecoContext.Hypothesis += new _ISpeechRecoContextEvents_HypothesisEventHandler(Hypo_Event);
objRecoContext.Recognition += new _ISpeechRecoContextEvents_RecognitionEventHandler(Reco_Event);
grammar = objRecoContext.CreateGrammar(0);
FirstWord = grammar.Rules.Add("",SpeechRuleAttributes.SRATopLevel | SpeechRuleAttributes.SRADynamic, 1);
SecondWord = grammar.Rules.Add("",SpeechRuleAttributes.SRATopLevel | SpeechRuleAttributes.SRADynamic, 2);
object PropValue = "";
FirstWord.InitialState.AddWordTransition(null, "Open", " ", SpeechGrammarWordType.SGLexical, "", 1, ref PropValue, 1.0F);
FirstWord.InitialState.AddWordTransition(null, "New", " ", SpeechGrammarWordType.SGLexical, "", 1, ref PropValue, 1.0F);
SecondWord.InitialState.AddWordTransition(null, "Vision", " ", SpeechGrammarWordType.SGLexical, "", 2, ref PropValue, 1.0F);
grammar.Rules.Commit();
grammar.CmdSetRuleIdState(1, SpeechRuleState.SGDSActive);
grammar.CmdSetRuleIdState(2, SpeechRuleState.SGDSActive);
}
sådan som den er nu kan den genkende "new" "open" og "vision" .. Men ikke "new vision" .. Det vil jeg gerne have den kommer til..
Del-points for links til hvor jeg mere eller mindre direkte kan læse hvordan jeg skal gøre det (Tror det har noget med ruleTransition at gøre).. Og Max points og min beundring til kodeeksempler med beskrivelse.. :D
