我试图更新一个非常古老的VB6程序,以提供语音识别。我认为最好的方法是访问用于语音识别的Win32 API。
在MS文档中寻找这个。看起来,这一点以前是通过SAPI 5.3来完成的,这个问题已经被不推荐使用的MS Agent所取代,而MS Agent本身就是不推荐的。
发布于 2022-01-11 14:39:14
http://msdn.microsoft.com/en-us/library/ms720589(VS.85).aspx
上面的链接是旧的(因为我在10年前使用过),但是是有效的。您基本上创建了适当的对象,可能以它们的格式创建语法,然后在RC对象上创建事件,如下所示:
下面的方法“工作”,但它不是很令人印象深刻。此外,它还导致我们不得不创建自己的MsgBox函数,因为我们需要自动化everything.而且,由于您不能告诉Windows“单击”标准消息框的OK按钮(除非您想要处理更多的API),所以您必须控制软件的更多方面。
确实起作用了,但我不确定有人用过它。
Public WithEvents RC As SpSharedRecoContext
Public myGrammar, b As ISpeechRecoGrammar
Private Sub Form_Load()
On Error GoTo EH
Set RC = New SpSharedRecoContext
Set myGrammar = RC.CreateGrammar
myGrammar.CmdLoadFromFile "sol.xml", SLODynamic
myGrammar.CmdSetRuleIdState 0, SGDSActive
EH:
If Err.Number Then ShowErrMsg
End Sub
Private Sub RC_FalseRecognition(ByVal StreamNumber As Long, ByVal StreamPosition As Variant, ByVal Result As SpeechLib.ISpeechRecoResult)
'Label1.Caption = "(no recognition)"
End Sub
Private Sub RC_Recognition(ByVal StreamNumber As Long, ByVal StreamPosition As Variant, ByVal RecognitionType As SpeechLib.SpeechRecognitionType, ByVal Result As SpeechLib.ISpeechRecoResult)
'Label1.Caption = Result.PhraseInfo.GetText
End Sub
Private Sub RC_StartStream(ByVal StreamNumber As Long, ByVal StreamPosition As Variant)
'Label2.Caption = Val(StreamNumber)
End Subhttps://stackoverflow.com/questions/70660935
复制相似问题