Beispiel #1
0
 /// <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));
 }
Beispiel #2
0
        /// <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;
            }
        }