TtsEventId 枚举

定义

枚举语音合成事件的类型。

public enum class TtsEventId
public enum TtsEventId
type TtsEventId = 
Public Enum TtsEventId
继承
TtsEventId

字段

AudioLevel 9

当语音合成引擎在讲话过程中完成一个音频级别的更改时,标识生成的事件。

Bookmark 4

当语音合成引擎在讲话过程中遇到一个书签时,标识生成的事件。

EndInputStream 2

当语音合成引擎在讲话过程中遇到它的输入流的末尾时,标识生成的事件。

Phoneme 6

当语音合成引擎在讲话过程中完成一个音素时,标识生成的事件。

SentenceBoundary 7

当语音合成引擎在讲话过程中完成一个句子时,标识生成的事件。

StartInputStream 1

当语音合成引擎开始讲话时,标识生成的事件。

Viseme 8

当语音合成引擎在讲话过程中完成一个 viseme 时,标识生成的事件。

VoiceChange 3

当语音合成引擎在讲话过程中遇到一个语音更改时,标识生成的事件。

WordBoundary 5

当语音合成引擎在讲话过程中完成一个词语时,标识生成的事件。

示例

下面的示例是继承自的自定义语音合成实现的一部分, TtsEngineSsml 并使用 TextFragmentSpeechEventInfoFragmentStateTtsEventId 类。

的实现 TtsEngineSsml.Speak 包括以下步骤:

  1. 接收实例的数组 TextFragment ,并创建 TextFragmentSpeak 在基础合成引擎上传递给方法的新的实例数组。

  2. 如果 Action 每个实例的属性 TextFragment.State 等于 TtsEngineAction.Speak ,则代码会执行以下操作:

    • 将美国英语翻译为要朗读的文本。

    • 如果 ITtsEngineSite.EventInterest 为实现提供的属性支持 WordBoundary 事件类型,则将 SpeechEventInfo 使用实例创建事件来驱动合成器的进度计量。

  3. 然后,将使用修改后的数组调用语音呈现引擎 TextFragment

private const int WordBoundaryFlag = 1 << (int)TtsEventId.WordBoundary;
private readonly char[] spaces = new char[] { ' ', '\t', '\r', '\n' };
internal struct UsVsUk
{
    internal string UK;
    internal string US;
}

override public void Speak (TextFragment [] frags, IntPtr wfx, ITtsEngineSite site)
{
    TextFragment [] newFrags=new TextFragment[frags.Length];

    for (int i=0;i<frags.Length;i++)
    {
        newFrags[i].State=frags[i].State;
        //truncate
        newFrags[i].TextToSpeak = frags[i].TextToSpeak.Substring(frags[i].TextOffset,
                                  frags[i].TextLength);
        newFrags[i].TextLength = newFrags[i].TextToSpeak.Length;
        newFrags[i].TextOffset = 0;
        if (newFrags[i].State.Action == TtsEngineAction.Speak)
        {
            //US to UK conversion
            foreach (UsVsUk term in TransList)
            {
              newFrags[i].TextToSpeak.Replace(term.US, term.UK);
            }
            //Generate progress meter events if supported
            if ((site.EventInterest & WordBoundaryFlag) != 0)
            {
                string[] subs = newFrags[i].TextToSpeak.Split(spaces);

                foreach (string s in subs)
                {
                    int offset = newFrags[i].TextOffset;
                    SpeechEventInfo spEvent = new SpeechEventInfo((Int16)TtsEventId.WordBoundary,
                        (Int16)EventParameterType.Undefined,
                        s.Length, new IntPtr(offset));
                    offset += s.Length;
                    if (s.Trim().Length > 0)
                    {
                        SpeechEventInfo[] events = new SpeechEventInfo[1];
                        events[0] = spEvent;
                        site.AddEvents(events, 1);
                    }
                }
            }
        }
    }

    _baseSynthesize.Speak(newFrags, wfx, site);

}

注解

自定义语音合成引擎用来定义提交到语音平台合成器基础结构的事件类型 TtsEventId

规范是通过设置传递到类的成员的实例的属性来执行的, EventId SpeechEventInfo AddEvents 该成员在实现 ITtsEngineSite Speak 的自定义语音引擎实现上传递给方法 TtsEngineSsml

语音平台基础结构通过 EventInterest ITtsEngineSite 传递到说话实现的中的属性指示当前正在处理的事件类型。

的值 EventInterest 是一个位掩码,其中的成员 TtsEventId 定义与事件类型相对应的位的位置。 例如,WordBoundary 的值为 5 (5) ,这表示返回的值中的第五位 EventInterest 指示站点是否支持事件类型。

适用于