Speech Recognition "SrgoneOf" Automation in Visual Basic 2010

Lokesh R 61 Reputation points
2021-09-05T15:26:33.747+00:00

I have been working on Speech Recognition in visual basic 2010 it works well. I write the "sentences to be recognized inside the "srgoneof" attribute as shown below. But It is limited and recognizes only what is written in this attribute. Can I change it to some sort of document or combobox that can be updated or added on the run time.

here is the code

..........

        End Sub`
Developer technologies | VB
{count} votes

Accepted answer
  1. Xingyu Zhao-MSFT 5,381 Reputation points
    2021-09-07T06:08:03.68+00:00

    Hi @Lokesh R ,
    Basically, you can define a xml file like:

    <?xml version="1.0" encoding="UTF-8"?>  
    <message>  
        <item>open settings</item>  
        <item>what is your favorite movie</item>  
        <item>can you give me some water</item>  
        <item>what foods do we have</item>  
        <item>get me a pepsi</item>  
    </message>  
    

    Then create a method.

        Private Function GetGrammar(id As String, xmlFilePath As String) As System.Speech.Recognition.Grammar  
            Dim AIGrammar As New Recognition.SrgsGrammar.SrgsDocument  
            Dim AiWordsRule As New Recognition.SrgsGrammar.SrgsRule(id)  
            Dim xml = XDocument.Load(xmlFilePath)  
            Dim result As String() = xml.Descendants("item").Select(Function(x) CStr(x)).ToArray()  
            Dim AIWords As New Recognition.SrgsGrammar.SrgsOneOf(result)  
            AiWordsRule.Add(AIWords)  
            AIGrammar.Rules.Add(AiWordsRule)  
            AIGrammar.Root = AiWordsRule  
            Return New Recognition.Grammar(AIGrammar)  
        End Function  
    

    Every time you need to load Grammar.

    recognizer.LoadGrammar(GetGrammar("words", "your xml file path"))  
    

    And if you want to change "SrgoneOf" at runtime, you can change 'item' elements in the xml file, and reload the Grammar.
    The code looks like:

            recognizer.UnloadAllGrammars()  
            recognizer.LoadGrammar(GetGrammar(...))  
            recognizer.RecognizeAsync(RecognizeMode.Multiple)  
    

    Hope it could be helpful.

    Best Regards,
    Xingyu Zhao
    *
    If the answer is helpful, please click "Accept Answer" and upvote it.
    Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.


0 additional answers

Sort by: Most helpful

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.