TtsEngineAction 枚举

定义

指定在呈现特定 TextFragment将采用的语音合成标记语言(SSML)事件。

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

字段

Bookmark 3

指示 TextFragment 将用作书签的内容。 它对应于 SSML 规范中的 <mark> XML 标记。

ParseUnknownTag 7

指示没有通过 SSML 输入确定的操作。 此输出可以由合成引擎自行解释或忽略。 关联的 TextFragment 是未知的 XML 标记,不属于 SSML 标准。

Pronounce 2

请求输入 TextFragment 文本将被解释为音素。 准确的发音由 TextFragment 实例上的 State 属性返回的 FragmentState 对象的 Phoneme 成员指定。 对应于 SSML 规范中的 <phoneme> XML 标记。

Silence 1

指示 TextFragment 不包含要作为语音呈现的文本。 静默持续时间由Duration实例上TextFragment属性返回State的对象的属性FragmentState指定。 对应于 SSML 规范中的 <Silence> XML 标记。

Speak 0

请求应处理和通知的关联的 TextFragment。 这是 TextFragment 的默认值。 它对应于 SSML 规范中的 <speak> XML 标记。

SpellOut 4

指示由 TextFragment 通过其 TextToSpeak 属性提供的文本值将聚合为单独的字符。 此呈现包括除空格之外的标点符号以及字母数字文本。 例如,关联的文本片段“word!” 应合成“w o r d 感叹号”。

StartParagraph 6

指示段落的状态。 对应于 SSML 规范中的 <p> XML 标记。

StartSentence 5

指示句子开头。 对应于 SSML 规范中的 <s> XML 标记。

示例

The following example is part of a custom speech synthesis implementation inheriting from TtsEngineSsml, and using the use of TextFragment, FragmentState, and TtsEventId

实现 Speak

  1. 接收实例数组TextFragment,并创建要传递到Speak基础合成引擎上方法的新实例数组TextFragment

  2. TtsEngineAction如果从Action每个TextFragment实例的属性返回State的属性中找到FragmentState的枚举值为 Speak,则实现

  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);

}

注解

TtsEngineAction 表示用于维护 a TextFragment. 的请求。 这些操作与 SSML 规范中的元素密切相关,并在属性上返回 TextToSpeak 的文本上 TextFragment实现。

TtsEngineAction a TextFragment 关联的值由 State 属性返回。

属性返回的值的TtsEngineAction处理由语音合成方法对派生自TtsEngineSsml的类的Speak实现State进行处理。

适用于