Je crois que sous Window XP, il faut installer le SDK SAPI 5.1 pour que ça marche
C'est un code de base qui reprend celui présenté dans l'aide du CHM du SDK SAPI 5.1 dont voici le code:
Code : Tout sélectionner
Dim WithEvents RC As SpInProcRecoContext
Dim Recognizer As SpInprocRecognizer
Dim myGrammar As ISpeechRecoGrammar
Private Sub Form_Load()
Set RC = New SpInProcRecoContext
Set Recognizer = RC.Recognizer
Set myGrammar = RC.CreateGrammar
myGrammar.DictationSetState SGDSActive
Dim Category As SpObjectTokenCategory
Set Category = New SpObjectTokenCategory
Category.SetId SpeechCategoryAudioIn
Dim Token As SpObjectToken
Set Token = New SpObjectToken
Token.SetId Category.Default()
Set Recognizer.AudioInput = Token
End Sub
Private Sub RC_Recognition(ByVal StreamNumber As Long, ByVal StreamPosition As Variant, ByVal RecognitionType As SpeechLib.SpeechRecognitionType, ByVal Result As SpeechLib.ISpeechRecoResult)
Label1.Caption = Result.PhraseInfo.GetText
End Sub
A ce propos, il y a une erreur dans le fichier COMatePLUS.pbi, il faut remplacer les Hresult par des Hresult.l car sinon ça entraine des erreurs si on compile en 64 bits
Il est évident que si vous n'avez jamais utiliser la reconnaissance vocale de votre ordi, ça ne va pas bien fonctionner!
Il faut dans un premier temps exécuter le module d'apprentissage de la voix de window et suivre les didacticiels, plus vous vous servirez de la reconnaissance vocale, mieux il interprétera votre voix.
Un code complet pour tester de suite (Amusez vous bien

Si vous dites "Bonjour", un MessageBox apparaitra!
Code : Tout sélectionner
XIncludeFile "COMatePLUS.pbi"
;{- Enumerations / DataSections
;{ Windows
Enumeration
#Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
#Text_Message
#String
#Text_2
#Text_3
#Editor
EndEnumeration
;}
;{ Fonts
Enumeration
#Font_Text_Message
#Font_String_1
EndEnumeration
;}
;}
Structure Parametres
SpRecoContext.i
SpRecoGrammar.i
EndStructure
Procedure SpeechRecoContextEvents(event.COMateObject, event$, parameterCount)
Protected iParam.iUnknown
Protected SpeechRecoResult.COMateObject
Protected SpeechPhraseInfo.COMateObject
Protected Texte.s
;Debug("EVT " + Str(parameterCount) + " " + event$)
Select event$
Case "Recognition"
Debug "-------------Recognition-----------------"
iParam = event\GetObjectEventParam(4)
If iParam
SpeechRecoResult = COMate_WrapCOMObject(iParam)
If SpeechRecoResult
SpeechPhraseInfo = SpeechRecoResult\GetObjectProperty("PhraseInfo()")
If SpeechPhraseInfo
Texte = SpeechPhraseInfo\GetStringProperty("GetText(0, -1, 1)")
SetGadgetText(#String, Texte)
If FindString(LCase(Texte), "bonjour")
MessageRequester("Info", "Vous avez dit le mot Bonjour!")
EndIf
SpeechPhraseInfo\Release()
EndIf
SpeechRecoResult\Release()
EndIf
iParam\Release()
EndIf
Case "Hypothesis"
Debug "------------Hypothesis------------------"
SetGadgetText(#Text_Message, "Enregistrement en cours...")
iParam = event\GetObjectEventParam(3)
If iParam
SpeechRecoResult = COMate_WrapCOMObject(iParam)
If SpeechRecoResult
SpeechPhraseInfo = SpeechRecoResult\GetObjectProperty("PhraseInfo()")
If SpeechPhraseInfo
Texte = SpeechPhraseInfo\GetStringProperty("GetText(0, -1, 1)")
SetGadgetText(#Editor, Texte + Chr(13) + GetGadgetText(#Editor))
SpeechPhraseInfo\Release()
EndIf
SpeechRecoResult\Release()
EndIf
iParam\Release()
EndIf
Case "SoundStart"
Debug "SoundStart"
SetGadgetText(#String, "")
Case "SoundEnd"
Debug "SoundEnd"
SetGadgetText(#Text_Message, "Parler")
Case "StartStream"
; Debug "StartStream"
Case "EndStream"
; Debug "EndStream"
EndSelect
EndProcedure
Procedure Load_Speech_Recognition(*Speech_Recognition.Parametres)
Protected SpRecoContext.COMateObject
Protected SpRecoGrammar.COMateObject
Protected SpRecognizer.COMateObject
Protected SpeechRecognizer.COMateObject
Protected SpObjectTokenCategory.COMateObject
Protected SpObjectToken.COMateObject
Protected Init_Recognition.l = 0
SpRecoContext = COMate_CreateObject("SAPI.SpInProcRecoContext")
If SpRecoContext = 0 : Goto Clean : EndIf
SpRecoGrammar = SpRecoContext\GetObjectProperty("CreateGrammar(0)")
If SpRecoGrammar = 0 : Goto Clean : EndIf
SpRecognizer = SpRecoContext\GetObjectProperty("Recognizer()")
If SpRecognizer = 0 : Goto Clean : EndIf
Recognizer.idispatch = SpRecognizer\GetCOMObject()
If Recognizer = 0 : Goto Clean : EndIf
Recognizer\QueryInterface(?IID_SpeechRecognizer, @SpeechRecognizer_)
If SpeechRecognizer_ = 0 : Goto Clean : EndIf
SpeechRecognizer.COMateObject = COMate_WrapCOMObject(SpeechRecognizer_)
If SpeechRecognizer = 0 : Goto Clean : EndIf
#SPLO_STATIC = 0
SpRecoGrammar\invoke("Dictationload('', " + Str(#SPLO_STATIC) + ")")
SpObjectTokenCategory = COMate_CreateObject("SAPI.SpObjectTokenCategory")
If SpObjectTokenCategory = 0 : Goto Clean : EndIf
#SpeechCategoryAudioIn="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\AudioInput"
If SpObjectTokenCategory\invoke("SetId('"+ #SpeechCategoryAudioIn +"', 0)") <> 0
Debug comate_getlasterrordescription()
Goto Clean
EndIf
SpObjectToken = COMate_CreateObject("SAPI.SpObjectToken")
If SpObjectToken = 0 : Goto Clean : EndIf
Audio$=SpObjectTokenCategory\GetStringProperty("Default()")
Debug audio$
If SpObjectToken\invoke("SetId('"+ Audio$ + "')") <> 0
Goto Clean
EndIf
If SpeechRecognizer\Setpropertyref("AudioInput(" + Str(SpObjectToken) + " as COMateObject)") <> 0
Goto Clean
EndIf
If SpRecoContext\SetEventHandler(#COMate_CatchAllEvents, @SpeechRecoContextEvents()) <> 0
Goto Clean
EndIf
; Lance le moteur de reconnaissance vocale
#SGDSActive = 1
If SpRecoGrammar\invoke("DictationSetState(" + Str(#SGDSActive) + ")") <> 0
Goto Clean
Else
Init_Recognition = 1
EndIf
Clean:
If SpRecognizer <> 0 : SpRecognizer\Release() : EndIf
If SpeechRecognizer <> 0 : SpeechRecognizer\Release() : EndIf
If SpObjectTokenCategory <> 0 : SpObjectTokenCategory\Release() : EndIf
If SpObjectToken <> 0 : SpObjectToken\Release() : EndIf
If Init_Recognition = 0
If SpRecoContext <> 0 : SpRecoContext\Release() : EndIf
If SpRecoGrammar <> 0 : SpRecoGrammar\Release() : EndIf
Else
*Speech_Recognition\SpRecoContext = SpRecoContext
*Speech_Recognition\SpRecoGrammar = SpRecoGrammar
EndIf
ProcedureReturn Init_Recognition
EndProcedure
Procedure Finish_Speech_Recognition(*Speech_Recognition.Parametres)
Protected SpRecoContext.COMateObject
Protected SpRecoGrammar.COMateObject
SpRecoContext = *Speech_Recognition\SpRecoContext
SpRecoGrammar = *Speech_Recognition\SpRecoGrammar
If SpRecoGrammar <> 0
; Arrête le moteur de reconnaissance vocale
#SGDSInActive = 0
SpRecoGrammar\invoke("DictationSetState(" + Str(#SGDSInActive) + ")")
SpRecoGrammar\Release()
Debug "ok"
EndIf
If SpRecoContext <> 0
SpRecoContext\SetEventHandler(#COMate_CatchAllEvents, 0)
SpRecoContext\Release()
EndIf
EndProcedure
Procedure OpenWindow_Window_0()
If OpenWindow(#Window_0, 0, 0, 400, 400, "Speech Recognition", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_TitleBar)
TextGadget(#Text_Message, 0, 0, 400, 50, "Parler et commencer par dire : Bonjour", #PB_Text_Center)
StringGadget(#String, 0, 95, 400, 35, "")
TextGadget(#Text_2, 0, 75, 400, 20, " Phrase Reconnue:")
TextGadget(#Text_3, 0, 160, 400, 20, " Phrase décryptée au fur et à mesure de l'enregistrement:")
EditorGadget(#Editor, 0, 180, 400, 220)
; Gadget Fonts
SetGadgetFont(#Text_Message, LoadFont(#Font_Text_Message, "Microsoft Sans Serif", 12, 272))
SetGadgetFont(#String, LoadFont(#Font_String_1, "Microsoft Sans Serif", 12, 16))
EndIf
EndProcedure
CoInitialize_(0)
If Load_Speech_Recognition(@Speech_Recognition.Parametres) = 0
MessageRequester("Erreur", "L'initialisation du moteur de la reconnaissance vocale à échoué!")
End
EndIf
OpenWindow_Window_0()
;{- Event loop
Repeat
Select WaitWindowEvent()
;/ //////////////////
Case #PB_Event_Gadget
Select EventGadget()
Case #Text_Message
Case #String
Case #Text_2
Case #Text_3
Case #Editor
EndSelect
;/ ///////////////////////
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Window_0
CloseWindow(#Window_0)
Finish_Speech_Recognition(@Speech_Recognition.Parametres)
CoUninitialize_()
Break
EndSelect
EndSelect
ForEver
;
;}
Macro GUID(iid, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, b0)
DataSection
IID:
Data.l $a0
Data.w $a1, $a2
Data.b $a3, $a4, $a5, $a6, $a7, $a8, $a9, $b0
EndDataSection
EndMacro
GUID(IID_SpeechRecognizer, 2D5F1C0C, BD75, 4B08, 94, 78, 3B, 11, FE, A2, 58, 6C)