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: 265
        
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