public void SpeakAsync(string text)
{
if (text == null)
return;
text = Regex.Replace(text, @"\bPreArm\b", "Pre Arm", RegexOptions.IgnoreCase);
text = Regex.Replace(text, @"\bdist\b", "distance", RegexOptions.IgnoreCase);
text = Regex.Replace(text, @"\bNAV\b", "Navigation", RegexOptions.IgnoreCase);
text = Regex.Replace(text, @"\b([0-9]+)m\b", "$1 meters", RegexOptions.IgnoreCase);
text = Regex.Replace(text, @"\b([0-9]+)ft\b", "$1 feet", RegexOptions.IgnoreCase);
text = Regex.Replace(text, @"\b([0-9]+)\bbaud\b", "$1 baudrate", RegexOptions.IgnoreCase);
if (MONO)
{
try
{
//if (_speechlinux == null)
{
_state = SynthesizerState.Speaking;
_speechlinux = new System.Diagnostics.Process();
_speechlinux.StartInfo.RedirectStandardInput = true;
_speechlinux.StartInfo.UseShellExecute = false;
_speechlinux.StartInfo.FileName = "festival";
_speechlinux.Start();
_speechlinux.Exited += new EventHandler(_speechlinux_Exited);
log.Info("TTS: start " + _speechlinux.StartTime);
}
_state = SynthesizerState.Speaking;
_speechlinux.StandardInput.WriteLine("(SayText \"" + text + "\")");
_speechlinux.StandardInput.WriteLine("(quit)");
_speechlinux.Close();
}
catch { } // ignore errors
_state = SynthesizerState.Ready;
}
else
{
if (_speechwindows != null)
_speechwindows.SpeakAsync(text);
}
log.Info("TTS: say " + text);
}