System.Speech语音识别无法正常工作

时间:2015-09-23 10:59:22

标签: c# sapi

我正在使用c#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 文件时,此代码抛出异常,异常原因是它无法在示例句中找到匹配项。我可以强制它,所以它必须选择句子吗?

1 个答案:

答案 0 :(得分:1)

您收到NullReferenceException因为 .wav 文件格式的格式与System.Speech.Recognition.SpeechRecognitionEngine尝试分析 .wav 文件的格式不同默认情况下使用SetInputToWaveFile方法。

为了更改读取格式,您应该使用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 文件已真正编码。

注意:这解决了我的问题