/// <summary> /// Finalizes an intermediate speech recognition result. /// </summary> /// <param name="result">The intermediate speech recognition result.</param> /// <param name="audio">The audio corresponding to the finalized speech recognition result.</param> /// <param name="duration">The duration of the utterance.</param> /// <returns>The final speech recognition result.</returns> internal static StreamingSpeechRecognitionResult ToFinal(this StreamingSpeechRecognitionResult result, AudioBuffer audio = default, TimeSpan duration = default) { return(new StreamingSpeechRecognitionResult( true, result.Text, result.Confidence, result.Alternates.Cast <SpeechRecognitionAlternate>(), audio.HasValidData ? audio : result.Audio, duration != default ? duration : result.Duration)); }
/// <summary> /// Composes two consecutive speech recognition results. /// </summary> /// <param name="result1">The first speech recognition result.</param> /// <param name="result2">The second speech recognition result.</param> /// <param name="rankOrder">A value indicating whether the alternates should be scored by original rank order or confidence.</param> /// <returns>The composed speech recognition result.</returns> internal static StreamingSpeechRecognitionResult Compose(this StreamingSpeechRecognitionResult result1, StreamingSpeechRecognitionResult result2, bool rankOrder = true) { // limit the number of alternates to prevent exponential growth through composition int maxAlternates = Math.Max(result1.Alternates.Length, result2.Alternates.Length); return(new StreamingSpeechRecognitionResult( false, Compose(result1.Text, result2.Text), Combine(result1.Confidence, result2.Confidence), Compose(result1.Alternates, result2.Alternates, rankOrder).OrderByDescending(alt => alt.score).Take(maxAlternates).Select(alt => alt.value), null, result1.Duration + result2.Duration)); }
private void OutputResult(StreamingSpeechRecognitionResult result, DateTime originatingTime) { lock (this.outputLock) { if (originatingTime < this.lastOutputPostTime) { originatingTime = this.lastOutputPostTime; } this.Out.Post(result, originatingTime); this.lastOutputPostTime = originatingTime; } }