SpeakProgressEventArgs.CharacterPosition Свойство

Определение

Получает количество символов и пробелов с начала запроса на позицию до первой буквы слова, которое было только что произнесено.

public:
 property int CharacterPosition { int get(); };
public int CharacterPosition { get; }
member this.CharacterPosition : int
Public ReadOnly Property CharacterPosition As Integer

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

Возвращает количество символов и пробелов с начала запроса на позицию до первой буквы слова, которое было только что произнесено.

Примеры

В следующем примере создается PromptBuilder и добавляется содержимое SSML XML-файла с помощью XmlReader. Пример выводит речь в WAV-файл для воспроизведения. Содержимое XML-файла, содержащего SSML, отображается под примером кода.

using System;
using System.Xml;
using System.IO;
using System.Speech.Synthesis;

namespace SampleSynthesis
{
  class Program
  {
    static void Main(string[] args)
    {

      // Initialize a new instance of the SpeechSynthesizer.
      using (SpeechSynthesizer synth = new SpeechSynthesizer())
      {

        // Configure the audio output.
        synth.SetOutputToDefaultAudioDevice();

        // Create a path to the file that contains SSML.
        string weatherFile = Path.GetFullPath("c:\\test\\Weather.ssml");

        // Create an XML Reader from the file, create a PromptBuilder and
        // append the XmlReader.
        PromptBuilder builder = new PromptBuilder();

        if (File.Exists(weatherFile))
        {
          XmlReader reader = XmlReader.Create(weatherFile);
          builder.AppendSsml(reader);
          reader.Close();
        }

        // Add a handler for the SpeakProgress event.
        synth.SpeakProgress +=
          new EventHandler<SpeakProgressEventArgs>(synth_SpeakProgress);

        // Speak the prompt and play back the output file.
        synth.Speak(builder);
      }

      Console.WriteLine();
      Console.WriteLine("Press any key to exit...");
      Console.ReadKey();
    }

    // Write each word and its character position to the console.
    static void synth_SpeakProgress(object sender, SpeakProgressEventArgs e)
    {
      Console.WriteLine("Speak progress: {0} {1}",
        e.CharacterPosition, e.Text);
    }
  }
}
<!-- The following are the contents of the file Weather.ssml.
Note that because of the <p> tag and the space that follows it,
that the character position of the first word "The" will be 86. -->

<?xml version="1.0" encoding="ISO-8859-1"?>
<speak version="1.0"
 xmlns="http://www.w3.org/2001/10/synthesis"
 xml:lang="en-US">

  <p> The weather forecast for today is partly cloudy with
some sun breaks. </p>

  <break strength="medium" />

  <p> Tonight's weather will be cloudy with a 30% chance of
showers. </p>

</speak>

Комментарии

Включает CharacterPosition в себя количество символов в XML-тегах, включая их заключающие квадратные скобки. При использовании любого из AppendTextметодов , AppendTextWithAliasили AppendTextWithHintAppendSsmlMarkupAppendTextWithPronunciation методов содержимое добавляется в запрос SSML, включающий открывающие и закрывающие speak элементы. Открывающий speak элемент добавляет смещение 82 символов и пробелов во CharacterPosition все слова и буквы в запросе. Например, в следующем фрагменте кода первый слово " CharacterPosition this" имеет значение 82.

builder.AppendText("This is a test");
Synthesizer.Speak(builder);

В приведенном выше примере CharacterPosition слово "test" равно 92. В следующем фрагменте CharacterPosition слова "test" имеется 23 символа выше (115), так как открытый <тег prosody pitch="high" перед ним содержит 23 символа и пробелы (два escape-символа "\"> не учитываются).

builder.AppendSsmlMarkup("This is a <prosody pitch=\"high\"> test </prosody>.");
Synthesizer.Speak(builder);

Если вы используете AppendSsml методы для добавления содержимого в запрос, указав файл, открывающее xml объявление и speak элементы в файле не используются или не учитываются. Первый символ в файле после открытия speak тега будет находиться в позиции 82, если это первое содержимое в запросе.

Напротив, строковый параметр Speak метода не добавляется в запрос SSML, прежде чем говорить. Таким образом, CharacterPosition первое слово "это" в следующем фрагменте равно нулю.

Synthesizer.Speak("This is a test.");

Нормализует SpeechSynthesizer числа для слов, соответствующих тому, как будет говориться число. Например, синтезатор говорит число "4003" как "четыре тысячи три". Это вызывает SpeakProgress событие для каждого из трех речевых слов. CharacterPosition Однако свойство для каждого из трех слов совпадает. Это позиция перед первым символом числа "4003" в тексте запроса.

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