EventParameterType Enum


Enumerates the types of data pointers passed to speech synthesis events.

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


Object 2

Currently not supported.

Pointer 3

Currently not supported.

String 4

Indicates that the param2 argument to the SpeechEventInfo is a System.IntPtr created using System.Runtime.InteropServices.Marshal.StringToCoTaskMemUni referencing a System.String object; param1 may take on any value.

Token 1

Indicates that the param2 argument to the SpeechEventInfo is an IntPtr created using PtrToStructure that references a Windows Desktop Speech Technology token, which is a Windows Desktop Speech Technology object representing a resource, such as a voice (VoiceInfo). param1 may take on any value.

Undefined 0

Indicates that the param2 argument to the SpeechEventInfo is undefined. Generally, param1 and param2 are then ignored. However, if EventId is WordBoundary, a progress meter event can be generated. param1 should be an integer containing the length of the current word, and param2 an IntPtr referencing an integer containing the offset of the current word.


The following example is part of a custom speech synthesis implementation inheriting from TtsEngineSsml, and using the use of TextFragment, SpeechEventInfo, FragmentState, and TtsEventId.

The implementation of Speak

  1. Receives an array of TextFragment instances and creates a new array of TextFragment instances to be passed to the Speak method on an underlying synthesis engine.

  2. If the TtsEngineAction enumeration value by found from the Action property on the FragmentState returned by the State property of each TextFragment instance is Speak, the implementation

  3. A speech rendering engine is then called with the modified TextFragment array.

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].TextToSpeak = frags[i].TextToSpeak.Substring(frags[i].TextOffset,  
    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,   
                 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);  



The EventParameterType enumeration is used when constructing a SpeechEventInfo object. An EventParameterType enumeration member passed as the parameterType argument to the constructor for SpeechEventInfo specifies how the param2 argument of the constructor (which must be an IntPtr) is interpreted.

The choice of EventParameterType is dictated by the type of event being requested, as specified by a member of System.Speech.Synthesis.TtsEngine.TtsEventId.

For detailed information on how use EventParameterType, see the documentation for EventId


Currently, instances of a managed synthetic speech engines written using the members of the System.Speech.Synthesis namespace cannot change resources after construction.

Applies to

See also