`Recognition` 和 `EndStream` 都是 `SpVoice` 对象的事件,但它们分别用于不同的场景。
`Recognition` 事件在语音识别过程中触发,可以用来处理识别结果。例如,您可以在 `Recognition` 事件中获取识别结果,并根据结果执行相应的操作。以下是一个示例代码:
```vb
Private WithEvents spVoice As SpVoice
Private Sub Command1_Click()
Set spVoice = New SpVoice
spVoice.Speak "请说出您的姓名", SVSFDefault
spVoice.WaitUntilDone -1 '等待语音播放完毕
spVoice.Recognizer.Recognize
End Sub
Private Sub spVoice_Recognition(ByVal StreamNumber As Long, ByVal StreamPosition As Variant, ByVal RecognitionType As SpeechLib.SpeechRecognitionType, ByVal Result As SpeechLib.ISpeechRecoResult)
MsgBox "您说的是:" & Result.PhraseInfo.GetText
End Sub
```
在上面的代码中,我们首先使用 `Speak` 方法播放一段提示用户说出姓名的语音,然后调用 `Recognizer.Recognize` 方法开始进行语音识别。当识别完成后,会触发 `Recognition` 事件,在该事件中我们可以通过 `ISpeechRecoResult` 接口获取到识别结果,并弹出一个消息框显示识别结果。
`EndStream` 事件则在语音播放完毕时触发,可以用来判断语音是否已经播放完毕。例如,您可以在 `EndStream` 事件中执行下一步操作,或者提示用户语音已经播放完毕。以下是一个示例代码:
```vb
Private WithEvents spVoice As SpVoice
Private Sub Command1_Click()
Set spVoice = New SpVoice
spVoice.Speak "Hello, World!", SVSFDefault
End Sub
Private Sub spVoice_EndStream(ByVal StreamNumber As Long, ByVal StreamPosition As Variant)
MsgBox "语音播放完毕!"
End Sub
```
在上面的代码中,我们创建了一个 `SpVoice` 对