Compartir a través de


SpeakProgressEventArgs.CharacterPosition Propiedad

Definición

Obtiene el número de caracteres y espacios desde el inicio del indicador hasta la posición delante de la primera letra de la palabra que acaba de pronunciarse.

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

Valor de propiedad

Devuelve el número de caracteres y espacios desde el inicio del mensaje hasta la posición anterior a la primera letra de la palabra que acaba de pronunciarse.

Ejemplos

En el ejemplo siguiente se crea y PromptBuilder se anexa el contenido de SSML de un archivo XML mediante XmlReader. En el ejemplo se genera la voz en un archivo WAV para su reproducción. El contenido del archivo XML que contiene el SSML aparece debajo del ejemplo 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>  

Comentarios

CharacterPosition incluye el recuento de caracteres en etiquetas XML, incluidos sus corchetes envolventes. Cuando se usa cualquiera de los AppendTextmétodos , AppendTextWithAlias, AppendTextWithHint, AppendSsmlMarkup, o AppendTextWithPronunciation , el contenido se agrega a un símbolo del sistema SSML que incluye los elementos de apertura y cierre speak . El elemento de apertura speak agrega un desplazamiento de 82 caracteres y espacios al CharacterPosition de todas las palabras y letras del símbolo del sistema. Por ejemplo, en el fragmento de código siguiente, el CharacterPosition de la primera palabra, "this", es 82.

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

En el ejemplo anterior, el CharacterPosition de la palabra "test" es 92. En el fragmento de código siguiente, CharacterPosition la palabra "test" tiene 23 caracteres más altos (115) porque la etiqueta de apertura< prosody pitch="high"> que precede a contiene 23 caracteres y espacios (los dos caracteres de escape "\" no se cuentan).

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

Si usa los AppendSsml métodos para agregar contenido a un símbolo del sistema especificando un archivo, la declaración de apertura xml y speak los elementos del archivo no se usan ni se cuentan. El primer carácter del archivo después de la etiqueta de apertura speak estará en la posición 82 si es el primer contenido del símbolo del sistema.

Por el contrario, el parámetro de cadena de un Speak método no se agrega a un símbolo del sistema SSML antes de hablarse. Por lo tanto, el CharacterPosition de la primera palabra, "this", en el fragmento de código siguiente es cero.

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

Normaliza SpeechSynthesizer los números de las palabras que corresponden a cómo se dirá el número. Por ejemplo, el sintetizador habla el número "4003" como "cuatro mil tres". Genera un SpeakProgress evento para cada una de las tres palabras habladas. Sin embargo, la CharacterPosition propiedad de cada una de las tres palabras es la misma. Es la posición anterior al primer carácter del número "4003" en el texto del símbolo del sistema.

Se aplica a