Share via


SpeakProgressEventArgs.CharacterPosition Vlastnost

Definice

Získá počet znaků a mezer od začátku výzvy do pozice před prvním písmenem slova, které bylo právě vysloveno.

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

Hodnota vlastnosti

Vrátí počet znaků a mezer od začátku výzvy do pozice před prvním písmenem právě vysloveného slova.

Příklady

Následující příklad vytvoří PromptBuilder a připojí obsah SSML souboru XML pomocí XmlReader. Příklad vypíše řeč do souboru WAV pro přehrávání. Pod ukázkou kódu se zobrazí obsah souboru XML obsahujícího SSML.

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>  

Poznámky

Zahrnuje CharacterPosition počet znaků ve značkách XML, včetně jejich uzavřených hranatých závorek. Při použití některé z AppendTextmetod , AppendTextWithAlias, AppendTextWithHint, AppendSsmlMarkupnebo AppendTextWithPronunciation se obsah přidá do příkazového řádku SSML, který obsahuje elementy otevírání a zavírání speak . Počáteční speak prvek přidá posun 82 znaků a mezer ke CharacterPosition všem slovům a písmenům ve výzvě. Například v následujícím fragmentu kódu CharacterPosition má první slovo "this" hodnotu 82.

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

Ve výše uvedeném příkladu CharacterPosition má slovo "test" hodnotu 92. V následujícím fragmentu kódu CharacterPosition má slovo "test" o 23 znaků více (115), protože počáteční <značka prosody pitch="high"> před ní obsahuje 23 znaků a mezer (dva řídicí znaky "\" se nezapočítávají).

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

Pokud použijete AppendSsml metody pro přidání obsahu do výzvy zadáním souboru, deklarace otevření xml a speak elementy v souboru se nepoužijí ani nezapočítávají. První znak v souboru za počáteční speak značkou bude na pozici 82, pokud se jedná o první obsah výzvy.

Naproti tomu řetězcový Speak parametr metody se před vyslovením nepřidá do výzvy SSML. CharacterPosition Proto je hodnota prvního slova "this" v následujícím fragmentu kódu nula.

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

Normalizuje SpeechSynthesizer čísla na slova, která odpovídají způsobu, jakým bude číslo vysloveno. Syntetizátor například vyslovuje číslo "4003" jako "čtyři tisíce tři". SpeakProgress Vyvolá událost pro každé ze tří mluvených slov. CharacterPosition Vlastnost každého ze tří slov je ale stejná. Jedná se o pozici před prvním znakem čísla "4003" v textu výzvy.

Platí pro