SpeakProgressEventArgs.CharacterPosition Własność
Definicja
Ważny
Niektóre informacje dotyczą produktów przedpremierowych, które mogą zostać znacznie zmodyfikowane przed premierą. Microsoft nie udziela żadnych gwarancji, ani wyraźnych, ani domniemanych, dotyczących informacji podanych tutaj.
Pobiera liczbę znaków i spacji od początku monitu do pozycji przed pierwszą literą słowa, który właśnie został wymawiany.
public:
property int CharacterPosition { int get(); };
public int CharacterPosition { get; }
member this.CharacterPosition : int
Public ReadOnly Property CharacterPosition As Integer
Wartość nieruchomości
Zwraca liczbę znaków i spacji od początku monitu do pozycji przed pierwszą literą słowa, która została właśnie wypowiedzona.
Przykłady
Poniższy przykład tworzy obiekt PromptBuilder i dołącza zawartość SSML pliku XML przy użyciu polecenia XmlReader. Przykład zwraca mowę do pliku WAV w celu odtwarzania. Zawartość pliku XML zawierającego kod SSML jest wyświetlana poniżej przykładu kodu.
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>
Uwagi
Element CharacterPosition zawiera liczbę znaków w tagach XML, w tym ich nawiasy otaczające. W przypadku korzystania z dowolnej z AppendTextmetod , AppendTextWithAlias, AppendTextWithHint, AppendSsmlMarkuplub AppendTextWithPronunciation zawartość jest dodawana do wiersza polecenia SSML, który zawiera elementy otwierające i zamykające speak . Element otwierający speak dodaje przesunięcie 82 znaków i spacji do CharacterPosition wszystkich wyrazów i liter w wierszu polecenia. Na przykład w poniższym fragmencie kodu CharacterPosition pierwszy wyraz "this" ma wartość 82.
builder.AppendText("This is a test");
Synthesizer.Speak(builder);
W powyższym przykładzie wyraz CharacterPosition "test" wynosi 92. W poniższym fragmencie kodu CharacterPosition słowo "test" ma 23 znaki wyższe (115), ponieważ otwierający< prosody pitch="high" tag poprzedzający zawiera 23 znaki i spacje (dwa znaki ucieczki "\"> nie są liczone).
builder.AppendSsmlMarkup("This is a <prosody pitch=\"high\"> test </prosody>.");
Synthesizer.Speak(builder);
Jeśli używasz metod dodawania AppendSsml zawartości do monitu przez określenie pliku, deklaracja otwierająca xml i speak elementy w pliku nie są używane ani zliczane. Pierwszy znak w pliku po tagu otwierania speak będzie na pozycji 82, jeśli jest to pierwsza zawartość w wierszu polecenia.
Natomiast parametr Speak ciągu metody nie jest dodawany do wiersza polecenia SSML przed mówieniem. W związku z tym pierwszy CharacterPosition wyraz "this" w poniższym fragmencie kodu ma wartość zero.
Synthesizer.Speak("This is a test.");
Funkcja SpeechSynthesizer normalizuje liczby do słów, które odpowiadają sposobie wypowiadania liczby. Na przykład syntetyzator mówi liczbę "4003" jako "cztery tysiące trzech". Wywołuje zdarzenie SpeakProgress dla każdego z trzech mówionych słów. Jednak CharacterPosition właściwość dla każdego z trzech wyrazów jest taka sama. Jest to pozycja przed pierwszym znakiem numeru "4003" w tekście monitu.