www.pudn.com > 20080229123745538.rar > recovb.frm


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