SpeakProgressEventArgs.CharacterPosition Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém o número de caracteres e espaços desde o início do prompt até a posição antes da primeira letra da palavra que acabou de ser falada.
public:
property int CharacterPosition { int get(); };
public int CharacterPosition { get; }
member this.CharacterPosition : int
Public ReadOnly Property CharacterPosition As Integer
Valor da propriedade
Retorna o número de caracteres e espaços do início do prompt para a posição antes da primeira letra da palavra que acabou de ser falada.
Exemplos
O exemplo a seguir cria um PromptBuilder e acrescenta o conteúdo SSML de um arquivo XML usando XmlReader. O exemplo gera fala em um arquivo WAV para reprodução. O conteúdo do arquivo XML que contém o SSML aparece abaixo do exemplo de código.
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>
Comentários
O CharacterPosition inclui a contagem de caracteres em marcas XML, incluindo seus colchetes delimitadores. Ao usar qualquer um dos AppendTextmétodos , AppendTextWithAlias, AppendTextWithHint, AppendSsmlMarkupou AppendTextWithPronunciation , o conteúdo é adicionado a um prompt SSML que inclui os elementos de abertura e fechamento speak
. O elemento de abertura speak
adiciona um deslocamento de 82 caracteres e espaços ao CharacterPosition de todas as palavras e letras no prompt. Por exemplo, no snippet a seguir, o CharacterPosition da primeira palavra, "this", é 82.
builder.AppendText("This is a test");
Synthesizer.Speak(builder);
No exemplo acima, a CharacterPosition da palavra "test" é 92. No snippet a seguir, o CharacterPosition da palavra "test" é 23 caracteres mais alto (115) porque a marca de abertura< prosody pitch="high"> que a precede contém 23 caracteres e espaços (os dois caracteres de escape "\" não são contados).
builder.AppendSsmlMarkup("This is a <prosody pitch=\"high\"> test </prosody>.");
Synthesizer.Speak(builder);
Se você usar os AppendSsml métodos para adicionar conteúdo a um prompt especificando um arquivo, a declaração de abertura xml
e speak
os elementos no arquivo não serão usados nem contados. O primeiro caractere no arquivo após a marca de abertura speak
estará na posição 82 se for o primeiro conteúdo no prompt.
Por outro lado, o parâmetro de cadeia de caracteres de um Speak método não é adicionado a um prompt SSML antes de ser falado. Portanto, o CharacterPosition da primeira palavra, "this", no snippet a seguir é zero.
Synthesizer.Speak("This is a test.");
O SpeechSynthesizer normaliza os números para as palavras que correspondem a como o número será falado. Por exemplo, o sintetizador fala o número "4003" como "quatro mil três". Ele gera um evento para cada uma SpeakProgress das três palavras faladas. No entanto, a CharacterPosition propriedade para cada uma das três palavras é a mesma. É a posição antes do primeiro caractere do número "4003" no texto do prompt.