SpeakProgressEventArgs.CharacterPosition Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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.