Sdílet prostřednictvím


SpeakProgressEventArgs.CharacterPosition Vlastnost

Definice

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

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 k pozici před prvním písmenem slova, které bylo právě mluvené.

Příklady

Následující příklad vytvoří PromptBuilder a připojí obsah SSML souboru XML pomocí XmlReader. Příklad výstupu řeči do souboru WAV pro přehrávání. Obsah souboru XML obsahujícího SSML se zobrazí pod příkladem kódu.

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 závorek. Při použití některé z AppendTextobjektů , , AppendTextWithHintAppendTextWithAlias, AppendSsmlMarkup, nebo AppendTextWithPronunciation metod, obsah se přidá do výzvy SSML, která obsahuje otevírání a zavírání speak prvků. Levý speak prvek přidá posun o 82 znaků a mezery ke CharacterPosition všem slovům a písmenům v příkazovém řádku. Například v následujícím fragmentu CharacterPosition kódu je první slovo "this" 82.

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

Ve výše uvedeném příkladu CharacterPosition je slovo "test" 92. V následujícím fragmentu CharacterPosition kódu je slovo "test" o 23 znaků vyšší (115), protože počáteční <značka prosody pitch="high"> , která předchází 23 znakům a mezerám (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, xml počáteční deklarace a speak elementy v souboru se nepoužijí ani nezapočítávají. První znak v souboru za levou speak značkou bude na pozici 82, pokud se jedná o první obsah výzvy.

Naopak řetězcový parametr Speak metody se před mluveným slovem nepřidá do výzvy SSML. CharacterPosition Proto je první slovo "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 mluveného čísla. Syntetizátor například mluví číslo "4003" jako "čtyři tisíce tří". SpeakProgress Vyvolá událost pro každou ze tří mluvených slov. CharacterPosition Vlastnost pro každé ze tří slov je však stejná. Je to pozice před prvním znakem čísla 4003 v textu výzvy.

Platí pro