Compartilhar via


SpeakProgressEventArgs.CharacterPosition Propriedade

Definição

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

Inclui CharacterPosition a contagem de caracteres em marcas XML, incluindo seus colchetes delimitadores. Ao usar qualquer um dos AppendTextmétodos, ou AppendTextWithAliasAppendSsmlMarkupAppendTextWithHintAppendTextWithPronunciation métodos, 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, a CharacterPosition primeira palavra, "this", é 82.

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

No exemplo acima, a CharacterPosition palavra "test" é 92. No snippet a seguir, a CharacterPosition palavra "test" é 23 caracteres maior (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 ou 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, a CharacterPosition primeira palavra, "this", no snippet a seguir é zero.

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

Os SpeechSynthesizer números normalizam as palavras que correspondem à forma como o número será falado. Por exemplo, o sintetizador fala o número "4003" como "quatro mil três". Ele levanta um evento para cada uma SpeakProgress das três palavras faladas. No entanto, a CharacterPosition propriedade de cada uma das três palavras é a mesma. É a posição antes do primeiro caractere do número "4003" no texto do prompt.

Aplica-se a