It sounds like the SpeechSynthesizer is blocking the UI thread.
You could try the following, using SpeakAsync() instead (from http://msdn.microsoft.com/en-us/library/system.speech.synthesis.speechsynthesizer.speakasync.aspx)
Note you may or may not want the line that cancels all (commented):
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);
}
Failing that you could probably run the sythesizer in another thread.
You can control the sound volume with the .Volume property:
synthesizer.Volume = 100; // maximum volume (range 0-100)