我正在使用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 文件时,此代码抛出异常,异常原因是它无法在示例句中找到匹配项。我可以强制它,所以它必须选择句子吗?
答案 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 文件已真正编码。
注意:这解决了我的问题