EventParameterType 枚举

定义

枚举传递到语音合成事件的数据指针的类型。

public enum class EventParameterType
public enum EventParameterType
type EventParameterType = 
Public Enum EventParameterType
继承
EventParameterType

字段

Object 2

当前不支持。

Pointer 3

当前不支持。

String 4

指示传到 SpeechEventInfoparam2 参数是使用引用 System.IntPtr 的对象的 System.Runtime.InteropServices.Marshal.StringToCoTaskMemUni 创建的 System.Stringparam1 可以具有任何值。

Token 1

指示 SpeechEventInfoparam2 参数是使用 PtrToStructure 创建的 IntPtr,它引用 Windows 桌面语音技术令牌,该令牌是一个表示资源的 Windows 桌面语音技术对象,如语音 (VoiceInfo)。 param1 可能具有任何价值。

Undefined 0

指示传到 SpeechEventInfo 的参数 param2 未定义。 通常,忽略 param1param2。 但是,如果 EventIdWordBoundary,则可以生成进度条事件。 param1 应为包含当前单词长度的整数,param2 为引用包含当前单词偏移量的整数的 IntPtr

示例

下面的示例是继承自的自定义语音合成实现的一部分 TtsEngineSsml ,并使用 TextFragmentSpeechEventInfoFragmentStateTtsEventId

的实现 Speak

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

  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));  
         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);  

}  

注解

EventParameterType构造对象时使用枚举 SpeechEventInfoEventParameterType作为参数传递给 parameterType 构造函数的枚举成员,用于 SpeechEventInfo 指定 param2 构造函数的自变量 (必须为 IntPtr) 的解释方式。

的选择取决于所 EventParameterType 请求的事件类型,由的成员指定 System.Speech.Synthesis.TtsEngine.TtsEventId

有关如何使用的详细信息 EventParameterType ,请参阅文档 EventId

备注

目前,使用命名空间的成员编写的托管合成语音引擎的实例 System.Speech.Synthesis 不能在构造后更改资源。

适用于

另请参阅