2013-09-16 42 views
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個幾秒鐘切換另一個按鈕並轉換爲語音。 而且它的聲音不夠大聲。 所以我需要在很短的時間內提高按鈕動作的性能。而且我想增加演講的聲音。 我該怎麼做?

回答

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); 
} 

失敗,你可以可能在另一個線程中運行sythesizer。

您可以控制音量與.Volume屬性:

synthesizer.Volume = 100; // maximum volume (range 0-100)