ISpeechRecoGrammar CmdLoadFromMemory Method (SAPI 5.4)

Microsoft Speech API 5.4

Interface: ISpeechRecoGrammar

CmdLoadFromMemory Method

The CmdLoadFromMemory method loads a compiled speech grammar from memory.

     GrammarData As Variant,
     [LoadOption As SpeechLoadOption = SLOStatic]


  • GrammarData
    Specifies the GrammarData.
  • LoadOption
    [Optional] Specifies whether the grammar is to be loaded for static or dynamic use. The default is static.

Return Value



The following Visual Basic form code demonstrates use of the CmdLoadFromMemory method. To run this code, create a form and paste this code into the Declarations section.

The Form_Load procedure creates a recognition context and a CFG grammar object. It adds a simple rule to the grammar, and saves the grammar data to a Variant variable with the CommitAndSave method. It then uses the CmdLoadFromMemory method to load the second grammar object with the grammar data in the Variant variable. Finally, it activates the rule in the second grammar.

If the computer has a microphone, run this code and speak the phrase, "Hello, world" into the microphone. The recognition context's Recognition and FalseRecognition event procedures display messages indicating successful or unsuccessful recognition.

Option Explicit

Dim WithEvents recoCtx As SpSharedRecoContext
Dim grammar As ISpeechRecoGrammar
Dim grammar2 As ISpeechRecoGrammar
Dim gRules As ISpeechGrammarRules
Dim gRule As ISpeechGrammarRule
Dim state As ISpeechGrammarRuleState

Dim buffer As String    ' Any error information when committing and saving the grammar
Dim gData As Variant    ' The contents of the grammar held in memory

' Typically there is no reason to do something like this.
' This is just the simplest possible example to demonstrate the use of
' ISpeechRecoGrammar.CmdLoadFromMemory.

Private Sub Form_Load()
    On Error GoTo EH

    Set recoCtx = New SpSharedRecoContext
    Set grammar = recoCtx.CreateGrammar
    Set gRules = grammar.Rules

    ' Grammar has one rule, one state, and one transition
    Set gRule = gRules.Add("greeting", SRATopLevel, 1)
    Set state = gRule.InitialState
    state.AddWordTransition Nothing, "hello world", " "

    ' Save the grammar to memory (contents saved in gData)
    gData = grammar.Rules.CommitAndSave(buffer)

    Set grammar2 = recoCtx.CreateGrammar                'Second grammar
    grammar2.CmdLoadFromMemory gData, SLOStatic         'Load from memory
    grammar2.CmdSetRuleState "greeting", SGDSActive     'Set rule active

    If Err.Number Then ShowErrMsg
End Sub

Private Sub recoCtx_FalseRecognition _
   (ByVal StreamNumber As Long, _
    ByVal StreamPosition As Variant, _
    ByVal Result As SpeechLib.ISpeechRecoResult)

    ' Gets here only when the phrase "hello world" is falsely recognized
    MsgBox "(not recognized!)"

End Sub

Private Sub recoCtx_Recognition _
   (ByVal StreamNumber As Long, _
    ByVal StreamPosition As Variant, _
    ByVal RecognitionType As SpeechLib.SpeechRecognitionType, _
    ByVal Result As SpeechLib.ISpeechRecoResult)

    On Error GoTo EH

    ' Gets here only when the phrase "hello world" is recognized
    MsgBox Result.PhraseInfo.GetText

    If Err.Number Then ShowErrMsg
End Sub

Private Sub ShowErrMsg()

    ' Declare identifiers:
    Const NL = vbNewLine
    Dim T As String

    T = "Desc: " & Err.Description & NL
    T = T & "Err #: " & Err.Number
    MsgBox T, vbExclamation, "Run-Time Error"

End Sub