I used to have a very thick tome titled "MAPI, TAPI, SAPI" or some reordering of those acronyms. I recall that SAPI was a bit of a chore to use to get voice synthesis going.
Well, I've been messing with .NET 3.5, and found a .NET 3.0 "System.Speech" namespace after looking at SAPI to read the timestamp on voice mail messages. It's a nice managed equivalent of SAPI. So, what does it take to get your computer to speak? Not much, once you add a reference to System.Speech:
using System.Speech.Synthesis;
...
SpeechSynthesizer synth = new SpeechSynthesizer();
synth.Speak("Today is " + DateTime.Now.ToLongDateString());
That's it. No painful initialization code. No callbacks (unless you want), just a single function call.
The voice that comes with Vista is much nicer than the ones you have available from XP, but it's still workable. Like most examples, this is just the tip of the iceburg. You can do a lot from here.
Enjoy!
(PS, for some other good voices, check out this page. The "David" voice is about as clear as I have heard anywhere.)