TtsEngineAction 枚举
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
指定在呈现特定 TextFragment
将采用的语音合成标记语言(SSML)事件。
public enum class TtsEngineAction
public enum TtsEngineAction
type TtsEngineAction =
Public Enum TtsEngineAction
- 继承
字段
Bookmark | 3 | 指示 TextFragment 将用作书签的内容。 它对应于 SSML 规范中的 |
ParseUnknownTag | 7 | 指示没有通过 SSML 输入确定的操作。 此输出可以由合成引擎自行解释或忽略。 关联的 TextFragment 是未知的 XML 标记,不属于 SSML 标准。 |
Pronounce | 2 | 请求输入 TextFragment 文本将被解释为音素。 准确的发音由 TextFragment 实例上的 State 属性返回的 FragmentState 对象的 Phoneme 成员指定。 对应于 SSML 规范中的 |
Silence | 1 | 指示 TextFragment 不包含要作为语音呈现的文本。 静默持续时间由Duration实例上TextFragment属性返回State的对象的属性FragmentState指定。 对应于 SSML 规范中的 |
Speak | 0 | 请求应处理和通知的关联的 TextFragment。 这是 TextFragment 的默认值。 它对应于 SSML 规范中的 |
SpellOut | 4 | 指示由 TextFragment 通过其 TextToSpeak 属性提供的文本值将聚合为单独的字符。 此呈现包括除空格之外的标点符号以及字母数字文本。 例如,关联的文本片段“word!” 应合成“w o r d 感叹号”。 |
StartParagraph | 6 | 指示段落的状态。 对应于 SSML 规范中的 |
StartSentence | 5 | 指示句子开头。 对应于 SSML 规范中的 |
示例
The following example is part of a custom speech synthesis implementation inheriting from TtsEngineSsml, and using the use of TextFragment, FragmentState, and TtsEventId
实现 Speak
接收实例数组TextFragment,并创建要传递到
Speak
基础合成引擎上方法的新实例数组TextFragment。TtsEngineAction如果从Action每个TextFragment实例的属性返回State的属性中找到FragmentState的枚举值为 Speak,则实现
用文本将美国主义翻译成英国主义。
EventInterest如果提供给实现的ITtsEngineSite接口上的属性支持TtsEventId.WordBoundary事件类型,则会创建用于驱动合成器进度计量的事件。
然后使用修改后的 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进行处理。