SpeakProgressEventArgs.CharacterPosition 属性

定义

获取从提示开始到刚刚说出的单词的第一字母之前的位置的字符与空格数。

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

属性值

返回从提示符开始到刚刚讲出的单词的第一个字母前的字符和空格数。

示例

以下示例使用 XmlReader创建 PromptBuilder 并追加 XML 文件的 SSML 内容。 该示例将语音输出到 WAV 文件进行播放。 包含 SSML 的 XML 文件的内容显示在代码示例下方。

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>  

注解

包括 CharacterPosition XML 标记中的字符计数,包括其括起来的括号。 使用任何 AppendTextAppendTextWithAlias、、 AppendSsmlMarkupAppendTextWithHintAppendTextWithPronunciation 方法时,内容将添加到包含开始和结束speak元素的 SSML 提示符中。 开始 speak 元素将 82 个字符和空格的偏移量添加到 CharacterPosition 提示中所有单词和字母的 。 例如,在以下代码片段中, CharacterPosition 第一个单词“this”的 为 82。

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

在上面的示例中, CharacterPosition “test”一词的 为 92。 在以下代码片段 CharacterPosition 中,单词“test”的 23 个字符 (115) ,因为它前面的开始 <音调 pitch=“high”> 标记包含 23 个字符, (两个转义字符“\”的空格不计入) 。

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

如果使用 AppendSsml 方法通过指定文件将内容添加到提示中,则文件中的开始 xml 声明和 speak 元素不会被使用或计数。 如果该文件是提示中的第一个内容,则打开 speak 标记后的第一个字符将位于位置 82。

相比之下,在朗读之前,方法的 Speak 字符串参数不会添加到 SSML 提示符中。 因此, CharacterPosition 以下代码片段中第一个单词“this”的 为零。

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

SpeechSynthesizer 数字规范化为与数字的说话方式相对应的单词。 例如,合成器将数字“4003”说为“四千三”。 它为三个口语中的每一个引发一个 SpeakProgress 事件。 但是,这 CharacterPosition 三个单词中的每一个的 属性都是相同的。 它是提示文本中数字“4003”的第一个字符之前的位置。

适用于