2

我在 winform 中有 100 个按钮。每个按钮执行类似的动作,即说出自己的号码。说 Button60 将语音 60,button100 将语音 100。

我使用了这些代码:

SpeechSynthesizer synthesizer = new SpeechSynthesizer();
         ...............

 private void Form1_Load(object sender, EventArgs e)
    {

        seme_comboBox.SelectedIndex = 0;
        dpt_comboBox.SelectedIndex = 0;


        foreach (var button in Controls.OfType<Button>()) 
        {
            button.Click += button_Click;
        }


    }

然后

    private void button_Click(object sender, EventArgs e)
    {
        Button button = (Button)sender;
        string text = button.Name.Substring("button".Length);

        synthesizer.Speak(text);
    }

但是,如果我依次单击两个按钮,则切换另一个按钮和语音至少需要 2 或 3 秒。而且它的声音也不够响亮。所以我需要在很短的时间内增加按钮动作的性能。而且我还想增加语音的声音。我怎样才能做到这一点???

4

1 回答 1

2

听起来 SpeechSynthesizer 正在阻塞 UI 线程。

您可以尝试以下操作,使用 SpeakAsync() 代替(来自http://msdn.microsoft.com/en-us/library/system.speech.synthesis.speechsynthesizer.speakasync.aspx

请注意,您可能想要也可能不想要取消所有的行(注释):

private void button_Click(object sender, EventArgs e)
{
    Button button = (Button)sender;
    string text = button.Name.Substring("button".Length);
    synthesizer.SpeakAsyncCancelAll(); // cancel anything that's playing
    synthesizer.SpeakAsync(text);
}

如果失败了,您可能会在另一个线程中运行合成器。

您可以使用 .Volume 属性控制音量:

synthesizer.Volume = 100; // maximum volume (range 0-100)
于 2013-09-16T14:50:34.820 回答