我正在尝试使用 .NET 的 System.Speech SpeechRecognitionEngine 对象来识别不和谐用户在语音频道中所说的单词。机器人收到的原始 pcm 音频被写入 MemoryStream,我试图让 SpeechRecognitionEngine 使用这个 Stream 进行识别。获取这些数据并写入它可以正常工作,但是,由于多种原因,将其与 SpeechRecognitionEngine 一起使用似乎不起作用。一方面,流不是无限的,识别器到达流的末端并在单词甚至可以说出之前停止。即使数据不断地添加到流中(即用户不断地说话),识别器仍然会到达流的末尾并拒绝继续。另一个问题是运行识别的方法似乎不能多次运行。我' 已经尝试将流分块提供给识别器,但它似乎没有用。有一个选项可以将输入设置为您的默认音频设备,这正是我想要的,即使用户没有提供任何输入,它也始终运行而不停止。有什么帮助吗?
private SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine();
public MemoryStream stream = new MemoryStream();
//called before any other method when the bot joins the voice channel
public void StartRun(){
Choices commands = new Choices();
commands.Add(new string[] { "hello", "hey bot"});
GrammarBuilder gBuilder = new GrammarBuilder();
gBuilder.Append(commands);
Grammar grammar = new Grammar(gBuilder);
recognizer.LoadGrammar(grammar);
recognizer.SetInputToAudioStream(holdStream, new SpeechAudioFormatInfo(48000, AudioBitsPerSample.Sixteen, AuidoChannel.Mono));
recognizer.SpeechRecognized += async (s, e) => {} //handles
//the eventHandler i have for this event prints something whenever it reaches the end of the stream
recognizer.RecognizeCompleted += RecognizeCompleted;
recognizer.RecognizeAsync(RecognizeMode.Multiple);
}
在另一个程序中,我将 pcm 数据写入“流”,如果有任何语法错误,那是因为手动复制代码而不是复制和粘贴以简化我的代码。谢谢!