Bagikan melalui


SpeakProgressEventArgs.CharacterPosition Properti

Definisi

Mendapatkan jumlah karakter dan spasi dari awal perintah ke posisi sebelum huruf pertama kata yang baru saja diucapkan.

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

Nilai Properti

Mengembalikan jumlah karakter dan spasi dari awal perintah ke posisi sebelum huruf pertama kata yang baru saja diucapkan.

Contoh

Contoh berikut membuat PromptBuilder dan menambahkan konten SSML dari file XML menggunakan XmlReader. Contoh menghasilkan ucapan ke file WAV untuk pemutaran. Konten file XML yang berisi SSML muncul di bawah contoh kode.

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>  

Keterangan

CharacterPosition menyertakan hitungan untuk karakter dalam tag XML, termasuk tanda kurung tutupnya. Saat menggunakan salah AppendTextsatu metode , AppendTextWithAlias, AppendTextWithHint, AppendSsmlMarkup, atau AppendTextWithPronunciation , konten ditambahkan ke prompt SSML yang menyertakan elemen pembuka dan penutup speak . Elemen pembuka speak menambahkan offset 82 karakter dan spasi ke CharacterPosition dari semua kata dan huruf dalam prompt. Misalnya, dalam cuplikan berikut, CharacterPosition dari kata pertama, "ini", adalah 82.

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

Dalam contoh CharacterPosition di atas kata "uji" adalah 92. Dalam cuplikan CharacterPosition berikut, kata "test" adalah 23 karakter lebih tinggi (115) karena tag opening< prosody pitch="high"> yang mendahuluinya berisi 23 karakter dan spasi (dua karakter escape "\" tidak dihitung).

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

Jika Anda menggunakan AppendSsml metode untuk menambahkan konten ke perintah dengan menentukan file, deklarasi pembukaan xml dan speak elemen dalam file tidak digunakan atau dihitung. Karakter pertama dalam file setelah tag pembukaan speak akan berada di posisi 82 jika itu adalah konten pertama dalam perintah.

Sebaliknya, parameter Speak string metode tidak ditambahkan ke prompt SSML sebelum diucapkan. Oleh karena itu, CharacterPosition dari kata pertama, "ini", dalam cuplikan berikut adalah nol.

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

menormalkan SpeechSynthesizer angka ke kata-kata yang sesuai dengan bagaimana angka akan diucapkan. Misalnya, synthesizer berbicara angka "4003" sebagai "empat ribu tiga". Ini menimbulkan SpeakProgress peristiwa untuk masing-masing dari tiga kata yang diucapkan. Namun, CharacterPosition properti untuk masing-masing dari tiga kata tersebut sama. Ini adalah posisi sebelum karakter pertama dari angka "4003" dalam teks perintah.

Berlaku untuk