Je cherche à démarrer dans SAPI 5.4
Très modestement je voudrais créer une grammaire qui reconnait un seul mot ('rouge')
dans un contexte de reconnaissance Inproc.
Problème: sous Windows 8.1, le code ci-dessous reste sourd!
Si, par hasard, quelqu'un de compétent passe par là, merci d'avance.
► Afficher le texte
Code : Tout sélectionner
; ReconnaîtreUnMot.au3
; Si l'ordi a un micro (!) dites le mot "rouge".
HotKeySet("^q","quitter")
HotKeySet("{ESC}", "quitter")
; Contexte de reconnaissance vocale, événements, moteur:
Global $RC = ObjCreate("SAPI.SpInProcRecoContext") ; objet contexte inProc
if @error then Erreur(@error, "-reco 1")
Global $events = ObjEvent($RC, "RC_") ; "RC_" = préfixe des événements
if @error then Erreur(@error, "-reco 2")
Global $moteur = $RC.Recognizer
if @error then Erreur(@error, "-reco 3")
; Entrée audio
Global $Category = ObjCreate("SAPI.SpObjectTokenCategory")
if @error then Erreur(@error, "-audio 1")
Global $key = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\AudioInput\TokenEnums\MMAudioIn\"
if @error then Erreur(@error, "-audio 2")
$Category.SetId($key)
if @error then Erreur(@error, "-audio 3")
Global $Token = ObjCreate("SAPI.SpObjectToken")
if @error then Erreur(@error, "-audio 4")
$Token.SetId($key)
if @error then Erreur(@error, "-audio 5")
$moteur.AudioInput = $Token
if @error then Erreur(@error, "-audio 6")
; Grammaire
Global $grammar = $RC.CreateGrammar(0)
if @error then Erreur(@error, "-gram 1")
Global $gRules = $grammar.Rules ;collection des règles: pour le moment aucune
if @error then Erreur(@error, "-gram 2")
Global $gRule = $gRules.Add("regle1", 1) ; nom de la règle / attribut TopLevel / id (opt)
if @error then Erreur(@error, "-gram 3")
Global $state = $gRule.InitialState()
if @error then Erreur(@error, "-gram 4")
$state.AddWordTransition( null, "rouge"," ") ; DestinationState / words / séparateur " "
if @error then Erreur(@error, "-gram 5")
While true
Sleep(1000)
;Allow the Audio In to finalize processing on the last 5 second capture
$RC.Pause
;Resume audio in processing: sinon il ne le fait qu'une fois
$RC.Resume
;Reset event function allocation (what is this? I think its garbage collection or something, needs
;UTILE ?
$events = ObjEvent($RC, "RC_")
WEnd
exit
Func Erreur($err, $txt)
ConsoleWrite("Erreur n°" & $err & " dans " & $txt & @crlf)
exit
EndFunc
Func RC_FalseRecognition($StreamNumber, $StreamPosition, $Result)
; Vient ici seulement quand la phrase "rouge" est faussement reconnu
ConsoleWrite(" pas reconnu: " & $Result.PhraseInfo.GetText & @crlf)
EndFunc
Func RC_Recognition($StreamNumber, $StreamPosition, $RecognitionType, $Result)
; Vient ici seulement quand la phrase "rouge" est reconnu
ConsoleWrite($Result.PhraseInfo.GetText & @crlf)
EndFunc
func quitter()
Exit
EndFunc


