/// <inheritdoc />
        public async Task <AudioClip> StopRecordingAsync()
        {
            Profiler.BeginSample("[MRTK] WindowsDictationInputProvider.StopRecordingAsync");

#if UNITY_STANDALONE_WIN || UNITY_WSA || UNITY_EDITOR_WIN
            if (!IsListening || isTransitioning || !Application.isPlaying)
            {
                Debug.LogWarning("Unable to stop recording");

                Profiler.EndSample(); // StopRecordingAsync - failure

                return(null);
            }

            IsListening     = false;
            isTransitioning = true;

            IMixedRealityInputSystem inputSystem = Service as IMixedRealityInputSystem;

            if (hasListener)
            {
                inputSystem?.PopModalInputHandler();
                hasListener = false;
            }

            Microphone.End(deviceName);

            if (dictationRecognizer.Status == SpeechSystemStatus.Running)
            {
                dictationRecognizer.Stop();
            }

            await waitUntilDictationRecognizerHasStopped;
            Debug.Assert(dictationRecognizer.Status == SpeechSystemStatus.Stopped);

            PhraseRecognitionSystem.Restart();

            await waitUntilPhraseRecognitionSystemHasStarted;
            Debug.Assert(PhraseRecognitionSystem.Status == SpeechSystemStatus.Running);

            isTransitioning = false;

            Profiler.EndSample(); // StopRecordingAsync

            return(dictationAudioClip);
#else
            await Task.CompletedTask;

            Profiler.EndSample(); // StopRecordingAsync
            return(null);
#endif
        }
        /// <inheritdoc />
        public async Task <AudioClip> StopRecordingAsync()
        {
            if (!IsListening || isTransitioning || !Application.isPlaying)
            {
                Debug.LogWarning("Unable to stop recording");
                return(null);
            }

            IsListening     = false;
            isTransitioning = true;

            IMixedRealityInputSystem inputSystem = Service as IMixedRealityInputSystem;

            if (hasListener)
            {
                inputSystem?.PopModalInputHandler();
                hasListener = false;
            }

            Microphone.End(deviceName);

            if (dictationRecognizer.Status == SpeechSystemStatus.Running)
            {
                dictationRecognizer.Stop();
            }

            await waitUntilDictationRecognizerHasStopped;

            Debug.Assert(dictationRecognizer.Status == SpeechSystemStatus.Stopped);

            PhraseRecognitionSystem.Restart();

            await waitUntilPhraseRecognitionSystemHasStarted;

            Debug.Assert(PhraseRecognitionSystem.Status == SpeechSystemStatus.Running);

            isTransitioning = false;
            return(dictationAudioClip);
        }