我正在尝试使用带语音识别引擎的其他输入设备。我曾尝试使用NAudio来实现这一点,使用WaveIn和DataAvailable事件,但是我无法弄清楚如何将缓冲区从事件转换为可与语音识别引擎的SetInputToAudioStream()一起使用的流。我目前的代码如下:
using System.Speech.Recognition;
using NAudio.Wave;
private SpeechRecognition sre;
private WaveInEvent wi;
private Stream st;
static void main(string[] args) {
Choices words = new Choices(new string[] { "word", "test" });
Grammar g = new Grammar(words);
wi = new WaveInEvent();
wi.DeviceNumber = 0; // Default device
wi.DataAvailable += Wi_DataAvailable;
wi.StartRecording();
st = new MemoryStream();
sre = new SpeechRecognitionEngine();
sre.LoadGrammar(g);
//sre.SetInputToDefaultAudioDevice();
sre.SetInputToAudioStream(st, /* SpeechAudioFormatInfo */);
sre.SpeechRecognized += Sre_SpeechRecognized;
sre.RecognizeAsync(RecognizeMode.Multiple);
}
private void Wi_DataAvailable(object sender, WaveInEventArgs e) {
// Convert e.Buffer to Stream st
}
private void Sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) {
Console.WriteLine(e.Result.Text);
}
有人可以帮我这个吗?感谢。