diff --git a/UnityProjects/MRTKDevTemplate/Assets/Scripts/DictationHandler.cs b/UnityProjects/MRTKDevTemplate/Assets/Scripts/DictationHandler.cs index 9f274418a7c..dde191e43f5 100644 --- a/UnityProjects/MRTKDevTemplate/Assets/Scripts/DictationHandler.cs +++ b/UnityProjects/MRTKDevTemplate/Assets/Scripts/DictationHandler.cs @@ -44,7 +44,8 @@ public class StringUnityEvent : UnityEvent { } [field: SerializeField] public StringUnityEvent OnRecognitionFaulted { get; private set; } - private DictationSubsystem dictationSubsystem; + private IDictationSubsystem dictationSubsystem = null; + private IKeywordRecognitionSubsystem keywordRecognitionSubsystem = null; /// /// Start dictation on a DictationSubsystem. @@ -54,9 +55,15 @@ public void StartRecognition() // Make sure there isn't an ongoing recognition session StopRecognition(); - dictationSubsystem = XRSubsystemHelpers.GetFirstRunningSubsystem(); + dictationSubsystem = XRSubsystemHelpers.DictationSubsystem; if (dictationSubsystem != null) { + keywordRecognitionSubsystem = XRSubsystemHelpers.KeywordRecognitionSubsystem; + if (keywordRecognitionSubsystem != null) + { + keywordRecognitionSubsystem.Stop(); + } + dictationSubsystem.Recognizing += DictationSubsystem_Recognizing; dictationSubsystem.Recognized += DictationSubsystem_Recognized; dictationSubsystem.RecognitionFinished += DictationSubsystem_RecognitionFinished; @@ -73,11 +80,13 @@ public void StartRecognition() private void DictationSubsystem_RecognitionFaulted(DictationSessionEventArgs obj) { OnRecognitionFaulted.Invoke("Recognition faulted. Reason: " + obj.ReasonString); + HandleDictationShutdown(); } private void DictationSubsystem_RecognitionFinished(DictationSessionEventArgs obj) { OnRecognitionFinished.Invoke("Recognition finished. Reason: " + obj.ReasonString); + HandleDictationShutdown(); } private void DictationSubsystem_Recognized(DictationResultEventArgs obj) @@ -105,5 +114,19 @@ public void StopRecognition() dictationSubsystem = null; } } + + /// + /// Stop dictation on the current DictationSubsystem. + /// + public void HandleDictationShutdown() + { + StopRecognition(); + + if (keywordRecognitionSubsystem != null) + { + keywordRecognitionSubsystem.Start(); + keywordRecognitionSubsystem = null; + } + } } }