共用方式為


TextFragment.TextOffset 屬性

定義

取得或設定片段中文字起始的位置。

public:
 property int TextOffset { int get(); void set(int value); };
public int TextOffset { get; set; }
member this.TextOffset : int with get, set
Public Property TextOffset As Integer

屬性值

Int32

int會傳回,也可以用來設定和要說出的這個片段相關聯的該文字字串部分的開始位置(以字元為單位)。

範例

下列範例是自訂語音合成衍生的一部分 TtsEngineSsml ,並使用 TextFragmentSpeechEventInfo 、和來執行 FragmentState TtsEventId

的執行 Speak

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

    TextOffset TextLength 新的 TextFragment 實例上建立時,請特別小心使用 TextToSpeak TextFragment

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

    • 將要說出的文字中的 Americanism 轉譯為 Britishisms。

    • 如果 EventInterest 提供給實作為的介面上的屬性 ITtsEngineSite 支援 WordBoundary 事件種類,則 SpeechEventInfo 會使用實例來建立事件,以建立可驅動合成器進度計量的事件。

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

}  

備註

這個屬性的預設值為 0。

適用於