SpeakProgressEventArgs.CharacterPosition Egenskap

Definition

Hämtar antalet tecken och blanksteg från början av prompten till positionen före den första bokstaven i ordet som just talades.

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

Egenskapsvärde

Returnerar antalet tecken och blanksteg från början av prompten till positionen före den första bokstaven i ordet som just talades.

Exempel

I följande exempel skapas en PromptBuilder och läggs till SSML-innehållet i en XML-fil med hjälp av XmlReader. Exemplet matar ut tal till en WAV-fil för uppspelning. Innehållet i XML-filen som innehåller SSML visas under kodexemplet.

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>

Kommentarer

CharacterPosition Innehåller antalet tecken i XML-taggar, inklusive deras omslutande hakparenteser. När du använder någon av AppendTextmetoderna , AppendTextWithAlias, AppendTextWithHint, AppendSsmlMarkupeller AppendTextWithPronunciation läggs innehållet till i en SSML-prompt som innehåller de inledande och avslutande speak elementen. speak Öppningselementet lägger till en förskjutning på 82 tecken och blanksteg till CharacterPosition alla ord och bokstäver i prompten. I följande kodfragment CharacterPosition är till exempel det första ordet , "this", 82.

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

I exemplet ovan CharacterPosition är ordet "test" 92. I följande kodfragment CharacterPosition är ordet "test" 23 tecken högre (115) eftersom den inledande <prosody pitch="high"> -taggen som föregår den innehåller 23 tecken och blanksteg (de två escape-tecknen "\" räknas inte).

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

Om du använder AppendSsml metoderna för att lägga till innehåll i en fråga genom att ange en fil, används eller räknas inte öppningsdeklarationen xml och speak elementen i filen. Det första tecknet i filen efter den inledande speak taggen kommer att vara på plats 82 om det är det första innehållet i prompten.

Däremot läggs inte strängparametern för en Speak metod till i en SSML-prompt innan den talas. CharacterPosition Därför är det första ordet "this" i följande kodfragment noll.

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

Normaliserar SpeechSynthesizer talen till de ord som motsvarar hur talet ska talas. Syntetiserar till exempel talet "4003" som "fyratusen tre". Det skapar en händelse för vart och ett SpeakProgress av de tre talade orden. Egenskapen för vart och ett av de tre orden är dock CharacterPosition densamma. Det är positionen före det första tecknet i talet "4003" i texten i prompten.

Gäller för