Share via


SpeakProgressEventArgs.CharacterPosition Propriété

Définition

Obtient le nombre de caractères et d'espaces à partir du début de l'invite jusqu'à la position précédant la première lettre du mot qui vient d'être énoncé.

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

Valeur de propriété

Retourne le nombre de caractères et d'espaces à partir du début de l'invite jusqu'à la position précédant la première lettre du mot qui vient d'être énoncé.

Exemples

L’exemple suivant crée un PromptBuilder et ajoute le contenu SSML d’un fichier XML à l’aide XmlReaderde . L’exemple génère la voix dans un fichier WAV à des fins de lecture. Le contenu du fichier XML contenant le SSML apparaît sous l’exemple de code.

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>  

Remarques

le CharacterPosition inclut le nombre de caractères dans les balises XML, y compris leurs crochets englobants. Lorsque vous utilisez l’une AppendTextdes méthodes , AppendTextWithAlias, AppendTextWithHint, AppendSsmlMarkupou AppendTextWithPronunciation , le contenu est ajouté à une invite SSML qui inclut les éléments d’ouverture et de fermeture speak . L’élément d’ouverture speak ajoute un décalage de 82 caractères et espaces au CharacterPosition de tous les mots et lettres de l’invite. Par exemple, dans l’extrait de code suivant, le CharacterPosition du premier mot, « this », est 82.

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

Dans l’exemple ci-dessus, le CharacterPosition du mot « test » est 92. Dans l’extrait de code suivant, le CharacterPosition mot « test » est supérieur de 23 caractères (115), car la balise prosodie pitch="high »> ouvrante< qui précède contient 23 caractères et espaces (les deux caractères d’échappement « \ » ne sont pas comptés).

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

Si vous utilisez les méthodes pour ajouter du AppendSsml contenu à une invite en spécifiant un fichier, la déclaration d’ouverture xml et speak les éléments du fichier ne sont pas utilisés ou comptés. Le premier caractère du fichier après la balise d’ouverture speak se trouve à la position 82 s’il s’agit du premier contenu de l’invite.

En revanche, le paramètre de chaîne d’une Speak méthode n’est pas ajouté à une invite SSML avant d’être prononcé. Par conséquent, le CharacterPosition du premier mot, « this », dans l’extrait de code suivant est égal à zéro.

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

normalise SpeechSynthesizer les nombres aux mots qui correspondent à la façon dont le nombre sera prononcé. Par exemple, le synthétiseur parle le nombre « 4003 » comme « quatre mille trois ». Il déclenche un SpeakProgress événement pour chacun des trois mots prononcés. Toutefois, la CharacterPosition propriété pour chacun des trois mots est la même. Il s’agit de la position avant le premier caractère du nombre « 4003 » dans le texte de l’invite.

S’applique à