diff --git a/Assets/HoloToolkit-Examples/Input/Scripts/DictationRecordButton.cs b/Assets/HoloToolkit-Examples/Input/Scripts/DictationRecordButton.cs index a3fcce745a6..51fce0a1429 100644 --- a/Assets/HoloToolkit-Examples/Input/Scripts/DictationRecordButton.cs +++ b/Assets/HoloToolkit-Examples/Input/Scripts/DictationRecordButton.cs @@ -55,7 +55,11 @@ private void ToggleRecording() else { isRecording = true; - StartCoroutine(DictationInputManager.StartRecording(initialSilenceTimeout, autoSilenceTimeout, recordingTime)); + StartCoroutine(DictationInputManager.StartRecording( + gameObject, + initialSilenceTimeout, + autoSilenceTimeout, + recordingTime)); speechToTextOutput.color = Color.green; recordLight.SetActive(true); buttonRenderer.enabled = false; diff --git a/Assets/HoloToolkit/Input/Scripts/InputSources/DictationInputManager.cs b/Assets/HoloToolkit/Input/Scripts/InputSources/DictationInputManager.cs index 6d337a87f4a..d8a2f98b33d 100644 --- a/Assets/HoloToolkit/Input/Scripts/InputSources/DictationInputManager.cs +++ b/Assets/HoloToolkit/Input/Scripts/InputSources/DictationInputManager.cs @@ -53,6 +53,7 @@ public class DictationInputManager : Singleton, IInputSou private static bool isTransitioning; private static bool hasFailed; + private static bool hasListener; #endif #region Unity Methods @@ -103,11 +104,12 @@ protected override void OnDestroy() /// /// Turns on the dictation recognizer and begins recording audio from the default microphone. /// + /// GameObject listening for the dictation input. /// The time length in seconds before dictation recognizer session ends due to lack of audio input in case there was no audio heard in the current session. /// The time length in seconds before dictation recognizer session ends due to lack of audio input. /// Length in seconds for the manager to listen. /// - public static IEnumerator StartRecording(float initialSilenceTimeout = 5f, float autoSilenceTimeout = 20f, int recordingTime = 10) + public static IEnumerator StartRecording(GameObject listener = null, float initialSilenceTimeout = 5f, float autoSilenceTimeout = 20f, int recordingTime = 10) { #if UNITY_WSA || UNITY_STANDALONE_WIN if (IsListening || isTransitioning) @@ -119,6 +121,12 @@ public static IEnumerator StartRecording(float initialSilenceTimeout = 5f, float IsListening = true; isTransitioning = true; + if (listener != null) + { + hasListener = true; + InputManager.Instance.PushModalInputHandler(listener); + } + if (PhraseRecognitionSystem.Status == SpeechSystemStatus.Running) { PhraseRecognitionSystem.Shutdown(); @@ -149,6 +157,7 @@ public static IEnumerator StartRecording(float initialSilenceTimeout = 5f, float textSoFar = new StringBuilder(); isTransitioning = false; #else + Debug.LogWarning("Unable to start recording! Dictation is unsupported for this platform."); return null; #endif } @@ -168,6 +177,12 @@ public static IEnumerator StopRecording() IsListening = false; isTransitioning = true; + if (hasListener) + { + InputManager.Instance.PopModalInputHandler(); + hasListener = false; + } + Microphone.End(DeviceName); if (dictationRecognizer.Status == SpeechSystemStatus.Running) diff --git a/Assets/HoloToolkit/UX/Scripts/Keyboard.cs b/Assets/HoloToolkit/UX/Scripts/Keyboard.cs index f0e45e0c83e..fc479f9b9f9 100644 --- a/Assets/HoloToolkit/UX/Scripts/Keyboard.cs +++ b/Assets/HoloToolkit/UX/Scripts/Keyboard.cs @@ -530,7 +530,7 @@ private void ActivateSpecificKeyboard(LayoutType keyboardType) private void BeginDictation() { ResetClosingTime(); - StartCoroutine(DictationInputManager.StartRecording()); + StartCoroutine(DictationInputManager.StartRecording(gameObject)); SetMicrophoneRecording(); }