SpeechEventInfo.EventId 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取和设置 SpeechEventInfo 实例用于请求的语音平台事件。
public:
property short EventId { short get(); };
public short EventId { get; }
member this.EventId : int16
Public ReadOnly Property EventId As Short
属性值
返回作为 short
的 TtsEventId 的成员,指示该事件类型 SpeechEventInfo 对象将生成。
示例
以下示例是继承自 的自定义语音合成实现(使用 TtsEngineSsml TextFragment 、、 和 )的 SpeechEventInfo FragmentState 一部分 TtsEventId
的实现 Speak
接收 实例的数组,并创建要传递到基础合成引擎上的 TextFragment TextFragment
Speak
方法的新实例数组。如果从 每个实例的 属性返回的 的 属性找到 的枚举值为 ,则 TtsEngineAction Action FragmentState State TextFragment Speak 实现
在要说出的文本中将美国语翻译为"英国"。
如果提供给实现的接口上的 属性支持事件类型,则实例用于创建事件,以驱动 EventInterest ITtsEngineSite 合成器 WordBoundary SpeechEventInfo 进度计量的创建。
上的参数包括 SpeechEventInfo EventId 用于记录通过 方法生成的
LogSpeechEvent
事件。
然后,使用修改后的数组调用语音呈现 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));
LogSpeechEvent(spEvent.EventId,
spEvent.ParameterType,
spEvent.Param1,
spEvent.Param2);
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);
}