Share via


TextFragment.TextLength Özellik

Tanım

Parçadaki konuşma metninin uzunluğunu alır veya ayarlar.

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

Özellik Değeri

döndürülür int veya bu parçayla ilişkili metin dizesinin uzunluğunun karakter olarak konuşulacak şekilde ayarlanması için kullanılabilir.

Örnekler

Aşağıdaki örnek, 'den TtsEngineSsmldevralan ve , , SpeechEventInfoFragmentStateve TtsEventIdkullanımını kullanan özel konuşma sentezi uygulamasının TextFragmentbir parçasıdır.

Uygulamasının Speak

  1. Bir örnek dizisi TextFragment alır ve temel alınan sentez altyapısında yöntemine Speak geçirilecek yeni bir örnek dizisi TextFragment oluşturur.

    Yeni TextFragment örneklerde oluşturulurken TextToSpeak özgün TextFragment üzerindeki öğesine saygı TextOffsetTextLength için özel bakım kullanılır.

  2. TtsEngineAction Her TextFragment örneğin özelliği tarafından State döndürülen özelliğinden FragmentStateAction bulunan numaralandırma değeri iseSpeak, uygulama

    • Konuşulacak metinde Amerikancılığı İngilizlere çevirir.

    • EventInterest Uygulamaya sağlanan arabirimlerdeki özelliği ITtsEngineSite olay türünü destekliyorsaWordBoundary, bir SpeechEventInfo sentezleyici ilerleme ölçümünü yönlendirmek için bir olay oluşturmak için bir örnek kullanılır.

  3. Daha sonra değiştirilen diziyle bir konuşma işleme altyapısı çağrılır 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);  

}  

Açıklamalar

Bu özelliğin varsayılan değeri 0'dır.

Şunlara uygulanır