/// <inheritdoc /> public async Task StartRecordingAsync(GameObject listener = null, float initialSilenceTimeout = 5f, float autoSilenceTimeout = 20f, int recordingTime = 10, string micDeviceName = "") { #if UNITY_STANDALONE_WIN || UNITY_WSA || UNITY_EDITOR_WIN IMixedRealityInputSystem inputSystem = Service as IMixedRealityInputSystem; if (IsListening || isTransitioning || inputSystem == null || !Application.isPlaying) { Debug.LogWarning("Unable to start recording"); return; } if (dictationRecognizer == null && InputSystemProfile.SpeechCommandsProfile.SpeechRecognizerStartBehavior == AutoStartBehavior.ManualStart) { InitializeDictationRecognizer(); } hasFailed = false; IsListening = true; isTransitioning = true; if (listener != null) { hasListener = true; inputSystem.PushModalInputHandler(listener); } if (PhraseRecognitionSystem.Status == SpeechSystemStatus.Running) { PhraseRecognitionSystem.Shutdown(); } await waitUntilPhraseRecognitionSystemHasStopped; Debug.Assert(PhraseRecognitionSystem.Status == SpeechSystemStatus.Stopped); // Query the maximum frequency of the default microphone. int minSamplingRate; // Not used. deviceName = micDeviceName; Microphone.GetDeviceCaps(deviceName, out minSamplingRate, out samplingRate); dictationRecognizer.InitialSilenceTimeoutSeconds = initialSilenceTimeout; dictationRecognizer.AutoSilenceTimeoutSeconds = autoSilenceTimeout; dictationRecognizer.Start(); await waitUntilDictationRecognizerHasStarted; Debug.Assert(dictationRecognizer.Status == SpeechSystemStatus.Running); if (dictationRecognizer.Status == SpeechSystemStatus.Failed) { inputSystem.RaiseDictationError(inputSource, "Dictation recognizer failed to start!"); return; } // Start recording from the microphone. dictationAudioClip = Microphone.Start(deviceName, false, recordingTime, samplingRate); textSoFar = new StringBuilder(); isTransitioning = false; #else await Task.CompletedTask; #endif }