How to fix this Speech Recognition wicked bug?

Posted by aF on Stack Overflow See other posts from Stack Overflow or by aF
Published on 2010-05-16T21:04:43Z Indexed on 2010/05/20 21:40 UTC
Read the original article Hit count: 217

Filed under:
|
|

I have this code in my C# project:

public void startRecognition(string pName)
{
    presentationName = pName;

    if (WaveNative.waveInGetNumDevs() > 0)
    {
        string grammar = System.Environment.GetEnvironmentVariable("PUBLIC") + "\\SoundLog\\Presentations\\" + presentationName + "\\SpeechRecognition\\soundlog.cfg";

        if (File.Exists(grammar))
        {
            File.Delete(grammar);
        }
        executeCommand();

        /// Create an instance of SpSharedRecoContextClass which will be used
        /// to interface with the incoming audio stream
        recContext = new SpSharedRecoContextClass();

        // Create the grammar object          
        recContext.CreateGrammar(1, out recGrammar);
        //recContext.CreateGrammar(2, out recGrammar2);
        // Set up dictation mode
        //recGrammar2.SetDictationState(SpeechLib.SPRULESTATE.SPRS_ACTIVE);
        //recGrammar2.SetGrammarState(SPGRAMMARSTATE.SPGS_ENABLED);

        // Set appropriate grammar mode
        if (File.Exists(grammar))
        {
            recGrammar.LoadCmdFromFile(grammar, SPLOADOPTIONS.SPLO_STATIC);
            //recGrammar.SetDictationState(SpeechLib.SPRULESTATE.SPRS_INACTIVE);
            recGrammar.SetGrammarState(SPGRAMMARSTATE.SPGS_ENABLED);
            recGrammar.SetRuleIdState(0, SPRULESTATE.SPRS_ACTIVE);
        }

        /// Bind a callback to the recognition event which will be invoked
        /// When a dictated phrase has been recognised.
        recContext.Recognition += new _ISpeechRecoContextEvents_RecognitionEventHandler(handleRecognition);
        //                System.Windows.Forms.MessageBox.Show(recContext.ToString());
        // gramática compilada
    }
}

private static void handleRecognition(int StreamNumber,
    object StreamPosition,
    SpeechLib.SpeechRecognitionType RecognitionType,
    SpeechLib.ISpeechRecoResult Result)
{
    string temp = Result.PhraseInfo.GetText(0, -1, true);
    _recognizedText = "";
    //            System.Windows.Forms.MessageBox.Show(temp);
    //            System.Windows.Forms.MessageBox.Show(recognizedWords.Count.ToString());
    foreach (string word in recognizedWords)
    {
        if (temp.Contains(word))
        {
            //                    System.Windows.Forms.MessageBox.Show("yes");
            _recognizedText = word;
        }
    }
}

This codes generates a dll that I use in another application.

Now, the wicked bug: - when I run the startRecognition method in the beginning of the execution of the other application, this codes works very well. But when I run it some time after the beginning, this codes works but the handleRecognition method is never called. I see that the words are recognized because they appear on the Microsoft Speech Recognition app, but the handler method is never called.

Do you know what's the problem with this code?

NOTE: this project has some code that is allways being executed. Might that be the problem? Because the other code is running it doesn't allow it to this to run?

© Stack Overflow or respective owner

Related posts about c#

Related posts about speech-recognition