SpeakProgressEventArgs.CharacterPosition Właściwość
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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ść właściwoś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.