Partilhar 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

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.

Aplica-se a