다음을 통해 공유


SpeakProgressEventArgs.CharacterPosition 속성

정의

프롬프트의 처음부터 방금 읽은 단어의 첫 번째 문자 바로 앞의 위치까지 문자 및 공백의 수를 가져옵니다.

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

속성 값

프롬프트의 처음부터 방금 읽은 단어의 첫 번째 문자 바로 앞의 위치까지 문자와 공백의 수를 반환합니다.

예제

다음 예제에서는 를 PromptBuilder 만들고 를 사용하여 XmlReaderXML 파일의 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 태그의 문자 수가 포함됩니다. , , , AppendTextWithHint또는 메서드를 AppendText사용하는 경우 열기 및 닫는 speak 요소가 포함된 SSML 프롬프트에 내용이 추가됩니다.AppendTextWithPronunciationAppendSsmlMarkupAppendTextWithAliasspeak 는 요소는 프롬프트에 있는 모든 단어와 문자의 에 82자 및 공백 CharacterPosition 의 오프셋을 추가합니다. 예를 들어 다음 코드 조각 CharacterPosition 에서 첫 번째 단어 "this"의 는 82입니다.

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

위의 예제 CharacterPosition 에서 "test"라는 단어의 은 92입니다. 다음 코드 조각 CharacterPosition 에서는 앞에 오는 prosody< pitch="high" 태그에 23자 및 공백이 포함되기 때문에 "test">라는 단어의 가 23자 더 높음(115)입니다(두 개의 이스케이프 문자 "\"는 계산되지 않음).

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

메서드를 AppendSsml 사용하여 파일을 지정하여 프롬프트에 콘텐츠를 추가하는 경우 파일의 여 xml 는 선언과 speak 요소가 사용되거나 계산되지 않습니다. 프롬프트의 첫 번째 콘텐츠인 경우 여 speak 는 태그 뒤에 있는 파일의 첫 번째 문자는 82 위치에 있습니다.

반면 메서드의 Speak 문자열 매개 변수는 말하기 전에 SSML 프롬프트에 추가되지 않습니다. 따라서 CharacterPosition 다음 코드 조각에서 첫 번째 단어 "this"의 는 0입니다.

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

SpeechSynthesizer 숫자를 말하는 방법에 해당하는 단어로 정규화합니다. 예를 들어 신시사이저는 숫자 "4003"을 "4,003"으로 말합니다. 세 단어 각각에 대한 이벤트를 발생합니다 SpeakProgress . 그러나 CharacterPosition 세 단어 각각에 대한 속성은 동일합니다. 프롬프트 텍스트에서 숫자 "4003"의 첫 번째 문자 앞에 있는 위치입니다.

적용 대상