微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 MemoryStream 与 .NET 的 System.Speech SpeechRecognitionEngine 类一起使用

如何解决将 MemoryStream 与 .NET 的 System.Speech SpeechRecognitionEngine 类一起使用

我正在尝试使用 .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 数据写入 'stream',如果有任何语法错误,那是因为为了简化我的代码而手动复制代码而不是复制和粘贴。谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。