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