我正在尝试使用 vb.net 创建一个使用语音命令的应用程序,我希望它可以作为“alexa”工作

问题描述

我正在尝试使用 vb.net 创建一个使用语音命令的应用程序。我希望它作为“Alexa”工作,因此有一个关键字,然后是命令,但关键字和命令必须由用户编写。

如何将字符串添加到语法中而不必先将它们传递给规则? (抱歉英语不好,我是意大利人)

这是我目前的代码

Imports System.Speech

Public Class Form1
    Dim WithEvents reco As New Recognition.SpeechRecognitionEngine
    Dim WithEvents reco2 As New Recognition.SpeechRecognitionEngine
    Dim recallWord As String
    Dim c As Integer = 0
    Dim comandoWord(c) As String
    Dim comandoV As New Recognition.SrgsGrammar.SrgsOneOf
    Dim recallV As New Recognition.SrgsGrammar.SrgsOneOf
    Dim gram As New Recognition.SrgsGrammar.SrgsDocument
    Dim rules As New Recognition.SrgsGrammar.SrgsRule("a")
    Dim rules2 As New Recognition.SrgsGrammar.SrgsRule("b")
    Dim recording As Boolean
    Dim gram2 As New Recognition.SrgsGrammar.SrgsDocument

    Private Sub Form1_Load(sender As Object,e As EventArgs) Handles MyBase.Load
        reco.SetInputToDefaultAudioDevice()
        reco2.SetInputToDefaultAudioDevice()
    End Sub

    Private Sub btIns_Click(sender As Object,e As EventArgs) Handles btIns.Click
        c = c + 1
        ReDim comandoWord(c)
        recallWord = txtRecall.Text
        comandoWord(c) = txtComando.Text


        Dim recallC As New Recognition.SrgsGrammar.SrgsItem(recallWord)
        recallV.Items.Add(recallC)
        rules.Add(recallV)
        gram.Rules.Add(rules)
        gram.Root = rules
        reco.LoadGrammar(New Recognition.Grammar(gram))


        Dim comandoC As New Recognition.SrgsGrammar.SrgsItem(comandoWord(c))
        comandoV.Items.Add(comandoC)
        rules2.Add(comandoV)
        gram2.Rules.Add(rules2)
        gram2.Root = rules2
        reco2.LoadGrammar(New Recognition.Grammar(gram2))


        reco.RecognizeAsync()
        reco2.RecognizeAsync()
    End Sub

    Private Sub reco_speechRecognized(ByVal sender As Object,e As System.Speech.Recognition.RecognitionEventArgs) Handles reco.SpeechRecognized
        If e.Result.Text = recallWord Then
            MsgBox(e.Result.Text)
            recording = True
        End If
    End Sub

    Private Sub reco2_speechRecognized(ByVal sender As Object,e As System.Speech.Recognition.RecognitionEventArgs) Handles reco2.SpeechRecognized
        If recording = True Then
            If e.Result.Text = comandoWord(1) Then
                MsgBox(e.Result.Text)
                recording = False
            End If
        End If
    End Sub

    Private Sub reco_recognizecompleted(ByVal sender As Object,e As System.Speech.Recognition.RecognizeCompletedEventArgs) Handles reco.RecognizeCompleted
        reco.RecognizeAsync()
    End Sub

    Private Sub reco2_recognizecompleted(ByVal sender As Object,e As System.Speech.Recognition.RecognizeCompletedEventArgs) Handles reco2.RecognizeCompleted
        reco2.RecognizeAsync()
    End Sub
End Class

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)