File: Internal\Synthesis\TTSEvent.cs
Web Access
Project: src\src\runtime\src\libraries\System.Speech\src\System.Speech.csproj (System.Speech)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System.Speech.Synthesis;
using System.Speech.Synthesis.TtsEngine;

namespace System.Speech.Internal.Synthesis
{

    internal class TTSEvent
    {
        #region Constructors

        internal TTSEvent(TtsEventId id, Prompt prompt, Exception? exception, VoiceInfo? voice)
        {
            _evtId = id;
            _prompt = prompt;
            _exception = exception;
            _voice = voice;
        }

        internal TTSEvent(TtsEventId id, Prompt prompt, Exception? exception, VoiceInfo? voice, TimeSpan audioPosition, long streamPosition, string? bookmark, uint wParam, IntPtr lParam)
            : this(id, prompt, exception, voice)
        {
            _audioPosition = audioPosition;
            _bookmark = bookmark;
            _wParam = wParam;
            _lParam = lParam;
        }

        internal static TTSEvent CreatePhonemeEvent(string phoneme, string nextPhoneme,
                                                    TimeSpan duration, SynthesizerEmphasis emphasis,
                                                    Prompt prompt, TimeSpan audioPosition)
        {
            TTSEvent ttsEvent = new(id: TtsEventId.Phoneme, prompt, exception: null, voice: null, audioPosition, streamPosition: default, bookmark: null, wParam: default, default);
            ttsEvent._phoneme = phoneme;
            ttsEvent._nextPhoneme = nextPhoneme;
            ttsEvent._phonemeDuration = duration;
            ttsEvent._phonemeEmphasis = emphasis;

            return ttsEvent;
        }

        #endregion

        #region Internal Properties

        internal TtsEventId Id
        {
            get
            {
                return _evtId;
            }
        }

        internal Exception? Exception
        {
            get
            {
                return _exception;
            }
        }

        internal Prompt Prompt
        {
            get
            {
                return _prompt;
            }
        }

        internal VoiceInfo? Voice
        {
            get
            {
                return _voice;
            }
        }

        internal TimeSpan AudioPosition
        {
            get
            {
                return _audioPosition;
            }
        }

        internal string? Bookmark
        {
            get
            {
                return _bookmark;
            }
        }

        internal IntPtr LParam
        {
            get
            {
                return _lParam;
            }
        }

        internal uint WParam
        {
            get
            {
                return _wParam;
            }
        }

        internal SynthesizerEmphasis PhonemeEmphasis
        {
            get
            {
                return _phonemeEmphasis;
            }
        }

        internal string? Phoneme
        {
            get
            {
                return _phoneme;
            }
        }

        internal string? NextPhoneme
        {
            get
            {
                return _nextPhoneme;
            }
            set
            {
                _nextPhoneme = value;
            }
        }

        internal TimeSpan PhonemeDuration
        {
            get
            {
                return _phonemeDuration;
            }
        }

        #endregion

        #region private Fields

        private TtsEventId _evtId;
        private Exception? _exception;
        private VoiceInfo? _voice;
        private TimeSpan _audioPosition;
        private string? _bookmark;
        private uint _wParam;
        private IntPtr _lParam;
        private Prompt _prompt;

        //
        // Data for phoneme event
        //
        private string? _phoneme;
        private string? _nextPhoneme;
        private TimeSpan _phonemeDuration;
        private SynthesizerEmphasis _phonemeEmphasis;
        #endregion

    }
}