SpeakProgressEventArgs.CharacterPosition Eigenschap

Definitie

Hiermee wordt het aantal tekens en spaties opgehaald vanaf het begin van de prompt naar de positie vóór de eerste letter van het woord dat zojuist is gesproken.

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

Waarde van eigenschap

Retourneert het aantal tekens en spaties vanaf het begin van de prompt naar de positie vóór de eerste letter van het woord dat zojuist is gesproken.

Voorbeelden

In het volgende voorbeeld wordt een PromptBuilder SSML-inhoud van een XML-bestand gemaakt en toegevoegd met behulp van XmlReader. In het voorbeeld wordt spraak naar een WAV-bestand uitgevoerd om af te spelen. De inhoud van het XML-bestand met de SSML wordt weergegeven onder het codevoorbeeld.

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>

Opmerkingen

Het CharacterPosition bevat het aantal tekens in XML-tags, inclusief de bijbehorende vierkante haken. Wanneer u een van de AppendText, AppendTextWithAlias, of AppendSsmlMarkupAppendTextWithHintAppendTextWithPronunciation methoden gebruikt, wordt de inhoud toegevoegd aan een SSML-prompt die de elementen voor openen en sluiten speak bevat. Het openingselement speak voegt een verschuiving van 82 tekens en spaties toe aan de CharacterPosition woorden en letters in de prompt. In het volgende codefragment is het CharacterPosition eerste woord bijvoorbeeld 'dit', 82.

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

In het bovenstaande voorbeeld is het CharacterPosition woord 'test' 92. In het volgende fragment is het CharacterPosition woord 'test' 23 tekens hoger (115), omdat de tag voor het openen <van prosody pitch="high"> 23 tekens en spaties bevat (de twee escapetekens '\' worden niet geteld).

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

Als u de AppendSsml methoden gebruikt om inhoud toe te voegen aan een prompt door een bestand op te geven, worden de openingsdeclaratie xml en speak elementen in het bestand niet gebruikt of geteld. Het eerste teken in het bestand na het openen speak van de tag bevindt zich op positie 82 als dit de eerste inhoud in de prompt is.

De tekenreeksparameter van een Speak methode wordt daarentegen niet toegevoegd aan een SSML-prompt voordat deze wordt gesproken. Daarom is het CharacterPosition eerste woord, 'dit', in het volgende codefragment nul.

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

De SpeechSynthesizer getallen worden genormaliseerd voor de woorden die overeenkomen met de wijze waarop het getal wordt gesproken. De synthesizer spreekt bijvoorbeeld het nummer '4003' als 'vierduizend drie'. Het genereert een SpeakProgress gebeurtenis voor elk van de drie gesproken woorden. De CharacterPosition eigenschap voor elk van de drie woorden is echter hetzelfde. Dit is de positie vóór het eerste teken van het getal '4003' in de tekst van de prompt.

Van toepassing op