Aracılığıyla paylaş


SpeakProgressEventArgs.CharacterPosition Özellik

Tanım

İstemin başından, sözcüğün ilk harfinden önceki konuma kadar olan karakter ve boşluk sayısını alır.

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

Özellik Değeri

İstemin başından, sözcüğün ilk harfinden önceki konuma kadar olan karakter ve boşluk sayısını döndürür.

Örnekler

Aşağıdaki örnek bir PromptBuilder oluşturur ve kullanarak XmlReaderbir XML dosyasının SSML içeriğini ekler. Örnek, kayıttan yürütme için wav dosyasına konuşma çıkışı sağlar. SSML içeren XML dosyasının içeriği kod örneğinin altında görünür.

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>  

Açıklamalar

, CharacterPosition XML etiketlerindeki karakterlerin sayısını ve bunların köşeli ayraçlarını içerir. , , , veya AppendSsmlMarkupyöntemlerinden herhangi birini AppendTextkullanırken, içindekiler açma ve kapatma speak öğelerini içeren bir SSML istemine eklenir.AppendTextWithPronunciationAppendTextWithHintAppendTextWithAlias Açılış speak öğesi, istemdeki CharacterPosition tüm sözcük ve harflerin değerine 82 karakterlik bir uzaklık ve boşluk ekler. Örneğin, aşağıdaki kod parçacığında ilk sözcüğün CharacterPosition "bu" sözcüğü 82'dir.

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

Yukarıdaki örnekte CharacterPosition "test" sözcüğü 92'dir. Aşağıdaki kod CharacterPosition parçacığında, önündeki açılış <prosody pitch="high" etiketi 23 karakter ve boşluk içerdiğinden "test"> sözcüğünün sözcüğü 23 karakter daha yüksektir (115).

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

Bir dosya belirterek istemine içerik eklemek için yöntemlerini kullanırsanız AppendSsml , açma xml bildirimi ve speak dosyadaki öğeler kullanılmaz veya sayılmaz. Açma speak etiketinden sonraki dosyadaki ilk karakter, istemdeki ilk içerikse 82 konumunda olacaktır.

Buna karşılık, bir Speak yöntemin dize parametresi, konuşulmadan önce SSML istemine eklenmez. Bu nedenle, CharacterPosition aşağıdaki kod parçacığındaki ilk sözcüğün "this" değeri sıfırdır.

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

, SpeechSynthesizer sayıları, sayının nasıl konuşulacağını belirten sözcüklerle normalleştirir. Örneğin, sentezleyici "4003" sayısını "dört bin üç" olarak söyler. Bu, söylenen üç sözcüğün her biri için bir SpeakProgress olay oluşturur. Ancak, CharacterPosition üç sözcüğün her birinin özelliği aynıdır. bu, istem metnindeki "4003" sayısının ilk karakterinden önceki konumdur.

Şunlara uygulanır