我正在使用 Microsoft System.Speech SpeechRecognitionEngine 进行听写,我需要能够记录所有正在处理的音频并同时对其执行语音识别。
现在我可以很好地进行语音识别,并且可以获取识别出的音频。但是,我需要能够同时保存音频流,以便以后可以使用语音识别中的元数据从整个音频流中获取更多信息。
这样做的适当方法是什么?
我正在使用 Microsoft System.Speech SpeechRecognitionEngine 进行听写,我需要能够记录所有正在处理的音频并同时对其执行语音识别。
现在我可以很好地进行语音识别,并且可以获取识别出的音频。但是,我需要能够同时保存音频流,以便以后可以使用语音识别中的元数据从整个音频流中获取更多信息。
这样做的适当方法是什么?
您可以通过以下方式将关联的音频文件作为波流保存到磁盘。有关完整示例,请参见链接 ( 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();
}
根据您的评论@Brien King,这可能不是您想要的,但我发现 Alan 的回答很有用,但想补充一点,如果您想保存被拒绝语音中的音频,可以使用 SpeechRecognitionRejected 的 EventHandler 来完成
我指出这一点,因为对我来说,是否有可能从不成功的识别中保存音频并不是很明显。我之前曾尝试使用 SpeechHypothesizedEventArgs 中的 Result 对象,该对象没有我期望可用的大量数据。
我主要是添加这个答案,以防有人像我一样对此感到困惑。