OK, some fast replies.
Here's a code snippet (simple, no error checking, just to show the syntax):
// this is the auto-generated stub by DCEGen
void Text_To_Speech::CMD_Send_Audio_To_Device(string sText,string sPK_Device_List,string &sCMD_Result,Message *pMessage)
{
// Create the wav file
system( ("text2wave " + sText + " > /tmp/wave").c_str() );
// Use our FileUtils widgets to read the file into a buffer
size_t Size;
char *pBuffer=FileUtils::ReadFileIntoBuffer("/tmp/wave",&Size);
// Create a command the Play_Sound command and send it
DCE::CMD_Play_Sound_DL CMD_Play_Sound_DL(m_dwPK_Device,sPK_Device_List,pBuffer,Size,"WAV");
SendCommand(CMD_Play_Sound_DL);
That's it. Of course it needs error checking, unique file names, etc., but, theoretically, that code snipped is all that would be needed.
As far as festival settings, I don't think we've even started to mess with them. At the moment, the media clients just play, so the behavior is normally to blend audio, which admittedly isn't that good. However, if you wanted to pause the media devices first, you could send a CMD_Pause before the Play_Sound, and then an un-pause. The Play Sound command is not finalized, and nobody is using it. So feel free to add to it if you want. For example, you could go into device templates, add a bool data parameter "Pause Media", and rerun DCEGen. That will recreate the command stub so it includes a bool bPause_Media parameter, and, if the parameter is true, then you could do the pause before and after.
Similarly, in v2, we haven't finalized or started using the "Play Sound" command yet. So, again, we could add more parameters to it like volume level and so on.
I think the only module that issues commands for text to speech is the Security Plugin, which does a countdown on the orbiters when you arm your security system. In that case, it's just a verbal message on the touch-screen tablets, which are't used for playing other media anyway. However, even if you change and add parameters to the command, it won't break the existing Security Plugin. DCE is not "sensitive", so you really can't break it and if some modules are compiled against an older template, and others against a new one, it won't hurt anything.