SpeechEventInfo(Int16, Int16, Int32, IntPtr) 构造函数

定义

构造相应的 SpeechEventInfo

public:
 SpeechEventInfo(short eventId, short parameterType, int param1, IntPtr param2);
public SpeechEventInfo (short eventId, short parameterType, int param1, IntPtr param2);
new System.Speech.Synthesis.TtsEngine.SpeechEventInfo : int16 * int16 * int * nativeint -> System.Speech.Synthesis.TtsEngine.SpeechEventInfo
Public Sub New (eventId As Short, parameterType As Short, param1 As Integer, param2 As IntPtr)

参数

eventId
Int16

指示 TtsEventId 对象将处理的语音平台事件的类型的 SpeechEventInfo 实例。

parameterType
Int16

指示将如何解释 param2System.IntPtr 引用和暗示 param1 用法的 EventParameterType 实例。

param1
Int32

当要构造的 SpeechEventInfo 实例要求的事件生成,要传递到语音平台的整数值。

此整数的确切含义隐式依赖于 parameterType的值。

param2
IntPtr

nativeint

一个引用对象的 System.IntPtr 实例。 当要构造的 SpeechEventInfo 实例请求的事件生成,要传递到语音平台。

必须是明显地通过值定义的引用的类型 parameterType。 值 System.IntPtr.Zero

示例

以下示例是继承自 的自定义语音合成实现(使用 TtsEngineSsml TextFragment 、、 和 )的 SpeechEventInfo FragmentState 一部分 TtsEventId

的实现 Speak

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

  2. 如果从 每个实例的 属性返回的 的 属性找到 的枚举值为 ,则 TtsEngineAction Action FragmentState State TextFragment 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);  

}  

注解

用于 、 和 的允许值及其含义由所请求的事件类型决定,由用于 的 的成员 parameterType param1 param2 TtsEventId 指定 eventId

有关 、 和 的适当 parameterTypeparam1 的详细信息 param2 ,请参阅 的文档 EventId

可以通过 的合成器引擎站点实现上的 属性获取语音平台基础结构可处理 EventInterest 的事件的类型 ITtsEngineSite

适用于