Last week I finished a reference implimentation of Zaza's new face/voice server in Perl. I debated using either Perl or Java for the server-side components as each has aspects that could be of some use. I finally settled on Perl because it would take less time to put something together that would be stable.
The 'faceServer' application is designed to be scalable to the available computing resources both onboard and offboard the robot. It connects to a Festival server by use of the Festival::Client::Async module. Since Festival's rendering of speech can be rather slow, the Festival server can be located on a higher-speed offboard computer. Speech 'cues' are cached on the local file system for better performance with pre-rendered cues. The Java face applet is notified when new cues have been sent to the server by use of cue ID numbers (10-digit CRC32s of the cue string). The client downloads the waveform and 'script' data and begins playback as soon as it has both files. Since the filenames of each cue are unique, they are cached by the applet so no download is required if the cue has already been 'performed' by the applet.
I still need to spend some time with the applet, but expect to have it operational by Friday afternoon.
As always, the project code can be found here.