autre exemple , utilisation avec un programme comprenant des boutons , et des case a cocher
se sera le dictionnaire de mots reconnu dans le programme ...
contrairement a celui au dessus, ce programme ne comprends que la formulation simple
par exemple pour le bouton "ok" , il faut dire "ok" ... rien avant , rien apres
dans le dico , seul les termes :"ok,annuler,nico,vache,poisson,chat,quitter" seront reconnus ..
Code : Tout sélectionner
XIncludeFile "COMatePLUS.pbi"
;{ **************** init synthese Vocale ***************************************
;-init synthese vocale
Procedure Speak2(Text$)
Interface ISpNotifySource Extends IUnknown
SetNotifySink(a)
SetNotifyWindowMessage(a,b,c,d)
SetNotifyCallbackFunction(a,b,c)
SetNotifyCallbackInterface(a,b,c)
SetNotifyWin32Event()
WaitForNotifyEvent(a)
GetNotifyEventHandle()
EndInterface
Interface ISpEventSource Extends ISpNotifySource
SetInterest(a,b)
GetEvents(a,b,c)
GetInfo(a)
EndInterface
Interface ISpVoice Extends ISpEventSource
SetOutput(a,b)
GetOutputObjectToken(a)
GetOutputStream(a)
Pause()
Resume()
SetVoice(a)
GetVoice(a)
Speak(a,b,c)
SpeakStream(a,b,c)
GetStatus(a,b)
Skip(a,b,c)
SetPriority(a)
GetPriority(a)
SetAlertBoundary(a)
GetAlertBoundary(a)
SetRate(a)
GetRate(a)
SetVolume(a)
GetVolume(a)
WaitUntilDone(a)
SetSyncSpeakTimeout(a)
GetSyncSpeakTimeout(a)
SpeakCompleteEvent()
IsUISupported(a,b,c,d)
DisplayUI(a,b,c,d,e)
EndInterface
#CLSCTX_INPROC_SERVER = $1
#CLSCTX_INPROC_HANDLER = $2
#CLSCTX_LOCAL_SERVER = $4
#CLSCTX_REMOTE_SERVER = $10
#CLSCTX_ALL = (#CLSCTX_INPROC_SERVER|#CLSCTX_INPROC_HANDLER|#CLSCTX_LOCAL_SERVER|#CLSCTX_REMOTE_SERVER)
Global VoiceObject.ISpVoice
length = Len(Text$)*2+10
*mem = AllocateMemory(length)
MultiByteToWideChar_(#CP_ACP ,0,Text$,-1,*mem, length)
VoiceObject\Speak(*mem,0,0)
DataSection
CLSID_SpVoice:
;96749377-3391-11D2-9EE3-00C04F797396
Data.l $96749377
Data.w $3391,$11D2
Data.b $9E,$E3,$00,$C0,$4F,$79,$73,$96
IID_ISpVoice:
;6C44DF74-72B9-4992-A1EC-EF996E0422D4
Data.l $6C44DF74
Data.w $72B9,$4992
Data.b $A1,$EC,$EF,$99,$6E,$04,$22,$D4
EndDataSection
EndProcedure
;}
; **********************************************************************
;{ ************ init reconnaissance Vocale **************************************************************
;-init reconaissance Vocale
#CLSCTX_INPROC_SERVER = $1
#CLSCTX_INPROC_HANDLER = $2
#CLSCTX_LOCAL_SERVER = $4
#CLSCTX_REMOTE_SERVER = $10
#CLSCTX_ALL = (#CLSCTX_INPROC_SERVER|#CLSCTX_INPROC_HANDLER|#CLSCTX_LOCAL_SERVER|#CLSCTX_REMOTE_SERVER)
enumeration
#window
endenumeration
Structure Parametres
SpRecoContext.i
SpeechRecoGrammar.i
EndStructure
;Global VoiceObject.ISpVoice
Declare OpenWindow_Window_0()
Declare SpeechRecoContextEvents(event.COMateObject, event$, parameterCount)
Declare Load_Speech_Recognition(*Speech_Recognition.Parametres, File.s)
Declare Load_Speech_Recognition2(*Speech_Recognition.Parametres)
Declare Finish_Speech_Recognition(*Speech_Recognition.Parametres)
Declare Desactive_Recognition(*Speech_Recognition.Parametres, Valeur.l)
Declare speakk(voix,text.s,volume,vitesse)
CoInitialize_(0)
; ********** chargement du Dico ************************
File.s = "dico_choix.xml"
If Load_Speech_Recognition(@Speech_Recognition.Parametres, File.s) = 0
MessageRequester("Erreur", "L'initialisation du moteur de la reconnaissance vocale à échoué!")
End
EndIf
;}
; ***************************************************************************************************
;{- Enumerations / DataSections
;{ Windows
Enumeration
#Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
#Button_0
#Button_1
#Button_2
#CheckBox_3
#CheckBox_4
#CheckBox_5
#Button_6
EndEnumeration
;}
;}
Procedure OpenWindow_Window_0()
If OpenWindow(#Window_0, 488, 218, 490, 244, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
If CreateGadgetList(WindowID(#Window_0))
ButtonGadget(#Button_0, 21, 16, 76, 40, "Ok")
ButtonGadget(#Button_1, 114, 17, 76, 40, "annuler")
ButtonGadget(#Button_2, 202, 17, 76, 40, "Nico")
CheckBoxGadget(#CheckBox_3, 38, 110, 163, 24, "vache")
CheckBoxGadget(#CheckBox_4, 38, 133, 163, 24, "poisson")
CheckBoxGadget(#CheckBox_5, 38, 156, 163, 24, "chat")
ButtonGadget(#Button_6, 392, 187, 76, 40, "quitter")
EndIf
EndIf
EndProcedure
OpenWindow_Window_0()
;{- Event loop
Repeat
Select WaitWindowEvent(2)
; ///////////////////
Case #PB_Event_Gadget
Select EventGadget()
Case #Button_0
Case #Button_1
Case #Button_2
Case #CheckBox_3
Case #CheckBox_4
Case #CheckBox_5
Case #Button_6
EndSelect
; ////////////////////////
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Window_0
CloseWindow(#Window_0)
Break
EndSelect
EndSelect
Forever
;
;}
;{ ******************** zone procedure Reconnaissance vocale ****************************************
;- procedure reconnaissance vocale
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_ISpeechRecoGrammar ,B6D6F79F,2158,4E50,B5,BC,9A,9C,CD,85,2A,09)
GUID(IID_ISpeechRecognizer, 2D5F1C0C, BD75, 4B08, 94, 78, 3B, 11, FE, A2, 58, 6C)
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 "FalseRecognition"
;SetGadgetText(#String, "<Phrase ou mot non reconnu>")
Case "Recognition"
Debug "-------------Recognition-----------------"
iParam = event\GetObjectEventParam(4)
If iParam
SpeechRecoResult = COMate_WrapCOMObject(iParam)
If SpeechRecoResult
SpeechPhraseInfo = SpeechRecoResult\GetObjectProperty("PhraseInfo()")
If SpeechPhraseInfo
mem_text.s=texte.s ; on retient le mot qui viens d'etre reconnu
Texte.s = SpeechPhraseInfo\GetStringProperty("GetText(0, -1, 1)") ; on recupere le mot entendu
if mem_text<>texte.s ; ajout du teste qui empeche la diction du meme mot reconnu ..; ajout du teste qui empeche la diction du meme mot reconnu ; on parle seulement si ce n'est pas le meme mot que tout a l'heure
;SetGadgetText(#String, Texte)
debug texte
Select Texte
case "ok" ; terme reçu par la reconnaissance vocale
MessageRequester("info","tu as choisi 'OK'")
Case "annuler"; terme reçu par la reconnaissance vocale
MessageRequester("info","tu as choisi 'ANNULER'")
Case "nico"; terme reçu par la reconnaissance vocale
MessageRequester("info","tu as choisi 'NICO'")
case "vache"; terme reçu par la reconnaissance vocale
SetGadgetState(#CheckBox_3, 1)
SetGadgetState(#CheckBox_4, 0)
SetGadgetState(#CheckBox_5, 0)
case "poisson"; terme reçu par la reconnaissance vocale
SetGadgetState(#CheckBox_3, 0)
SetGadgetState(#CheckBox_4, 1)
SetGadgetState(#CheckBox_5, 0)
case "chat"; terme reçu par la reconnaissance vocale
SetGadgetState(#CheckBox_3, 0)
SetGadgetState(#CheckBox_4, 0)
SetGadgetState(#CheckBox_5, 1)
case "quitter"; terme reçu par la reconnaissance vocale
CoUninitialize_() ; sert a quitter le moteur de reconnaissance vocale
end
EndSelect
Texte=" "
SpeechPhraseInfo\Release()
endif
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"
ProcedureReturn
EndSelect
EndProcedure
Procedure Load_Speech_Recognition(*Speech_Recognition.Parametres, File.s)
Protected SpRecoContext.COMateObject
Protected SpRecoGrammar.COMateObject
Protected Init_Recognition.l = 0
Protected SpRecognizer.COMateObject
Protected SpeechRecognizer.COMateObject
Protected SpObjectTokenCategory.COMateObject
Protected SpObjectToken.COMateObject
SpRecoContext = COMate_CreateObject("SAPI.SpInProcRecoContext")
Debug COMate_GetLastErrorDescription()
If SpRecoContext = 0 : Goto Clean : EndIf
SpRecoGrammar = SpRecoContext\GetObjectProperty("CreateGrammar(0)")
If SpRecoGrammar = 0 : Goto Clean : EndIf
RecoGrammar.idispatch = SpRecoGrammar\GetCOMObject()
If RecoGrammar = 0 : Goto Clean : EndIf
RecoGrammar\QueryInterface(?IID_ISpeechRecoGrammar, @SpeechRecoGrammar_)
If SpeechRecoGrammar_= 0 : Goto Clean : EndIf
SpeechRecoGrammar.COMateObject = COMate_WrapCOMObject(SpeechRecoGrammar_)
Debug COMate_GetLastErrorDescription()
If SpeechRecoGrammar = 0 : Goto Clean : EndIf
#SLOStatic = 0
#SLODynamic = 1
If SpeechRecoGrammar\invoke("CmdLoadFromFile('" + File + "', " + Str(#SLODynamic) + ")") <> 0
Debug COMate_GetLastErrorDescription()
Goto Clean
EndIf
If SpRecoContext\SetEventHandler(#COMate_CatchAllEvents, @SpeechRecoContextEvents()) <> 0
Debug COMate_GetLastErrorDescription()
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_ISpeechRecognizer, @SpeechRecognizer_)
If SpeechRecognizer_ = 0 : Goto Clean : EndIf
SpeechRecognizer.COMateObject = COMate_WrapCOMObject(SpeechRecognizer_)
If SpeechRecognizer = 0 : Goto Clean : EndIf
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
; La Règle de grammaire est active.
#SGDSActive = 1
If SpeechRecoGrammar\invoke("CmdSetRuleIdState(0, " + Str(#SGDSActive) + ")") <> 0
Goto Clean
Else
Init_Recognition = 1
EndIf
Clean:
If Init_Recognition = 0
If SpRecoContext <> 0 : SpRecoContext\Release() : EndIf
If SpRecoGrammar <> 0 : SpRecoGrammar\Release() : EndIf
If SpeechRecoGrammar <> 0 : SpeechRecoGrammar\Release() : EndIf
Else
*Speech_Recognition\SpRecoContext = SpRecoContext
*Speech_Recognition\SpeechRecoGrammar = SpeechRecoGrammar
EndIf
ProcedureReturn Init_Recognition
EndProcedure
Procedure Finish_Speech_Recognition(*Speech_Recognition.Parametres)
Protected SpRecoContext.COMateObject
Protected SpeechRecoGrammar.COMateObject
SpRecoContext = *Speech_Recognition\SpRecoContext
SpeechRecoGrammar = *Speech_Recognition\SpeechRecoGrammar
If SpeechRecoGrammar <> 0
; La Règle de grammaire est inactive.
#SGDSInActive = 0
SpeechRecoGrammar\invoke("CmdSetRuleIdState(0, " + Str(#SGDSInActive) + ")")
SpeechRecoGrammar\Release()
EndIf
If SpRecoContext <> 0
SpRecoContext\SetEventHandler(#COMate_CatchAllEvents, 0)
SpRecoContext\Release()
EndIf
EndProcedure
Procedure Desactive_Recognition(*Speech_Recognition.Parametres, Valeur.l)
Protected SpeechRecoGrammar.COMateObject
SpeechRecoGrammar = *Speech_Recognition\SpeechRecoGrammar
#SGDSInActive = 0
#SGDSActive = 1
If Valeur = 0
SpeechRecoGrammar\invoke("CmdSetRuleIdState(0, " + Str(#SGDSActive) + ")")
Debug COMate_GetLastErrorDescription()
ElseIf Valeur = 1
SpeechRecoGrammar\invoke("CmdSetRuleIdState(0, " + Str(#SGDSInActive) + ")")
Debug COMate_GetLastErrorDescription()
EndIf
EndProcedure
;}
; *****************************************************************************************************