微软语音识别引擎记录底层音频

3
我正在使用Microsoft System.Speech SpeechRecognitionEngine进行口述,并需要能够同时记录所有正在处理的音频并进行语音识别。
目前我可以很好地进行语音识别,并且可以获得被识别的音频。但是,我需要能够同时保存音频流,以便稍后从整个音频流中使用语音识别的元数据来获取其他信息。
如何正确处理这种情况?

让我稍微澄清一下。我想直接录制音频,并在其上应用语音识别技术。 - Brien King
2个回答

3
您可以按以下方式将相关音频文件保存为波形流到您的磁盘上。完整示例请参见链接(http://msdn.microsoft.com/en-us/library/system.speech.recognition.recognizedaudio.writetowavestream.aspx)。
 RecognizedAudio audio = e.Result.Audio;
TimeSpan start = e.Result.Words[3].AudioPosition;
TimeSpan duration = audio.Duration - start;

// Add code to verify and persist the audio.
string path = @"C:\temp\nameAudio.wav";
using (Stream outputStream = new FileStream(path, FileMode.Create))
{
  RecognizedAudio nameAudio = audio.GetRange(start, duration);
  nameAudio.WriteToWaveStream(outputStream);
  outputStream.Close();
}

1
根据您的评论@Brien King,这可能不是您想要的精确答案,但我发现Alan的回答很有用。如果您想要保存来自拒绝语音的音频,则可以使用SpeechRecognitionRejected的EventHandler来完成。我指出这一点是因为对我来说并不明显,我之前尝试使用SpeechHypothesizedEventArgs中的Result对象,但其中缺少了我期望的许多数据。我大多数是添加这个答案,以防有人像我一样感到困惑。

我使用过的所有库都不能很好地进行口述识别。我发现使用自定义语法可以帮助很多。 - Travis
关于静音检测-据我所知,我们需要实现一些静音检测算法。NAudio不能做到这一点,就我所知。 嗯..我记得..是否正确,微软引擎有SpeechDetectionEvent?如果是这样,我们可以使用它来处理这个问题,当它发生时-用语音的字节剪切缓冲区(使用NAudio麦克风)并使用它? - Admiral Land
1
对不起,我不太了解静音检测。 - Travis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接