【发布时间】:2013-04-29 17:33:24
【问题描述】:
我想在我的应用程序中将进度条连接到我的语音合成器(以显示它阅读文本的程度)。
我的 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;
}
}
我想将此代码连接到进度条,以便它显示语音合成器的当前状态(并在用户暂停/停止进度条时暂停/停止。这可能吗?我从未使用过进度条正确,所以我想要一些关于如何做到这一点的帮助。
谢谢。
【问题讨论】:
-
您只能为可以实际检测到进度的事物显示“真实”进度条。
reader.SpeakAsync()不是其中之一。您可以通过估计给定长度的文本需要多长时间才能阅读和基于此进度来创建“假”进度条。这些更为常见,正如安装人员一次又一次地填补他们的酒吧所见证的那样...... -
问题是文本长度不同,因为它是一个文本编辑器。
-
你需要一些你可以计数的东西在阅读时被退回,但事实似乎并非如此
-
那么是不是不可能做到这一点呢?
-
我会创建一个计时器。假设你读了 200 个单词,估计每个单词是 1 秒。创建一个每 2 秒计时一次的计时器,将进度条增加 1%。或类似的东西。
标签: c# .net-4.0 progress-bar progress speechsynthesizer