void Update() { /* Wait for audio clip of the output speech to finish before listening and converting * new input speech */ if (stt.ServiceReady() && tts.ServiceReady() && chat.ServiceReady()) { if (chat.GetStatus() == SimpleBot.ProcessingStatus.Processing || !tts.IsFinished()) { stt.Active = false; stt.StopRecording(); } else { stt.Active = true; stt.StartRecording(); } } /* I used to need to keep track of all the processing steps to known when to do * the next step, i.e. when to ask for a chat response and when to convert to audio. * This is now triggered by listeners in InputFields. I still need to keep track * of processing to know when to record or stop recording speech as above. * / * /* * if (stt.GetStatus() == SpeechToText.ProcessingStatus.Processed && chat.ServiceReady()) * { * // GetResult obtains the result of the speech to text conversion and changes the speech input status to Idle. * Runnable.Run(chat.ProcessChat(stt.GetResult())); * } */ /* * if (chat.GetStatus() == SimpleBot.ProcessingStatus.Processed && tts.ServiceReady()) * { * // GetResult obtains the chat response and adds it to the queue for conversion to speech audio. * tts.AddTextToQueue(chat.GetResult()); * } */ }