Files
2025-05-21 21:20:08 +03:00

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