如何将进度条连接到语音合成器?
本文关键字:语音 语音合成 合成器 连接 | 更新日期: 2023-09-27 18:11:27
我想在我的应用程序中连接一个进度条到我的语音合成器(以显示通过它读取文本的距离)。
我的语音合成器代码的主要组件如下: 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;
}
}
我想将此代码连接到进度条,以便它显示语音合成器的当前状态(并在用户暂停/停止进度条时暂停/停止)。这可能吗?我从来没有正确地使用过进度条,所以我需要一些帮助。
谢谢。
处理你的语音合成器对象的SpeakProgress事件。
reader.SpeakProgress += reader_SpeakProgress;
speakprogressevenargs传递足够的信息,以便在说出每个单词后更新进度条。
private void reader_SpeakProgress(Object sender, SpeakProgressEventArgs e)
{
ProgressBar.Value = (Int32)((e.CharacterPosition + e.CharacterCount - 82F) / richTextBoxPrintCtrl1.Text.Length * 100);
}
"- 82F"偏移量在以下微软speakprogressevenargs的摘录中解释。CharacterPosition属性文档:
CharacterPosition包含XML标记中的字符计数,包括它们的右括号。当使用AppendText、AppendTextWithAlias、AppendTextWithHint、AppendSsmlMarkup或AppendTextWithPronunciation方法中的任何一种方法时,内容被添加到包含开始和结束speak元素的SSML提示符中。开始的speak元素在提示符中所有单词和字母的CharacterPosition中添加82个字符和空格的偏移量…