SpeechRecoContext CreateGrammar Method (SAPI 5.3)
Microsoft Speech API 5.3
Interface: ISpeechRecoContext
CreateGrammar Method
The CreateGrammar method creates an object based on ISpeechRecoGrammar.
Before speech recognition takes place, a speech recognition (SR) engine requires two things: grammar creation and grammar activation. A recognizer may have more than one grammar associated with it although they are usually limited to one each of two types: dictation and context free grammar (CFG). CFG is used for command and control. The recognizer can have more than one active grammar of the same type open at one time. In this case, the recognition is assigned to the grammar in which a unique match is made. If more than one grammar can match the recognition, the earliest opened grammar will receive the recognition.
A grammar must be activated prior to use. Call ISpeechRecoGrammar.DictationSetState to activate or deactivate a dictation grammar. ISpeechRecoGrammar.CmdSetRuleState is used to activate or deactivate a command and control rule which also controls the associated grammar. By controlling the state of grammars, different grammars may be used at different times.
SpeechRecoContext.CreateGrammar(
[GrammarId As Variant = 0]
) As ISpeechRecoGrammar
Parameters
- GrammarId
[Optional] Specifies the GrammarId. The GrammarId identifies each grammar. The values do not have to be unique although each grammar instance can only have one identifier. The default value is zero.
Return Value
The CreateGrammar method returns an ISpeechRecoGrammar variable.
Example
The following Visual Basic form code demonstrates two ways of creating and activating a grammar: a dictation grammar or a command and control grammar. Both example grammars have a GrammarId of zero. The zero for the GrammarId is not required as it is the default. In the case of the dictation grammar, it is set up and activated by calling ISpeechRecoGrammar.DictationLoad and ISpeechRecoGrammar.DictationSetState.
The command and control grammar is handled differently. You first need to specify a grammar file by calling one of the command load methods (in this example, ISpeechRecoGrammar.CmdLoadFromFile. See the ISpeechRecoGrammar interface for more loading options. Then a call to ISpeechRecoGrammar.CmdSetRuleIdState activates the grammar.
To run this code, paste it into the Declarations section of a form that contains two command button controls named Command1 and Command2.
Option Explicit
Dim RC As SpSharedRecoContext
Dim Grammar As ISpeechRecoGrammar
Private Sub Form_Load()
On Error GoTo EH
Set RC = New SpSharedRecoContext
Set Grammar = RC.CreateGrammar(0)
EH:
If Err.Number Then ShowErrMsg
End Sub
Private Sub Command1_Click()
On Error GoTo EH
With Grammar
.DictationLoad
.DictationSetState SGDSActive
MsgBox .State, vbInformation
End
End With
EH:
If Err.Number Then ShowErrMsg
End Sub
Private Sub Command2_Click()
On Error GoTo EH
With Grammar
.CmdLoadFromFile "C:\sol.xml", SLODynamic
.CmdSetRuleIdState 0, SGDSActive
MsgBox .State, vbInformation
End With
EH:
If Err.Number Then ShowErrMsg
End Sub
Private Sub ShowErrMsg()
' Declare identifiers:
Dim T As String
T = "Desc: " & Err.Description & vbNewLine
T = T & "Err #: " & Err.Number
MsgBox T, vbExclamation, "Run-Time Error"
End
End Sub