Compartilhar via


TextFragment.TextOffset Propriedade

Definição

Obtém ou define o local inicial do texto no fragmento.

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

Valor da propriedade

Um int é retornado ou pode ser usado para definir o local inicial, em caractere, da parte da cadeia de caracteres de texto associada a esse fragmento a ser falado.

Exemplos

O exemplo a seguir faz parte de uma implementação de síntese de fala personalizada herdando e TtsEngineSsmlusando o uso de TextFragment, SpeechEventInfoe FragmentStateTtsEventId.

A implementação de Speak

  1. Recebe uma matriz de TextFragment instâncias e cria uma nova matriz de TextFragment instâncias a serem passadas para o Speak método em um mecanismo de síntese subjacente.

    Cuidados específicos são usados para respeitar o TextOffset. no original TextFragment ao criar as TextToSpeak novas TextFragment instânciasTextLength.

  2. Se o TtsEngineAction valor de enumeração encontrado da Action propriedade na FragmentState propriedade retornada por State cada TextFragment instância for Speak, a implementação

    • Traduz o americanismo para os britânicos no texto a ser falado.

    • Se a EventInterest propriedade nas ITtsEngineSite interfaces fornecidas à implementação der suporte ao WordBoundary tipo de evento, uma SpeechEventInfo instância será usada para criar um evento para gerar um medidor de progresso do sintetizador.

  3. Um mecanismo de renderização de fala é chamado com a matriz modificada 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);

}

Comentários

O valor padrão dessa propriedade é 0.

Aplica-se a