Share via


SpeakProgressEventArgs.CharacterPosition Eigenschaft

Definition

Ruft die Anzahl von Zeichen und Leerzeichen vom Beginn der Eingabeaufforderung zur Position vor dem ersten Buchstaben des Worts ab, das gerade gesprochen wurde.

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

Eigenschaftswert

Gibt die Anzahl von Zeichen und Leerzeichen vom Beginn der Eingabeaufforderung zur Position vor dem Buchstaben des Worts zurück, das gerade gesprochen wurde.

Beispiele

Im folgenden Beispiel wird ein PromptBuilder erstellt und der SSML-Inhalt einer XML-Datei mit XmlReaderangefügt. Im Beispiel wird die Sprache zur Wiedergabe in eine WAV-Datei ausgegeben. Der Inhalt der XML-Datei, die den SSML enthält, wird unter dem Codebeispiel angezeigt.

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>  

Hinweise

Enthält CharacterPosition die Anzahl von Zeichen in XML-Tags, einschließlich der eingeschlossenen Klammern. Wenn Sie eine der AppendTextMethoden , AppendTextWithAlias, , AppendSsmlMarkupAppendTextWithHintoder AppendTextWithPronunciation verwenden, werden die Inhalte einer SSML-Eingabeaufforderung hinzugefügt, die die öffnenden und schließenden speak Elemente enthält. Das öffnende speak Element fügt dem der Wörter und Buchstaben in der CharacterPosition Eingabeaufforderung einen Offset von 82 Zeichen und Leerzeichen hinzu. Im folgenden Codeausschnitt ist beispielsweise das CharacterPosition des ersten Worts , "this", 82.

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

Im obigen Beispiel ist das CharacterPosition wort "test" 92. Im folgenden Codeausschnitt ist der CharacterPosition des Worts "test" 23 Zeichen höher (115), da das vor ihm stehende öffnende <Prosodie-Tag pitch="high"> 23 Zeichen und Leerzeichen enthält (die beiden Escapezeichen "\" werden nicht gezählt).

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

Wenn Sie die AppendSsml Methoden zum Hinzufügen von Inhalten zu einer Eingabeaufforderung verwenden, indem Sie eine Datei angeben, werden die öffnende xml Deklaration und speak die Elemente in der Datei nicht verwendet oder gezählt. Das erste Zeichen in der Datei nach dem öffnenden speak Tag befindet sich an Position 82, wenn es sich um den ersten Inhalt in der Eingabeaufforderung handelt.

Im Gegensatz dazu wird der Zeichenfolgenparameter einer Speak Methode keiner SSML-Eingabeaufforderung hinzugefügt, bevor er gesprochen wird. Daher ist das CharacterPosition des ersten Worts , "this", im folgenden Codeausschnitt 0.

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

Die SpeechSynthesizer normalisiert Zahlen zu den Wörtern, die dem Sprechen der Zahl entsprechen. Der Synthesizer spricht beispielsweise die Zahl "4003" als "viertausend dreitausend". Es löst ein SpeakProgress Ereignis für jedes der drei gesprochenen Wörter aus. Die CharacterPosition Eigenschaft für jedes der drei Wörter ist jedoch identisch. Es ist die Position vor dem ersten Zeichen der Zahl "4003" im Text der Eingabeaufforderung.

Gilt für: