mirror of
https://github.com/Gigaslav/HL2Overcharged.git
synced 2026-01-04 02:10:18 +03:00
1163 lines
40 KiB
Plaintext
1163 lines
40 KiB
Plaintext
VERSION 5.00
|
|
Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "comdlg32.ocx"
|
|
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "mscomctl.ocx"
|
|
Begin VB.Form Form1
|
|
BorderStyle = 1 'Fixed Single
|
|
Caption = "Basic Speech Recognition"
|
|
ClientHeight = 9195
|
|
ClientLeft = 150
|
|
ClientTop = 720
|
|
ClientWidth = 9435
|
|
ForeColor = &H000000FF&
|
|
LinkTopic = "Form1"
|
|
MaxButton = 0 'False
|
|
MinButton = 0 'False
|
|
ScaleHeight = 613
|
|
ScaleMode = 3 'Pixel
|
|
ScaleWidth = 629
|
|
StartUpPosition = 3 'Windows Default
|
|
Begin VB.CommandButton PlayAudio
|
|
Caption = "Play Audio"
|
|
Height = 375
|
|
Left = 4320
|
|
TabIndex = 39
|
|
Top = 8760
|
|
Width = 1815
|
|
End
|
|
Begin VB.CheckBox RetainAudio
|
|
Caption = "Retain Audio"
|
|
Height = 255
|
|
Left = 6240
|
|
TabIndex = 38
|
|
Top = 8880
|
|
Width = 1215
|
|
End
|
|
Begin VB.Frame Frame4
|
|
Caption = "Engine Creation"
|
|
Height = 975
|
|
Left = 6240
|
|
TabIndex = 36
|
|
Top = 1920
|
|
Width = 3135
|
|
Begin VB.OptionButton SharedRC
|
|
Caption = "Shared"
|
|
Height = 255
|
|
Left = 120
|
|
TabIndex = 3
|
|
Top = 240
|
|
Value = -1 'True
|
|
Width = 1455
|
|
End
|
|
Begin VB.OptionButton Inproc
|
|
Caption = "Inproc"
|
|
Height = 255
|
|
Left = 120
|
|
TabIndex = 37
|
|
Top = 600
|
|
Width = 1455
|
|
End
|
|
End
|
|
Begin VB.CheckBox ActivateMic
|
|
Caption = "Activate Mic"
|
|
Height = 255
|
|
Left = 6240
|
|
TabIndex = 35
|
|
Top = 480
|
|
Value = 1 'Checked
|
|
Width = 1335
|
|
End
|
|
Begin VB.CommandButton ClearTree
|
|
Caption = "Clear Tree View"
|
|
Height = 375
|
|
Left = 2220
|
|
TabIndex = 27
|
|
Top = 8760
|
|
Width = 1815
|
|
End
|
|
Begin VB.ComboBox SREngines
|
|
Enabled = 0 'False
|
|
Height = 315
|
|
Left = 6240
|
|
TabIndex = 4
|
|
Text = "SREngines"
|
|
Top = 3120
|
|
Width = 3135
|
|
End
|
|
Begin MSComctlLib.TreeView TreeView1
|
|
Height = 6375
|
|
Left = 120
|
|
TabIndex = 34
|
|
Top = 0
|
|
Width = 6015
|
|
_ExtentX = 10610
|
|
_ExtentY = 11245
|
|
_Version = 393217
|
|
LineStyle = 1
|
|
Style = 7
|
|
Appearance = 1
|
|
End
|
|
Begin VB.CommandButton ExitBtn
|
|
Caption = "Exit"
|
|
Height = 375
|
|
Left = 7560
|
|
TabIndex = 28
|
|
Top = 8760
|
|
Width = 1815
|
|
End
|
|
Begin VB.CommandButton ClearEvents
|
|
Caption = "Clear Event List"
|
|
Height = 375
|
|
Left = 120
|
|
TabIndex = 26
|
|
Top = 8760
|
|
Width = 1815
|
|
End
|
|
Begin VB.Frame Frame3
|
|
Caption = "Event Interests"
|
|
Height = 2895
|
|
Left = 6240
|
|
TabIndex = 33
|
|
Top = 5760
|
|
Width = 3135
|
|
Begin VB.CheckBox StreamStart
|
|
Caption = "Stream Start"
|
|
Height = 255
|
|
Left = 1560
|
|
TabIndex = 24
|
|
Top = 2520
|
|
Width = 1215
|
|
End
|
|
Begin VB.CheckBox StreamEnd
|
|
Caption = "Stream End"
|
|
Height = 255
|
|
Left = 1560
|
|
TabIndex = 23
|
|
Top = 2280
|
|
Width = 1215
|
|
End
|
|
Begin VB.CheckBox StateChange
|
|
Caption = "State Change"
|
|
Height = 255
|
|
Left = 1560
|
|
TabIndex = 22
|
|
Top = 2040
|
|
Width = 1455
|
|
End
|
|
Begin VB.CheckBox SoundStart
|
|
Caption = "Sound Start"
|
|
Height = 255
|
|
Left = 1560
|
|
TabIndex = 21
|
|
Top = 1800
|
|
Width = 1215
|
|
End
|
|
Begin VB.CheckBox SoundEnd
|
|
Caption = "Sound End"
|
|
Height = 255
|
|
Left = 1560
|
|
TabIndex = 20
|
|
Top = 1560
|
|
Width = 1215
|
|
End
|
|
Begin VB.CheckBox RequestUI
|
|
Caption = "Request UI"
|
|
Height = 255
|
|
Left = 1560
|
|
TabIndex = 19
|
|
Top = 1320
|
|
Width = 1215
|
|
End
|
|
Begin VB.CheckBox Reco
|
|
Caption = "Recognition"
|
|
Height = 255
|
|
Left = 1560
|
|
TabIndex = 17
|
|
Top = 720
|
|
Width = 1215
|
|
End
|
|
Begin VB.CheckBox PropertyStringChange
|
|
Caption = "Property String Change"
|
|
Height = 375
|
|
Left = 1560
|
|
TabIndex = 16
|
|
Top = 360
|
|
Width = 1335
|
|
End
|
|
Begin VB.CheckBox PhraseStart
|
|
Caption = "Phrase Start"
|
|
Height = 255
|
|
Left = 120
|
|
TabIndex = 13
|
|
Top = 1920
|
|
Width = 1215
|
|
End
|
|
Begin VB.CheckBox Interference
|
|
Caption = "Interference"
|
|
Height = 255
|
|
Left = 120
|
|
TabIndex = 12
|
|
Top = 1680
|
|
Width = 1215
|
|
End
|
|
Begin VB.CheckBox FalseReco
|
|
Caption = "False Recognition"
|
|
Height = 375
|
|
Left = 120
|
|
TabIndex = 10
|
|
Top = 1080
|
|
Width = 1335
|
|
End
|
|
Begin VB.CheckBox Bookmark
|
|
Caption = "Bookmark"
|
|
Height = 255
|
|
Left = 120
|
|
TabIndex = 9
|
|
Top = 840
|
|
Width = 1215
|
|
End
|
|
Begin VB.CheckBox Adaption
|
|
Caption = "Adaptation"
|
|
Height = 255
|
|
Left = 120
|
|
TabIndex = 7
|
|
Top = 360
|
|
Width = 1215
|
|
End
|
|
Begin VB.CheckBox RecoOther
|
|
Caption = "Reco Other Context"
|
|
Height = 375
|
|
Left = 1560
|
|
TabIndex = 18
|
|
Top = 960
|
|
Width = 1215
|
|
End
|
|
Begin VB.CheckBox PropertyNumChange
|
|
Caption = "Property Num Change"
|
|
Height = 375
|
|
Left = 120
|
|
TabIndex = 15
|
|
Top = 2400
|
|
Width = 1335
|
|
End
|
|
Begin VB.CheckBox Hypothesis
|
|
Caption = "Hypothesis"
|
|
Height = 255
|
|
Left = 120
|
|
TabIndex = 11
|
|
Top = 1440
|
|
Width = 1335
|
|
End
|
|
Begin VB.CheckBox PrivateEng
|
|
Caption = "Private"
|
|
Height = 255
|
|
Left = 120
|
|
TabIndex = 14
|
|
Top = 2160
|
|
Width = 1215
|
|
End
|
|
Begin VB.CheckBox AudioLevel
|
|
Caption = "Audio Level"
|
|
Height = 255
|
|
Left = 120
|
|
TabIndex = 8
|
|
Top = 600
|
|
Width = 1695
|
|
End
|
|
End
|
|
Begin MSComDlg.CommonDialog ComDlg
|
|
Left = 8880
|
|
Top = 5280
|
|
_ExtentX = 847
|
|
_ExtentY = 847
|
|
_Version = 393216
|
|
End
|
|
Begin VB.CheckBox ShowStreamInfo
|
|
Caption = "Show Stream Info"
|
|
Height = 255
|
|
Left = 7800
|
|
TabIndex = 25
|
|
Top = 480
|
|
Value = 1 'Checked
|
|
Width = 1815
|
|
End
|
|
Begin VB.Frame Frame2
|
|
Caption = "Recognition Type"
|
|
Height = 975
|
|
Left = 6240
|
|
TabIndex = 30
|
|
Top = 840
|
|
Width = 3135
|
|
Begin VB.OptionButton Dict
|
|
Caption = "Dictation"
|
|
Height = 255
|
|
Left = 120
|
|
TabIndex = 29
|
|
Top = 600
|
|
Width = 1455
|
|
End
|
|
Begin VB.OptionButton CandC
|
|
Caption = "C&&C"
|
|
Height = 255
|
|
Left = 120
|
|
TabIndex = 2
|
|
Top = 240
|
|
Value = -1 'True
|
|
Width = 1455
|
|
End
|
|
End
|
|
Begin VB.CommandButton Recognition
|
|
Caption = "Start Recognition"
|
|
Height = 375
|
|
Left = 6240
|
|
TabIndex = 1
|
|
Top = 0
|
|
Width = 3135
|
|
End
|
|
Begin VB.Frame Frame1
|
|
Caption = "Emulate Recognition"
|
|
Height = 1575
|
|
Left = 6240
|
|
TabIndex = 31
|
|
Top = 3600
|
|
Width = 3135
|
|
Begin VB.TextBox EmulateRecoTxt
|
|
Height = 855
|
|
Left = 120
|
|
MultiLine = -1 'True
|
|
TabIndex = 5
|
|
Top = 240
|
|
Width = 2895
|
|
End
|
|
Begin VB.CommandButton Emulate
|
|
Caption = "Emulate"
|
|
Height = 255
|
|
Left = 120
|
|
TabIndex = 6
|
|
Top = 1200
|
|
Width = 2895
|
|
End
|
|
End
|
|
Begin VB.TextBox EventTextField
|
|
Height = 2175
|
|
Left = 120
|
|
Locked = -1 'True
|
|
MultiLine = -1 'True
|
|
ScrollBars = 3 'Both
|
|
TabIndex = 0
|
|
Top = 6480
|
|
Width = 6015
|
|
End
|
|
Begin VB.Label CCLabel
|
|
Caption = "Current C&C Grammar:"
|
|
Height = 375
|
|
Left = 6240
|
|
TabIndex = 32
|
|
Top = 5400
|
|
Width = 3135
|
|
End
|
|
Begin VB.Menu File
|
|
Caption = "&File"
|
|
Begin VB.Menu Exit
|
|
Caption = "E&xit"
|
|
End
|
|
End
|
|
Begin VB.Menu MenuRecognition
|
|
Caption = "&Recognition"
|
|
Begin VB.Menu LoadGrammar
|
|
Caption = "&Load Grammar..."
|
|
End
|
|
End
|
|
Begin VB.Menu Help
|
|
Caption = "&Help"
|
|
Begin VB.Menu About
|
|
Caption = "&About"
|
|
End
|
|
End
|
|
End
|
|
Attribute VB_Name = "Form1"
|
|
Attribute VB_GlobalNameSpace = False
|
|
Attribute VB_Creatable = False
|
|
Attribute VB_PredeclaredId = True
|
|
Attribute VB_Exposed = False
|
|
'=============================================================================
|
|
'
|
|
' This RecoVB App sample demonstrates most of the SR functionalities
|
|
' supported in SAPI 5.1. The main object used here for the RecoContext is RC.
|
|
'
|
|
' Copyright @ 2001 Microsoft Corporation All Rights Reserved.
|
|
'
|
|
'=============================================================================
|
|
|
|
Option Explicit
|
|
|
|
Public WithEvents RC As SpSharedRecoContext 'The main shared Recognizer Context
|
|
Attribute RC.VB_VarHelpID = -1
|
|
Public Grammar As ISpeechRecoGrammar 'Command and Control interface
|
|
Dim indent As Integer 'Sets indent level for small output window
|
|
Dim fRecoEnabled As Boolean 'Is recognition enabled
|
|
Dim fGrammarLoaded As Boolean 'Is a grammar loaded
|
|
Dim RecoResult As ISpeechRecoResult 'Recognition result interface
|
|
|
|
Private Sub Form_Load()
|
|
' Set up error handler
|
|
On Error GoTo Err_SAPILoad
|
|
|
|
' Initialize globals
|
|
indent = 0
|
|
fRecoEnabled = False
|
|
fGrammarLoaded = False
|
|
|
|
' Create the Shared Reco Context by default
|
|
Set RC = New SpSharedRecoContext
|
|
|
|
' Load the SR Engines combo box
|
|
Dim Token As ISpeechObjectToken
|
|
For Each Token In RC.Recognizer.GetRecognizers
|
|
SREngines.AddItem Token.GetDescription()
|
|
Next
|
|
SREngines.ListIndex = 0
|
|
|
|
' Disable combo box for Shared Engine. Also disable other UI that's not initially needed.
|
|
SREngines.Enabled = False
|
|
ActivateMic.Enabled = False
|
|
PlayAudio.Enabled = False
|
|
|
|
' Call the InitEventInterestCheckBoxes subroutine which uses the SR engine
|
|
' default event interests to initialize the event interest checkboxes.
|
|
InitEventInterestCheckBoxes
|
|
|
|
' Create grammar objects
|
|
LoadGrammarObj
|
|
|
|
' Attempt to load the default .xml file and set the RuleId State to Inactive until
|
|
' the user starts recognition.
|
|
LoadDefaultCnCGrammar
|
|
|
|
Exit Sub
|
|
|
|
Err_SAPILoad:
|
|
MsgBox "Error loading SAPI objects! Please make sure SAPI5.1 is correctly installed.", vbCritical
|
|
Exit_Click
|
|
Exit Sub
|
|
End Sub
|
|
|
|
' This subroutine creates the Grammar object and sets the states to inactive
|
|
' until the user is ready to begin recognition.
|
|
Private Sub LoadGrammarObj()
|
|
Set Grammar = RC.CreateGrammar(1)
|
|
|
|
' Load Dictation but set it to Inactive until user selects "Dictation" radio
|
|
' button.
|
|
Grammar.DictationLoad "", SLOStatic
|
|
Grammar.DictationSetState SGDSInactive
|
|
End Sub
|
|
|
|
' This subroutine attempts to load the default English .xml file. It will prompt the
|
|
' user to load a valid .xml file if it cannot find sol.xml in either of the 2
|
|
' specified paths.
|
|
Private Sub LoadDefaultCnCGrammar()
|
|
' First load attempt
|
|
On Error Resume Next
|
|
Grammar.CmdLoadFromFile "..\\samples\\common\\sol.xml", SLODynamic
|
|
|
|
' Second load attempt
|
|
If Err Then
|
|
On Error GoTo Err_CFGLoad
|
|
Grammar.CmdLoadFromFile "..\\..\\common\\sol.xml", SLODynamic
|
|
End If
|
|
|
|
' Set rule state to inactive until user clicks Recognition button
|
|
Grammar.CmdSetRuleIdState 0, SGDSInactive
|
|
|
|
' Set the Label to indictate which .xml file is loaded.
|
|
CCLabel.Caption = "Current C+C Grammar: sol.xml"
|
|
|
|
fGrammarLoaded = True
|
|
|
|
Exit Sub
|
|
|
|
Err_CFGLoad:
|
|
fGrammarLoaded = False
|
|
CCLabel.Caption = "Current C+C Grammar: NULL"
|
|
Exit Sub
|
|
End Sub
|
|
|
|
' This subroutine calls the Common File Dialog control which is inserted into
|
|
' the form to select a .xml grammar file.
|
|
Private Sub LoadGrammar_Click()
|
|
ComDlg.CancelError = True
|
|
On Error GoTo Cancel
|
|
ComDlg.Flags = cdlOFNOverwritePrompt + cdlOFNPathMustExist + cdlOFNNoReadOnlyReturn
|
|
ComDlg.DialogTitle = "Open XML File"
|
|
ComDlg.Filter = "All Files (*.*)|*.*|XML Files " & "(*.xml)|*.xml"
|
|
ComDlg.FilterIndex = 2
|
|
ComDlg.ShowOpen
|
|
|
|
' Inactivate the grammar and associate a new .xml file with the grammar.
|
|
On Error GoTo Err_XMLLoad
|
|
Grammar.CmdLoadFromFile ComDlg.FileName, SLODynamic
|
|
Grammar.CmdSetRuleIdState 0, SGDSInactive
|
|
|
|
' Then reactivate the grammar if it was currently enabled
|
|
If fRecoEnabled Then
|
|
Grammar.CmdSetRuleIdState 0, SGDSActive
|
|
End If
|
|
|
|
' Set the Label to indictate which .xml file is loaded
|
|
CCLabel.Caption = "Current C+C Grammar: " + ComDlg.FileTitle
|
|
|
|
fGrammarLoaded = True
|
|
Exit Sub
|
|
|
|
Err_XMLLoad:
|
|
fGrammarLoaded = False
|
|
MsgBox "Invalid .xml file. Please load a valid .xml grammar file.", vbOKOnly
|
|
Exit Sub
|
|
|
|
Cancel:
|
|
Exit Sub
|
|
End Sub
|
|
|
|
' Activates or Deactivates either Command and Control or Dictation based on the
|
|
' current state of the Recognition button.
|
|
Private Sub Recognition_Click()
|
|
ActivateMic.Value = Checked
|
|
|
|
On Error GoTo ErrorHandle
|
|
|
|
' First make sure a valid .xml file is loaded if the user is selecting C&C
|
|
If fGrammarLoaded Or Dict.Value = True Then
|
|
|
|
' If recognition is currently not enabled, enable it.
|
|
If Not fRecoEnabled Then
|
|
' Determine if user wants to activate Dictation or Command and Control
|
|
If Dict.Value Then
|
|
Grammar.DictationSetState SGDSActive
|
|
Else
|
|
Grammar.CmdSetRuleIdState 0, SGDSActive
|
|
End If
|
|
fRecoEnabled = True
|
|
' Update caption on button.
|
|
Recognition.Caption = "Stop Recognition"
|
|
' Allow user to activate/deactivate mute
|
|
ActivateMic.Enabled = True
|
|
' Disable radio buttons and engines combo while recognizing so user doesn't
|
|
' switch modes during recognition.
|
|
CandC.Enabled = False
|
|
Dict.Enabled = False
|
|
SREngines.Enabled = False
|
|
SharedRC.Enabled = False
|
|
Inproc.Enabled = False
|
|
' If recognition is currently enabled, disable it.
|
|
Else
|
|
' Deactivate either Dictation or Command and Control.
|
|
If Dict.Value Then
|
|
Grammar.DictationSetState SGDSInactive
|
|
Else
|
|
Grammar.CmdSetRuleIdState 0, SGDSInactive
|
|
End If
|
|
fRecoEnabled = False
|
|
' Update caption on button.
|
|
Recognition.Caption = "Start Recognition"
|
|
' Disallow user to activate/deactivate mute
|
|
ActivateMic.Enabled = False
|
|
' Reenable radio buttons while not recognizing so user can switch modes
|
|
CandC.Enabled = True
|
|
Dict.Enabled = True
|
|
|
|
' Allow engine selection if the inproc button is selected.
|
|
If Inproc.Value Then
|
|
SREngines.Enabled = True
|
|
End If
|
|
|
|
SharedRC.Enabled = True
|
|
Inproc.Enabled = True
|
|
End If
|
|
End If
|
|
Exit Sub
|
|
|
|
ErrorHandle:
|
|
MsgBox "Failed to activate the grammar. It is possible that your audio device is used by other application.", vbOKOnly
|
|
End Sub
|
|
|
|
' This subroutine calls the EmulateRecognition method on the recognizer.
|
|
Private Sub Emulate_Click()
|
|
If fGrammarLoaded Then
|
|
' First make sure not to try retaining audio when emulating.
|
|
RetainAudio.Value = Unchecked
|
|
|
|
' Temporarily enable recognition state if it's not currently enabled.
|
|
If Not fRecoEnabled Then
|
|
If Dict.Value Then
|
|
Grammar.DictationSetState SGDSActive
|
|
Else
|
|
Grammar.CmdSetRuleIdState 0, SGDSActive
|
|
End If
|
|
End If
|
|
|
|
' Call the EmmulateRecognition method with the text from the textbox.
|
|
If Not EmulateRecoTxt.Text = "" Then
|
|
RC.Recognizer.EmulateRecognition EmulateRecoTxt.Text, 0
|
|
End If
|
|
|
|
' Reset the recognition states to original values
|
|
If Not fRecoEnabled Then
|
|
If Dict.Value Then
|
|
Grammar.DictationSetState SGDSInactive
|
|
Else
|
|
Grammar.CmdSetRuleIdState 0, SGDSInactive
|
|
End If
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
' This subroutine is called by the event handler subroutines to update
|
|
' the small edit window with the events that were received.
|
|
Private Sub UpdateEventList(StreamNum As Long, StreamPos As Variant, szEvent As String, szEventInfo As String)
|
|
Dim szIndent As String
|
|
Dim szStreamInfo As String
|
|
Dim i As Integer
|
|
|
|
For i = 0 To indent - 1
|
|
szIndent = szIndent & " "
|
|
Next
|
|
If ShowStreamInfo.Value = Checked Then
|
|
szStreamInfo = " (StreamNum=" & StreamNum & " StreamPos=" & StreamPos & ")"
|
|
End If
|
|
EventTextField.Text = EventTextField.Text & szIndent & szEvent & szStreamInfo & szEventInfo & vbCrLf
|
|
EventTextField.SelStart = Len(EventTextField)
|
|
EventTextField.SelLength = 0
|
|
End Sub
|
|
|
|
' The following subroutines are event handlers that get called when the SR engine
|
|
' fires events.
|
|
|
|
' Adaption event handler
|
|
Private Sub RC_Adaption(ByVal StreamNumber As Long, ByVal StreamPosition As Variant)
|
|
UpdateEventList StreamNumber, StreamPosition, "Adaptation", ""
|
|
End Sub
|
|
' Audio Level event handler
|
|
Private Sub RC_AudioLevel(ByVal StreamNumber As Long, ByVal StreamPosition As Variant, ByVal AudioLevel As Long)
|
|
UpdateEventList StreamNumber, StreamPosition, "AudioLevel", " [Level=" & AudioLevel & "]"
|
|
End Sub
|
|
' Bookmark event handler
|
|
Private Sub RC_Bookmark(ByVal StreamNumber As Long, ByVal StreamPosition As Variant, ByVal EventData As Variant, ByVal Options As SpeechLib.SpeechBookmarkOptions)
|
|
UpdateEventList StreamNumber, StreamPosition, "Bookmark", " [Data=" & EventData & " Option=" & Options & "]"
|
|
End Sub
|
|
' End Stream event handler
|
|
Private Sub RC_EndStream(ByVal StreamNumber As Long, ByVal StreamPosition As Variant, ByVal StreamReleased As Boolean)
|
|
indent = 0
|
|
UpdateEventList StreamNumber, StreamPosition, "EndStream", " [Stream Released=" & StreamReleased & "]"
|
|
End Sub
|
|
' Engine Private event handler
|
|
Private Sub RC_EnginePrivate(ByVal StreamNumber As Long, ByVal StreamPosition As Variant, ByVal lParam As Variant)
|
|
UpdateEventList StreamNumber, StreamPosition, "EnginePrivate", ""
|
|
End Sub
|
|
' False Recognition event handler
|
|
Private Sub RC_FalseRecognition(ByVal StreamNumber As Long, ByVal StreamPosition As Variant, ByVal Result As SpeechLib.ISpeechRecoResult)
|
|
UpdateEventList StreamNumber, StreamPosition, "FalseRecognition", " [Text=" & Result.PhraseInfo.GetText() & "]"
|
|
Set RecoResult = Result
|
|
End Sub
|
|
' Hypothesis event handler
|
|
Private Sub RC_Hypothesis(ByVal StreamNumber As Long, ByVal StreamPosition As Variant, ByVal Result As SpeechLib.ISpeechRecoResult)
|
|
UpdateEventList StreamNumber, StreamPosition, "Hypothesis", " [Text=" & Result.PhraseInfo.GetText() & "]"
|
|
End Sub
|
|
' Interference event handler
|
|
Private Sub RC_Interference(ByVal StreamNumber As Long, ByVal StreamPosition As Variant, ByVal Interference As SpeechLib.SpeechInterference)
|
|
UpdateEventList StreamNumber, StreamPosition, "Interference", " [Value=" & Interference & "]"
|
|
End Sub
|
|
' Phrase Start event handler
|
|
Private Sub RC_PhraseStart(ByVal StreamNumber As Long, ByVal StreamPosition As Variant)
|
|
UpdateEventList StreamNumber, StreamPosition, "PhraseStart", ""
|
|
End Sub
|
|
' Property Number Change event handler
|
|
Private Sub RC_PropertyNumberChange(ByVal StreamNumber As Long, ByVal StreamPosition As Variant, ByVal PropertyName As String, ByVal NewNumberValue As Long)
|
|
UpdateEventList StreamNumber, StreamPosition, "PropertyNumberChange", " [Name=" & PropertyName & " Value=" & NewNumberValue & "]"
|
|
End Sub
|
|
' Property String Change event handler
|
|
Private Sub RC_PropertyStringChange(ByVal StreamNumber As Long, ByVal StreamPosition As Variant, ByVal PropertyName As String, ByVal NewStringValue As String)
|
|
UpdateEventList StreamNumber, StreamPosition, "PropertyStringChange", " [Name=" & PropertyName & " Value=" & NewStringValue & "]"
|
|
End Sub
|
|
' Recognition event handler
|
|
Private Sub RC_Recognition(ByVal StreamNumber As Long, ByVal StreamPosition As Variant, ByVal RecognitionType As SpeechLib.SpeechRecognitionType, ByVal Result As SpeechLib.ISpeechRecoResult)
|
|
Dim RecoNode As Node
|
|
Static i As Integer
|
|
|
|
' Update Event List window first
|
|
UpdateEventList StreamNumber, StreamPosition, "Recognition", " [Text=" & Result.PhraseInfo.GetText() & ", RecoType=" & RecognitionType & "]"
|
|
|
|
' Increment unique value for RecoNode's key name.
|
|
i = i + 1
|
|
|
|
' Add top level node
|
|
Set RecoNode = TreeView1.Nodes.Add(, , "Reco" & i, "Recognition (" & Result.PhraseInfo.GetText() & ")")
|
|
|
|
' Call the BuildResultTree subroutine to build up the Result tree
|
|
BuildResultTree Result.PhraseInfo, Result.Alternates(5), RecoNode
|
|
|
|
' Save the recognition Result to the global RecoResult
|
|
Set RecoResult = Result
|
|
End Sub
|
|
' Recognition For Other Context event handler
|
|
Private Sub RC_RecognitionForOtherContext(ByVal StreamNumber As Long, ByVal StreamPosition As Variant)
|
|
UpdateEventList StreamNumber, StreamPosition, "RecognitionForOtherContext", ""
|
|
End Sub
|
|
' Recognizer State Change event handler
|
|
Private Sub RC_RecognizerStateChange(ByVal StreamNumber As Long, ByVal StreamPosition As Variant, ByVal NewState As SpeechLib.SpeechRecognizerState)
|
|
UpdateEventList StreamNumber, StreamPosition, "RecognitionStateChange", " [NewState=" & NewState & "]"
|
|
End Sub
|
|
' Request UI event handler
|
|
Private Sub RC_RequestUI(ByVal StreamNumber As Long, ByVal StreamPosition As Variant, ByVal UIType As String)
|
|
UpdateEventList StreamNumber, StreamPosition, "RequestUI", " [Type=" & UIType & "]"
|
|
End Sub
|
|
' Sound End event handler
|
|
Private Sub RC_SoundEnd(ByVal StreamNumber As Long, ByVal StreamPosition As Variant)
|
|
indent = 1
|
|
UpdateEventList StreamNumber, StreamPosition, "SoundEnd", ""
|
|
End Sub
|
|
' Sound Start event handler
|
|
Private Sub RC_SoundStart(ByVal StreamNumber As Long, ByVal StreamPosition As Variant)
|
|
indent = 1
|
|
UpdateEventList StreamNumber, StreamPosition, "SoundStart", ""
|
|
indent = 2
|
|
End Sub
|
|
' Stream Start event handler
|
|
Private Sub RC_StartStream(ByVal StreamNumber As Long, ByVal StreamPosition As Variant)
|
|
indent = 0
|
|
UpdateEventList StreamNumber, StreamPosition, "StartStream", ""
|
|
indent = 1
|
|
End Sub
|
|
|
|
' The following subroutine enables the event interest check boxes based on the
|
|
' SR engine's default event interests.
|
|
Private Sub InitEventInterestCheckBoxes()
|
|
If RC.EventInterests And SREAdaptation Then
|
|
Adaption.Value = Checked
|
|
End If
|
|
|
|
If RC.EventInterests And SREAudioLevel Then
|
|
AudioLevel.Value = Checked
|
|
End If
|
|
|
|
If RC.EventInterests And SREBookmark Then
|
|
Bookmark.Value = Checked
|
|
End If
|
|
|
|
If RC.EventInterests And SREFalseRecognition Then
|
|
FalseReco.Value = Checked
|
|
End If
|
|
|
|
If RC.EventInterests And SREHypothesis Then
|
|
Hypothesis.Value = Checked
|
|
End If
|
|
|
|
If RC.EventInterests And SREInterference Then
|
|
Interference.Value = Checked
|
|
End If
|
|
|
|
If RC.EventInterests And SREPhraseStart Then
|
|
PhraseStart.Value = Checked
|
|
End If
|
|
|
|
If RC.EventInterests And SREPrivate Then
|
|
PrivateEng.Value = Checked
|
|
End If
|
|
|
|
If RC.EventInterests And SREPropertyNumChange Then
|
|
PropertyNumChange.Value = Checked
|
|
End If
|
|
|
|
If RC.EventInterests And SREPropertyStringChange Then
|
|
PropertyStringChange.Value = Checked
|
|
End If
|
|
|
|
If RC.EventInterests And SRERecognition Then
|
|
Reco.Value = Checked
|
|
End If
|
|
|
|
If RC.EventInterests And SRERecoOtherContext Then
|
|
RecoOther.Value = Checked
|
|
End If
|
|
|
|
If RC.EventInterests And SRERequestUI Then
|
|
RequestUI.Value = Checked
|
|
End If
|
|
|
|
If RC.EventInterests And SRESoundEnd Then
|
|
SoundEnd.Value = Checked
|
|
End If
|
|
|
|
If RC.EventInterests And SRESoundStart Then
|
|
SoundStart.Value = Checked
|
|
End If
|
|
|
|
If RC.EventInterests And SREStateChange Then
|
|
StateChange.Value = Checked
|
|
End If
|
|
|
|
If RC.EventInterests And SREStreamEnd Then
|
|
StreamEnd.Value = Checked
|
|
End If
|
|
|
|
If RC.EventInterests And SREStreamStart Then
|
|
StreamStart.Value = Checked
|
|
End If
|
|
End Sub
|
|
|
|
' The following subroutines handle turning on/off the event interests when
|
|
' The user checks/unchecks them.
|
|
|
|
Private Sub SetEventInterest(EventInterest As SpeechRecoEvents, EventCheckBox As CheckBox)
|
|
If EventCheckBox.Value = Checked Then
|
|
RC.EventInterests = RC.EventInterests Or EventInterest
|
|
Else
|
|
RC.EventInterests = RC.EventInterests And Not EventInterest
|
|
End If
|
|
End Sub
|
|
|
|
' Adaption event interest
|
|
Private Sub Adaption_Click()
|
|
SetEventInterest SREAdaptation, Adaption
|
|
End Sub
|
|
' Audio Level event interest
|
|
Private Sub AudioLevel_Click()
|
|
SetEventInterest SREAudioLevel, AudioLevel
|
|
End Sub
|
|
' Bookmark event interest
|
|
Private Sub Bookmark_Click()
|
|
SetEventInterest SREBookmark, Bookmark
|
|
End Sub
|
|
' False Recognition event interest
|
|
Private Sub FalseReco_Click()
|
|
SetEventInterest SREFalseRecognition, FalseReco
|
|
End Sub
|
|
' Hypothesis event interest
|
|
Private Sub Hypothesis_Click()
|
|
SetEventInterest SREHypothesis, Hypothesis
|
|
End Sub
|
|
' Interference event interest
|
|
Private Sub Interference_Click()
|
|
SetEventInterest SREInterference, Interference
|
|
End Sub
|
|
' Phrase Start event interest
|
|
Private Sub PhraseStart_Click()
|
|
SetEventInterest SREPhraseStart, PhraseStart
|
|
End Sub
|
|
' Engine Private event interest
|
|
Private Sub PrivateEng_Click()
|
|
SetEventInterest SREPrivate, PrivateEng
|
|
End Sub
|
|
' Property Number Change event interest
|
|
Private Sub PropertyNumChange_Click()
|
|
SetEventInterest SREPropertyNumChange, PropertyNumChange
|
|
End Sub
|
|
' Property String Change event interest
|
|
Private Sub PropertyStringChange_Click()
|
|
SetEventInterest SREPropertyStringChange, PropertyStringChange
|
|
End Sub
|
|
' Recognition event interest
|
|
Private Sub Reco_Click()
|
|
SetEventInterest SRERecognition, Reco
|
|
End Sub
|
|
' Recognition on Other Context event interest
|
|
Private Sub RecoOther_Click()
|
|
SetEventInterest SRERecoOtherContext, RecoOther
|
|
End Sub
|
|
' Request UI event interest
|
|
Private Sub RequestUI_Click()
|
|
SetEventInterest SRERequestUI, RequestUI
|
|
End Sub
|
|
' Sound End event interest
|
|
Private Sub SoundEnd_Click()
|
|
SetEventInterest SRESoundEnd, SoundEnd
|
|
End Sub
|
|
' Sound Start event interest
|
|
Private Sub SoundStart_Click()
|
|
SetEventInterest SRESoundStart, SoundStart
|
|
End Sub
|
|
' State Change event interest
|
|
Private Sub StateChange_Click()
|
|
SetEventInterest SREStateChange, StateChange
|
|
End Sub
|
|
' Stream Start event interest
|
|
Private Sub StreamStart_Click()
|
|
SetEventInterest SREStreamStart, StreamStart
|
|
End Sub
|
|
' Stream End event interest
|
|
Private Sub StreamEnd_Click()
|
|
SetEventInterest SREStreamEnd, StreamEnd
|
|
End Sub
|
|
|
|
' The following subroutines use the Recognition Result object to build up the
|
|
' TreeView display in the main window.
|
|
|
|
' This subroutine builds up the result tree in the main treeview window. It uses
|
|
' the main ISpeechRecoResult object to build up this information. Additionally it
|
|
' also shows the alternates from the recognition.
|
|
Private Sub BuildResultTree(ByVal ResultPhraseInfo As ISpeechPhraseInfo, ByVal Alternates As ISpeechPhraseAlternates, ParentNode As Node, Optional DontDoAlternates As Boolean = False)
|
|
Dim id As Integer
|
|
id = TreeView1.Nodes.Count
|
|
Dim PhraseInfoNode As Node
|
|
Dim PropertiesNode As Node
|
|
|
|
' Add the top level nodes for the result tree
|
|
Set PhraseInfoNode = TreeView1.Nodes.Add(ParentNode.Key, tvwChild, "PhraseInfo" & id, "Phrase Info")
|
|
Set PropertiesNode = TreeView1.Nodes.Add(PhraseInfoNode.Key, tvwChild, "Properties" & id, "Properties")
|
|
|
|
' Call subroutines to build up lower level nodes for the Result rules, Result properties,
|
|
' and Result elements.
|
|
BuildPhraseRuleTree ResultPhraseInfo.Rule, PhraseInfoNode
|
|
BuildPhrasePropertyTree ResultPhraseInfo.Properties, PropertiesNode
|
|
BuildPhraseElementsTree ResultPhraseInfo.Elements, PhraseInfoNode, ResultPhraseInfo.LanguageId
|
|
|
|
' Call subroutine to build up lower level nodes for the alternates.
|
|
If Not DontDoAlternates And Not Alternates Is Nothing Then
|
|
Dim AltNode As Node
|
|
Set AltNode = TreeView1.Nodes.Add(ParentNode.Key, tvwChild, "Alternates" & id, "Alternates")
|
|
BuildAlternatesTree Alternates, AltNode
|
|
End If
|
|
End Sub
|
|
' This subroutine is called by the BuildResultTree subroutine to build up the Result
|
|
' rules.
|
|
Private Sub BuildPhraseRuleTree(ByVal PhraseRule As ISpeechPhraseRule, ParentNode As Node, Optional i As Integer = 0)
|
|
Dim Rule As ISpeechPhraseRule
|
|
Dim RuleNode As Node
|
|
|
|
Set RuleNode = TreeView1.Nodes.Add(ParentNode.Key, tvwChild, "RuleNode" & ParentNode.Key & i, "Rule (" & PhraseRule.Name & ")")
|
|
|
|
' Call the subroutine recusively if you have child rules
|
|
If Not PhraseRule.Children Is Nothing Then
|
|
For Each Rule In PhraseRule.Children
|
|
i = i + 1
|
|
BuildPhraseRuleTree Rule, RuleNode, i
|
|
Next
|
|
End If
|
|
End Sub
|
|
' This subroutine is called by the BuildResultTree subroutine to build up the Result
|
|
' properties.
|
|
Private Sub BuildPhrasePropertyTree(ByVal Properties As ISpeechPhraseProperties, ParentNode As Node)
|
|
Dim Property As ISpeechPhraseProperty
|
|
Dim i As Integer
|
|
i = 0
|
|
|
|
If Not Properties Is Nothing Then
|
|
If Properties.Count > 0 Then
|
|
For Each Property In Properties
|
|
Dim PropertyNode As Node
|
|
Dim DisplayString As String
|
|
i = i + 1
|
|
|
|
If Property.Value = Empty Then
|
|
DisplayString = "Property (" & Property.Name & ")"
|
|
Else
|
|
DisplayString = "Property (" & Property.Name & ") (" & Property.Value & ")"
|
|
End If
|
|
Set PropertyNode = TreeView1.Nodes.Add(ParentNode.Key, tvwChild, ParentNode.Key & i, DisplayString)
|
|
|
|
' Call the subroutine recusively if you have child properties
|
|
If Not Property.Children Is Nothing Then
|
|
BuildPhrasePropertyTree Property.Children, PropertyNode
|
|
End If
|
|
Next
|
|
End If
|
|
Else
|
|
ParentNode.Text = "Properties - No Properties"
|
|
End If
|
|
End Sub
|
|
' This subroutine is called by the BuildResultTree subroutine to build up the Result
|
|
' elements.
|
|
Private Sub BuildPhraseElementsTree(ByVal Elements As ISpeechPhraseElements, ParentNode As Node, LangId As Long)
|
|
Dim Element As ISpeechPhraseElement
|
|
Dim ElementsNode As Node
|
|
Dim i As Integer
|
|
i = 0
|
|
|
|
If Not Elements Is Nothing Then
|
|
If Elements.Count > 0 Then
|
|
Set ElementsNode = TreeView1.Nodes.Add(ParentNode.Key, tvwChild, "Elements" & ParentNode.Key, "Elements")
|
|
For Each Element In Elements
|
|
i = i + 1
|
|
Dim ElementNode As Node
|
|
Set ElementNode = TreeView1.Nodes.Add(ElementsNode.Key, tvwChild, "Element" & ParentNode.Key & i, "Element (" & Element.DisplayText & ")")
|
|
If Not IsEmpty(Element.Pronunciation) Then
|
|
BuildPronunciationTree Element.Pronunciation, ElementNode, LangId
|
|
End If
|
|
Next
|
|
End If
|
|
Else
|
|
Set ElementNode = TreeView1.Nodes.Add(ParentNode.Key, tvwChild, "Elements" & ParentNode.Key, "Elements - No Elements")
|
|
End If
|
|
End Sub
|
|
' This subroutine is called by the BuildPhraseElementsTree subroutine to build up the
|
|
' Result pronunciations for each of the Result elements.
|
|
Private Sub BuildPronunciationTree(ByVal Pronunciation As Variant, ParentNode As Node, LangId As Long)
|
|
Dim PronunciationNode As Node
|
|
Dim PC As New SpPhoneConverter
|
|
Dim i As Integer
|
|
i = 0
|
|
|
|
' Initialize the Phone Converter
|
|
PC.LanguageId = LangId
|
|
|
|
Set PronunciationNode = TreeView1.Nodes.Add(ParentNode.Key, tvwChild, "Pronunciations" & ParentNode.Key, "Pronunciations")
|
|
|
|
For i = 0 To UBound(Pronunciation)
|
|
Dim Phone As String
|
|
Phone = PC.IdToPhone(Pronunciation(i))
|
|
Call TreeView1.Nodes.Add(PronunciationNode.Key, tvwChild, "Pronunciation" & ParentNode.Key & i, "Pronunciation (" & Phone & ")")
|
|
Next
|
|
End Sub
|
|
|
|
' This subroutine is called by the BuildResultTree subroutine to build up the
|
|
' Result alternates if there are any.
|
|
Private Sub BuildAlternatesTree(ByVal Alternates As ISpeechPhraseAlternates, ParentNode As Node)
|
|
Dim alt As ISpeechPhraseAlternate
|
|
Dim i As Integer
|
|
i = 0
|
|
|
|
For Each alt In Alternates
|
|
i = i + 1
|
|
Dim AltNode As Node
|
|
Set AltNode = TreeView1.Nodes.Add(ParentNode.Key, tvwChild, ParentNode.Key & i, "Alternate" & i)
|
|
BuildResultTree alt.PhraseInfo, Nothing, AltNode, True
|
|
Next
|
|
End Sub
|
|
|
|
' The following 2 subroutines destroy/create Inproc and Shared RecoContext's depending
|
|
' on what the user has checked.
|
|
|
|
' This subroutine destroys the Inproc RecoContext and creates and Shared RecoContext
|
|
Private Sub SharedRC_Click()
|
|
' Destroy the Inproc RecoContext
|
|
Set RC = Nothing
|
|
|
|
' Create the Shared RecoContext
|
|
Set RC = New SpSharedRecoContext
|
|
|
|
' Call the InitEventInterestCheckBoxes subroutine which uses the SR engine
|
|
' default event interests to initialize the event interest checkboxes.
|
|
InitEventInterestCheckBoxes
|
|
|
|
' Create grammar objects
|
|
LoadGrammarObj
|
|
|
|
' Attempt to load the default .xml file and set the RuleId State to Inactive until
|
|
' the user starts recognition.
|
|
LoadDefaultCnCGrammar
|
|
|
|
' Disable the engine selection drop down box and reset to the default shared engine.
|
|
SREngines.ListIndex = 0
|
|
SREngines.Enabled = False
|
|
End Sub
|
|
' This subroutine destroys the Shared RecoContext and creates and Inproc RecoContext
|
|
Private Sub Inproc_Click()
|
|
Dim Recognizer As ISpeechRecognizer
|
|
|
|
' Destroy Shared RecoContext
|
|
Set RC = Nothing
|
|
|
|
' Create Inproc Recognizer which we will use to create the Inproc RecoContext.
|
|
Set Recognizer = New SpInprocRecognizer
|
|
|
|
' To create an Inproc RecoContext we must set an Audio Input. To do this we create
|
|
' an SpObjectTokenCategory object with the category of AudioIn. This object enumerates
|
|
' the registry to see what types of audio input devices are available.
|
|
Dim ObjectTokenCat As ISpeechObjectTokenCategory
|
|
Set ObjectTokenCat = New SpObjectTokenCategory
|
|
ObjectTokenCat.SetId SpeechCategoryAudioIn
|
|
|
|
' Set the default AudioInput device which is typically the first item and is usually
|
|
' the microphone.
|
|
Set Recognizer.AudioInput = ObjectTokenCat.EnumerateTokens.Item(0)
|
|
|
|
' Set the Recognizer to the one selected in the drop down box.
|
|
Set Recognizer.Recognizer = Recognizer.GetRecognizers().Item(SREngines.ListIndex)
|
|
|
|
' Now go ahead and actually create the Inproc RecoContext.
|
|
' Note - in VB even though the global "RC" object is declaired as a
|
|
' SpSharedRecoContext, it is still possible to set it to a SpInprocRecoContext.
|
|
Set RC = Recognizer.CreateRecoContext
|
|
|
|
' Call the InitEventInterestCheckBoxes subroutine which uses the SR engine
|
|
' default event interests to initialize the event interest checkboxes.
|
|
InitEventInterestCheckBoxes
|
|
|
|
' Create grammar objects
|
|
LoadGrammarObj
|
|
|
|
' Attempt to load the default .xml file and set the RuleId State to Inactive until
|
|
' the user starts recognition.
|
|
LoadDefaultCnCGrammar
|
|
|
|
' Enable the engine selection drop down box
|
|
SREngines.Enabled = True
|
|
End Sub
|
|
|
|
' The remaining subroutines handle simple UI and exiting.
|
|
|
|
' This subroutine activates/deactivates the microphone.
|
|
Private Sub ActivateMic_Click()
|
|
If ActivateMic.Value = Checked Then
|
|
If Dict.Value Then
|
|
Grammar.DictationSetState SGDSActive
|
|
Else
|
|
Grammar.CmdSetRuleIdState 0, SGDSActive
|
|
End If
|
|
Else
|
|
If Dict.Value Then
|
|
Grammar.DictationSetState SGDSInactive
|
|
Else
|
|
Grammar.CmdSetRuleIdState 0, SGDSInactive
|
|
End If
|
|
End If
|
|
End Sub
|
|
' This subroutine clears the event text box
|
|
Private Sub ClearEvents_Click()
|
|
EventTextField.Text = ""
|
|
End Sub
|
|
' This subroutine clears the TreeView window
|
|
Private Sub ClearTree_Click()
|
|
TreeView1.Nodes.Clear
|
|
End Sub
|
|
' This subroutine changes the SR Engine to the selected one
|
|
Private Sub SREngines_Click()
|
|
' This subroutine can be called when you update the listindex of SREngines in the form load subroutine
|
|
If Inproc.Value Then
|
|
Inproc_Click
|
|
End If
|
|
End Sub
|
|
' Set the 'Emulate' button to be the default when the user is typing text into
|
|
' the EmulateRecoTxt text box.
|
|
Private Sub EmulateRecoTxt_Change()
|
|
Emulate.Default = True
|
|
End Sub
|
|
' Retain the audio
|
|
Private Sub RetainAudio_Click()
|
|
If RetainAudio.Value = Checked Then
|
|
RC.RetainedAudio = SRAORetainAudio
|
|
PlayAudio.Enabled = True
|
|
Else
|
|
RC.RetainedAudio = SRAONone
|
|
PlayAudio.Enabled = False
|
|
End If
|
|
|
|
' Clear out any old recognition results
|
|
Set RecoResult = Nothing
|
|
End Sub
|
|
' Play the Retained Audio
|
|
Private Sub PlayAudio_Click()
|
|
If Not RecoResult Is Nothing Then
|
|
RecoResult.SpeakAudio
|
|
End If
|
|
End Sub
|
|
' About box
|
|
Private Sub About_Click()
|
|
MsgBox "(c) 2001 Microsoft Corporation. All rights reserved.", vbInformation, "About RecoVB"
|
|
End Sub
|
|
Private Sub ExitBtn_Click()
|
|
Unload Form1
|
|
End Sub
|
|
Private Sub Exit_Click()
|
|
Unload Form1
|
|
End Sub
|