Поделиться через


TextFragment.TextToSpeak Свойство

Определение

Возвращает или задает текст речи фрагмента.

public:
 property System::String ^ TextToSpeak { System::String ^ get(); void set(System::String ^ value); };
public string TextToSpeak { get; set; }
member this.TextToSpeak : string with get, set
Public Property TextToSpeak As String

Значение свойства

System.String возвращается или может использоваться для задания текста речи, который должен использоваться механизмом синтеза речи для создания звукового содержимого.

Примеры

Приведенный ниже пример является частью реализации пользовательского синтеза речи, наследуемой от TtsEngineSsmlи использующими TextFragment, SpeechEventInfo, FragmentStateи TtsEventId.

Реализация Speak

  1. Получает массив экземпляров TextFragment и создает новый массив экземпляров, передаваемых TextFragmentSpeak в метод в базовом механизме синтеза.

    При создании TextToSpeak объекта в новых TextFragment экземплярах используется TextFragmentTextOffsetTextLength особый осторожность для .

  2. TtsEngineAction Если значение перечисления , найденное из Action свойства в объекте FragmentState , возвращаемом свойством State каждого TextFragment экземпляра , равно Speak, реализация

    • Переводит американизм в британизм в тексте, который будет говорить.

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

}  

Комментарии

Значение по умолчанию этого свойства равно System.String.Empty.

Приложения могут полностью изменять значение TextToSpeak.

Сброс значения TextToSpeak не приведет к изменению значения TextOffset и TextLength.

Применяется к