語言

SpeechEventInfo.Param1 屬性

定義

取得並設定 integer (建構子中的值param1 )傳給 Speech 平台,以產生當前實例 SpeechEventInfo 用來請求的事件。

public:
 property int Param1 { int get(); };
public int Param1 { get; }
member this.Param1 : int
Public ReadOnly Property Param1 As Integer

屬性值

當 的integer當前實例所指定的事件發生時,會回傳 SpeechEventInfo to to 傳給 Speech 平台。

範例

以下範例是繼承自 TtsEngineSsml、 TextFragmentSpeechEventInfoFragmentState及 的自訂語音合成實作的一部分TtsEventId

實作 Speak

  1. 接收一個實例陣列 TextFragment ,並建立一個新的實例陣列 TextFragment ,在底層合成引擎上傳遞給該 Speak 方法。

  2. 若從TtsEngineAction每個實例的屬性 ActionFragmentState 中找出StateTextFragment的枚舉值為 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);

}

備註

屬性Param1的需求與意義SpeechEventInfo由該實例 和 EventId 屬性ParameterType的值SpeechEventInfo唯一決定。

關於如何使用 Param1,請參閱相關 EventId文件。

適用於