2015-09-23 40 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

感謝您的幫助,但它仍然給予相同的例外:( –