- Pour que ce qui suive marche, vous devez avoir un microphone installé sur votre machine.
- Le script utilise SAPI, vous pouvez telecharger la version 5.1 ici :
http://www.microsoft.com/downloads/deta ... layLang=en
Il semble cependant que SAPI est maintenant distribué avec Vista et Win7, donc testez le script avant d'installer SAPI, vous pourriez avoir une bonne surprise.
Le script écoute ce que vous dites dans le micro, puis grâce à la reconnaissance vocale SAPI, va écrire le message dans la console. Plus vous utilisez la reconnaissance vocale, plus les résultats sont bon. Vous pouvez avoir d'excellentes réponses après 1 heure d'utilisation. La reconnaissance vocale utilise un moteur de reconnaissance vocale différent de celui utilisé par Vista/7, ce qui veut dire que vous pouvez utiliser la reconnaissance vocale dans votre script pour vos propres commandes sans interferer avec la reconnaissance vocale déjà mise en place (si c'est le cas) par Vista/7.
Script
Code : Tout sélectionner
Global $h_Context = ObjCreate("SAPI.SpInProcRecoContext")
Global $h_Recognizer = $h_Context.Recognizer
Global $h_Grammar = $h_Context.CreateGrammar(1)
$h_Grammar.Dictationload
$h_Grammar.DictationSetState(1)
;Create a token for the default audio input device and set it
Global $h_Category = ObjCreate("SAPI.SpObjectTokenCategory")
$h_Category.SetId("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\AudioInput\TokenEnums\MMAudioIn\")
Global $h_Token = ObjCreate("SAPI.SpObjectToken")
$h_Token.SetId("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\AudioInput\TokenEnums\MMAudioIn\")
$h_Recognizer.AudioInput = $h_Token
Global $i_ObjInitialized = 0
Global $h_ObjectEvents = ObjEvent($h_Context, "SpRecEvent_")
If @error Then
ConsoleWrite("ObjEvent error: " & @error & @CRLF)
$i_ObjInitialized = 0
Else
ConsoleWrite("ObjEvent created Successfully!" & @CRLF)
$i_ObjInitialized = 1
EndIf
While $i_ObjInitialized
Sleep(5000)
;Allow the Audio In to finalize processing on the last 5 second capture
$h_Context.Pause
;Resume audio in processing
$h_Context.Resume
;Reset event function allocation (what is this? I think its garbage collection or something, needs clarification)
$h_ObjectEvents = ObjEvent($h_Context, "SpRecEvent_")
WEnd
Func SpRecEvent_Hypothesis($StreamNumber, $StreamPosition, $Result)
ConsoleWrite("Hypothesis(): Hypothized text is: " & $Result.PhraseInfo.GetText & @CRLF)
EndFunc ;==>SpRecEvent_Hypothesis
Func SpRecEvent_Recognition($StreamNumber, $StreamPosition, $RecognitionType, $Result)
ConsoleWrite($RecognitionType & "||" & $Result.PhraseInfo.GetText & @CRLF)
EndFunc ;==>SpRecEvent_Recognition
Func SpRecEvent_SoundStart($StreamNumber, $StreamPosition)
ConsoleWrite("Sound Started" & @CRLF)
EndFunc ;==>SpRecEvent_SoundStart
Func SpRecEvent_SoundEnd($StreamNumber, $StreamPosition)
ConsoleWrite("Sound Ended" & @CRLF)
EndFunc ;==>SpRecEvent_SoundEnd
L'event SoundEnd semble ne pas marcher, mais tout le reste est ok. Ne pas s'inquieter a propos du Sleep(5000), il n'interfere pas avec l'opération de reconnaissance vocale.
Le lien suivant est la documentation SAPI si besoin est :
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Have fun!