bonjour je suis en train d'appliquer l'exemple d'un site en utilisant sdk 5.1.
par exemple dans une simple méthode qui sélectionne une image ça marche parfaitement :
et la methode qui execute l'action :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 public void InitialisationContexteRCSelect() { // Contexte de reconnaissance RCSelect et sa grammaire RCSelect = new SpSharedRecoContext(); // Lien de l'évenement Recognation RCSelect.Recognition += new _ISpeechRecoContextEvents_RecognitionEventHandler(RCSelect_Recognition_EventHandler); ISpeechRecoGrammar grammaireSelect; ISpeechGrammarRule maRègleSelect; // Création de la grammaire grammaireSelect = RCSelect.CreateGrammar(0); // Création de la règle maRègleSelect = grammaireSelect.Rules.Add("règleSelect", SpeechRuleAttributes.SRATopLevel | SpeechRuleAttributes.SRADefaultToActive, 0); ISpeechGrammarRuleState étatAprèsSelect; étatAprèsSelect = maRègleSelect.AddState(); // Définition de l'état initial, de la première transition object propertyValue = ""; maRègleSelect.InitialState.AddWordTransition( étatAprèsSelect, // état suivant "select", // mot à reconnaître " ", SpeechGrammarWordType.SGLexical, "propSelect", 0, ref propertyValue, (float)1); // Définition des transitions suivantes vers l'état final étatAprèsSelect.AddWordTransition(null, "one", " ", SpeechGrammarWordType.SGLexical, "propSelect", 0, ref propertyValue, (float)1); étatAprèsSelect.AddWordTransition(null, "two", " ", SpeechGrammarWordType.SGLexical, "propSelect", 0, ref propertyValue, (float)1); étatAprèsSelect.AddWordTransition(null, "three", " ", SpeechGrammarWordType.SGLexical, "propSelect", 0, ref propertyValue, (float)1); // Validation et activation des règles grammaireSelect.Rules.Commit(); grammaireSelect.CmdSetRuleState("règleSelect", SpeechRuleState.SGDSActive); // Lien de l'événement Recognation RCSelect.Recognition += new _ISpeechRecoContextEvents_RecognitionEventHandler(RCSelect_Recognition_EventHandler); }
toute est bien l'image est sélectionner,mais lorsque je voulais utiliser fichier xml qui contient mon grammaire comme ça,voici les etapes,en premier la méthode qui écoute l'événement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 private void RCSelect_Recognition_EventHandler(int StreamNumber, object StreamPosition, SpeechRecognitionType RecognitionType, ISpeechRecoResult Result) { // Désélection de l'image actuellement sélectionnée : switch (imageSelectionnée) { case 1: image1.BorderStyle = BorderStyle.None; break; case 2: image2.BorderStyle = BorderStyle.None; break; case 3: image3.BorderStyle = BorderStyle.None; break; default: break; } // Ajouté le style Fixed3D à l'image choisie : // On choisie le deuxième élément de Result soit l'élément numéro 1 string sélection = Result.PhraseInfo.GetText(1, 1, true); switch (sélection){ case "one": image1.BorderStyle = BorderStyle.Fixed3D; imageSelectionnée = 1; break; case "two": image2.BorderStyle = BorderStyle.Fixed3D; imageSelectionnée = 2; break; case "three": image3.BorderStyle = BorderStyle.Fixed3D; imageSelectionnée = 3; break; default: break; } }
est le fichier xml qui contient grammaire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public void InitialisationContexteRCSelect(){ // Contexte de reconnaissance RCSelect et sa grammaire RCSelect = new SpSharedRecoContext(); // Lien de l'événement Recognation RCSelect.Recognition += new _ISpeechRecoContextEvents_RecognitionEventHandler( RCSelect_Recognition_EventHandler); // Création de la grammaire ISpeechRecoGrammar grammaireSelect; grammaireSelect = RCSelect.CreateGrammar(0); // Chargement de la règle par le fichier .xml grammaireSelect.CmdLoadFromFile("regleSelection.xml", SpeechLoadOption.SLODynamic); // Validation et activation des règles grammaireSelect.Rules.Commit(); grammaireSelect.CmdSetRuleState("regleSelect",SpeechRuleState.SGDSActive); }
mon question ,dans la deuxieme méthode est ce qu'il y a une erreur ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <GRAMMAR LANGID="409"> <RULE NAME="selection" TOPLEVEL="ACTIVE"> <P>daba</P> <RULEREF NAME="imageNumber"/> </RULE> <RULE NAME="imageNumber"> <L> <P>one</P> <P>two</P> <P>three</P> </L> </RULE> </GRAMMAR>
et merci d'avance.
Partager