2013-04-29 3 views
0

내 응용 프로그램 내에서 진행률 표시 줄을 내 음성 합성기에 연결하여 텍스트 읽기 속도를 표시하고 싶습니다. 진행률 표시 줄을 내 음성 합성기에 연결하려면 어떻게합니까?

다음과 같이 내 SpeechSynthesizer 코드에 대한 주요 구성 요소는 다음과 같습니다가 음성 합성기의 현재 상태를 표시합니다 (그리고 있도록

private void button1_Click(object sender, EventArgs e)//Start button 
     { 
      reader.Dispose(); 
      if (Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text != "") 
      { 
       reader = new SpeechSynthesizer(); 
       reader.SpeakAsync(Basic_Word_Processor.Instance.richTextBoxPrintCtrl1.Text); 
       button2.Enabled = true; 
       button4.Enabled = true; 
       reader.SpeakCompleted += new EventHandler<SpeakCompletedEventArgs>(reader_SpeakCompleted); 
      } 
      else 
      { 
       MessageBox.Show("Please insert text before launching Text to Speech.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 

private void button2_Click(object sender, EventArgs e)//Pause button 
     { 
      if (reader != null) 
      { 
       if (reader.State == SynthesizerState.Speaking) 
       { 
        reader.Pause(); 
        button3.Enabled = true; 
       } 
      } 

private void button3_Click(object sender, EventArgs e)//Resume button 
     { 
      if (reader != null) 
      { 
       if (reader.State == SynthesizerState.Paused) 
       { 
        reader.Resume(); 
       } 
       button3.Enabled = false; 
      } 
      } 


     private void button4_Click(object sender, EventArgs e)//Stop button 
     { 
      if (reader != null) 
      { 
       reader.Dispose(); 
       button2.Enabled = false; 
       button3.Enabled = false; 
       button4.Enabled = false; 
      } 
     } 

내가 진행률 표시 줄까지이 코드를 연결하고자하는 일시 중지/사용자의 일시 정지가/진행률 표시 줄을 중지 할 때 중지합니다.이 가능합니까? 내가 제대로 진행 표시 줄을 사용한 적이, 그래서 내가 이렇게하는 방법에 대한 몇 가지 도움말을하고 싶습니다.

감사합니다.

+0

실제로 감지 할 수있는 항목에 대해서만 "실제"진행 표시 줄을 표시 할 수 있습니다 진행. 'reader.SpeakAsync()'는 그 중 하나가 아닙니다. 주어진 길이의 텍스트가이를 기반으로 읽기 및 진행에 소요되는 시간을 추정하여 "가짜"진행률 표시 줄을 만들 수 있습니다. 그것들은 계속해서 바를 반복해서 채우는 설치자가 목격 한 것처럼 훨씬 더 일반적입니다 ... – Bobson

+0

문제는 텍스트 길이가 다양하다는 것입니다. 텍스트 편집기이기 때문입니다. – Toby

+0

독서로 반환 될 것으로 예상 할 수있는 무언가가 필요합니다. 그럴 필요가없는 것 같습니다. – Jonesopolis

답변

0

를 처리 SpeechSynthesizer 개체의 SpeakProgress 이벤트 .

reader.SpeakProgress += reader_SpeakProgress; 

SpeakProgressEventArgs는 각 단어를 사용한 후 진행률 막대를 업데이트하기에 충분한 정보를 전달합니다.

private void reader_SpeakProgress(Object sender, SpeakProgressEventArgs e) 
{ 
    ProgressBar.Value = (Int32)((e.CharacterPosition + e.CharacterCount - 82F)/richTextBoxPrintCtrl1.Text.Length * 100); 
} 

은 " - 82F은"마이크로 소프트의 SpeakProgressEventArgs.CharacterPosition Property 문서에서 다음 발췌 설명 오프셋 :

CharacterPosition는 둘러싸는 괄호를 포함하는 XML 태그의 문자의 수를 포함한다. AppendText, AppendTextWithAlias, AppendTextWithHint, AppendSsmlMarkup 또는 AppendTextWithPronunciation 메서드 중 하나를 사용하면 내용이 시작 및 종료 speak 요소를 포함하는 SSML 프롬프트에 추가됩니다. opening speak 요소는 프롬프트에있는 모든 단어와 문자의 CharacterPosition에 82 자의 공백과 공백을 추가합니다.