Udostępnij za pośrednictwem


SpeakProgressEventArgs.CharacterPosition Właściwość

Definicja

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.

Dotyczy