TtsEventId 枚举
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
枚举语音合成事件的类型。
public enum class TtsEventId
public enum TtsEventId
type TtsEventId =
Public Enum TtsEventId
- 继承
字段
AudioLevel | 9 | 当语音合成引擎在讲话过程中完成一个音频级别的更改时,标识生成的事件。 |
Bookmark | 4 | 当语音合成引擎在讲话过程中遇到一个书签时,标识生成的事件。 |
EndInputStream | 2 | 当语音合成引擎在讲话过程中遇到它的输入流的末尾时,标识生成的事件。 |
Phoneme | 6 | 当语音合成引擎在讲话过程中完成一个音素时,标识生成的事件。 |
SentenceBoundary | 7 | 当语音合成引擎在讲话过程中完成一个句子时,标识生成的事件。 |
StartInputStream | 1 | 当语音合成引擎开始讲话时,标识生成的事件。 |
Viseme | 8 | 当语音合成引擎在讲话过程中完成一个 viseme 时,标识生成的事件。 |
VoiceChange | 3 | 当语音合成引擎在讲话过程中遇到一个语音更改时,标识生成的事件。 |
WordBoundary | 5 | 当语音合成引擎在讲话过程中完成一个词语时,标识生成的事件。 |
示例
下面的示例是继承自的自定义语音合成实现的一部分, TtsEngineSsml 并使用 TextFragment 、 SpeechEventInfo 、 FragmentState 和 TtsEventId 类。
的实现 TtsEngineSsml.Speak 包括以下步骤:
接收实例的数组 TextFragment ,并创建 TextFragment 要
Speak
在基础合成引擎上传递给方法的新的实例数组。如果 Action 每个实例的属性 TextFragment.State 等于 TtsEngineAction.Speak ,则代码会执行以下操作:
将美国英语翻译为要朗读的文本。
如果 ITtsEngineSite.EventInterest 为实现提供的属性支持
WordBoundary
事件类型,则将 SpeechEventInfo 使用实例创建事件来驱动合成器的进度计量。
然后,将使用修改后的数组调用语音呈现引擎 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 指示站点是否支持事件类型。