Code: Select all
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
Code: Select all
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)
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
Protected Audio$
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)