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.String 而建立的);param1 可以接受任何值。

Token 1

指出 SpeechEventInfoparam2 引數是使用參考 Windows 桌面語音技術權杖的 PtrToStructure 所建立 IntPtr,這是表示資源的 Windows 桌面語音技術物件,例如語音 (VoiceInfo)。 param1 可接受任何值。

Undefined 0

表示 SpeechEventInfoparam2 引數是未定義。 一般而言,會接著忽略 param1param2。 不過,如果 EventIdWordBoundary,則可以產生進度指示器事件。 param1 應該是包含目前字組長度的整數,而 param2 應該是參考包含目前字組位移之整數的 IntPtr

範例

下列範例是自訂語音合成實作為繼承自的, TtsEngineSsml 以及使用、、和的 TextFragment 一部分 SpeechEventInfo FragmentState TtsEventId

的執行 Speak

  1. 接收實例的陣列 TextFragment ,並建立新的實例陣列, TextFragment 以傳遞至 Speak 基礎合成引擎上的方法。

  2. 如果在 TtsEngineAction Action FragmentState State 每個實例之屬性所傳回的屬性中找到列舉值,則 TextFragmentSpeak 執行

  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

注意

目前,使用命名空間成員撰寫之 managed 綜合語音引擎的實例, System.Speech.Synthesis 無法在結構之後變更資源。

適用於

另請參閱