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, AppendTextWithHint, AppendSsmlMarkup, или AppendTextWithPronunciation содержимое добавляется в запрос SSML, включающий открывающий и закрывающий speak
элементы. Открывающий speak
элемент добавляет смещение в 82 символа и пробелы для CharacterPosition всех слов и букв в запросе. Например, в следующем фрагменте CharacterPosition первого слова this равно 82.
builder.AppendText("This is a test");
Synthesizer.Speak(builder);
В приведенном выше примере CharacterPosition слово "test" имеет значение 92. В следующем фрагменте CharacterPosition кода слова "тест" больше на 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 первое слово "this" в следующем фрагменте кода равно нулю.
Synthesizer.Speak("This is a test.");
Нормализует SpeechSynthesizer числа для слов, соответствующих тому, как будет произносится число. Например, синтезатор произносит число "4003" как "четыре тысячи три". Он вызывает SpeakProgress событие для каждого из трех произнесенных слов. Однако CharacterPosition свойство для каждого из трех слов одинаково. Это позиция перед первым символом цифры "4003" в тексте запроса.