2015-09-23 41 views
1

我正在使用c#system.speech,并且我想要识别的语句数量有限。这里是代码System.Speech语音识别不起作用

SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine(); 
    String[] Sentences = File.ReadAllLines(samplePath); 
    Choices sentences = new Choices(); 
    sentences.Add(Sentences); 
    GrammarBuilder gBuilder = new GrammarBuilder(sentences); 
    Grammar g = new Grammar(gBuilder); 
    g.Enabled = true; 
    recognizer.LoadGrammar(g); 

    try 
    { 
     recognizer.SetInputToWaveFile(filePath); 
     RecognitionResult result = recognizer.Recognize(); 
     String ret = result.Text; 
     recognizer.Dispose(); 
     return ret; 
    } 
    catch (InvalidOperationException exception) { } 
    return ""; 

此代码抛出异常时,我给它一些WAV文件和异常的原因是它不能在样本句子找到匹配。我可以强制它,所以它必须选择句子?

+0

提供包括在那里你提供wav文件的识别部分的代码,因为对我来说,当声音文件是永远连工作完全沉默(它提供信心%)不抛出异常。 –

+0

另外你如何初始化'识别器'? –

+0

我有所有的代码,我可以更新代码,但它没有发送%信心,它似乎没有识别 –

回答

1

你得到NullReferenceException因为你的.wav文件的格式的格式比如何System.Speech.Recognition.SpeechRecognitionEngine试图使用SetInputToWaveFile方法时,在默认情况下,分析.WAV文件不同。

为了改变阅读的格式,你应该使用SetInputToAudioStream方法来代替:

using (FileStream stream = new FileStream("C:\\3.wav", FileMode.Open)) 
{ 
    recognizer.SetInputToAudioStream(stream, new SpeechAudioFormatInfo(5000, AudioBitsPerSample.Sixteen, AudioChannel.Stereo)); 
    RecognitionResult result = recognizer.Recognize(); 
    string ret = result.Text; 
} 

这样它会读取你的.WAV文件作为立体声文件,在16bps每秒5000个样本作为您的.wav文件是真正的编码。

注:这解决了这个问题,我对你的文件

+0

感谢您的帮助,但它仍然给予相同的例外:( –