[Aditya] had a project that called for spoken output. He admits that he could have built a PC-based solution, but he found that adding speech by using a microcontroller was not only a cheap and portable alternative, it was also a fun and easy build.
His design uses an ATMega128. Many microcontrollers would work, but his major requirements were PWM generation and plenty of memory to store the file(s). The output is cleaned up in a simple low pass filter before going to the 8Ω speaker.
[Aditya] lays his tracks in WAV format and then compresses it to 8-bit/8kHz. He found a C++ function that converts the track data into a huge arrays and then digitizes it. He uses two timers, one to generate the waveform and second one to time the square wave. [Aditya] has a zip of samples available on his site that will speak the digits 0-9.