using UnityEngine; using UnityEngine.Windows.Speech; public class SpeechRecogniser: MonoBehaviour { protected DictationRecognizer dictationRecognizer; void Start() { } // CALL THIS FUNCTION WHEN YOU WANT TO START LISTENING TO DICTATION public void startDictationRequest(){ // THIS IS REALLY IMPORTANT!! // If you are using the MRTK and have phrase recognition running, then you can't use both at once, // so you need to turn it off with the following line if (PhraseRecognitionSystem.Status == SpeechSystemStatus.Running) { PhraseRecognitionSystem.Shutdown(); } StartDictationEngine(); } // CALL THIS FUNCTION WHEN YOU WANT TO STOP LISTENING TO DICTATION public void stopDictationRequest(){ // THIS IS REALLY IMPORTANT!! // If you are using the MRTK and turned off phrase recognition to enable dictation // you need to turn it back ON again with the following line if (PhraseRecognitionSystem.Status != SpeechSystemStatus.Running) { PhraseRecognitionSystem.Restart(); } CloseDictationEngine(); } private void DictationRecognizer_OnDictationHypothesis(string text) { // So in here is the hypothesised text. It's quick, like as fast as it's spoken you'll get the string passed in here // but it's slightly less accurate. So test what you get and see if it's close enough, // otherwise do your checking for your phrases in the OnDictationResult method if(text.Contains("your required phrase here")){ do something here } } private void DictationRecognizer_OnDictationComplete(DictationCompletionCause completionCause) { switch (completionCause) { case DictationCompletionCause.TimeoutExceeded: case DictationCompletionCause.PauseLimitExceeded: case DictationCompletionCause.Canceled: case DictationCompletionCause.Complete: // Restart required CloseDictationEngine(); StartDictationEngine(); break; case DictationCompletionCause.UnknownError: case DictationCompletionCause.AudioQualityFailure: case DictationCompletionCause.MicrophoneUnavailable: case DictationCompletionCause.NetworkFailure: // Error CloseDictationEngine(); break; } } private void DictationRecognizer_OnDictationResult(string text, ConfidenceLevel confidence) { // Debug.Log("Dictation result: " + text); if(text.Contains("in")){ messageText.text = "RESULT CONTAINS IN : " + text; }else{ // Debug.Log("RESULT does not CONTAIN IN!!!"); } } private void DictationRecognizer_OnDictationError(string error, int hresult) { messageText.text = "Dictation error : " + error; Debug.Log("Dictation error: " + error); } private void OnApplicationQuit() { CloseDictationEngine(); } private void StartDictationEngine() { Debug.Log("StartDictationEngine"); dictationRecognizer = new DictationRecognizer(); dictationRecognizer.DictationHypothesis += DictationRecognizer_OnDictationHypothesis; dictationRecognizer.DictationResult += DictationRecognizer_OnDictationResult; dictationRecognizer.DictationComplete += DictationRecognizer_OnDictationComplete; dictationRecognizer.DictationError += DictationRecognizer_OnDictationError; dictationRecognizer.Start(); } public void CloseDictationEngine() { if (dictationRecognizer != null) { dictationRecognizer.DictationHypothesis -= DictationRecognizer_OnDictationHypothesis; dictationRecognizer.DictationComplete -= DictationRecognizer_OnDictationComplete; dictationRecognizer.DictationResult -= DictationRecognizer_OnDictationResult; dictationRecognizer.DictationError -= DictationRecognizer_OnDictationError; if (dictationRecognizer.Status == SpeechSystemStatus.Running) { dictationRecognizer.Stop(); } dictationRecognizer.Dispose(); } }