TextFragment.TextOffset Propriété

Définition

Obtient ou définit l’emplacement de départ du texte dans le fragment.

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

Valeur de propriété

Une int valeur est retournée ou peut être utilisée pour définir l’emplacement de début, en caractère, de la partie de chaîne de texte associée à ce fragment à prononcer.

Exemples

L’exemple ci-dessous fait partie d’une implémentation de synthèse vocale personnalisée qui hérite TtsEngineSsmlet utilise l’utilisation de TextFragment, SpeechEventInfoet FragmentStateTtsEventId.

Implémentation de Speak

  1. Reçoit un tableau d’instances TextFragment et crée un tableau d’instances à passer à la Speak méthode sur un moteur de TextFragment synthèse sous-jacent.

    Un soin particulier est utilisé pour respecter le TextOffset, TextLength sur l’original TextFragment lors de la création du TextToSpeak sur les nouvelles TextFragment instances.

  2. Si la TtsEngineAction valeur d’énumération trouvée à partir de la Action propriété sur la FragmentState propriété retournée par la State propriété de chaque TextFragment instance est Speak, l’implémentation

    • Traduit l’americanisme aux britishismes dans le texte à prononcer.

    • Si la EventInterest propriété sur les ITtsEngineSite interfaces fournies à l’implémentation prend en charge le WordBoundary type d’événement, une SpeechEventInfo instance est utilisée pour créer un événement pour piloter un compteur de progression du synthétiseur.

  3. Un moteur de rendu vocal est ensuite appelé avec le tableau modifié 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);

}

Remarques

La valeur par défaut de cette propriété est 0.

S’applique à