@@ -59,8 +59,14 @@ public WindowsDictationInputDeviceManager(string name, uint priority) : base(nam
5959 /// </summary>
6060 private AudioClip dictationAudioClip ;
6161
62- private DictationRecognizer dictationRecognizer ;
63-
62+ private static DictationRecognizer dictationRecognizer ;
63+
64+ private readonly WaitUntil waitUntilPhraseRecognitionSystemHasStarted = new WaitUntil ( ( ) => PhraseRecognitionSystem . Status != SpeechSystemStatus . Stopped ) ;
65+ private readonly WaitUntil waitUntilPhraseRecognitionSystemHasStopped = new WaitUntil ( ( ) => PhraseRecognitionSystem . Status != SpeechSystemStatus . Running ) ;
66+
67+ private readonly WaitUntil waitUntilDictationRecognizerHasStarted = new WaitUntil ( ( ) => dictationRecognizer . Status != SpeechSystemStatus . Stopped ) ;
68+ private readonly WaitUntil waitUntilDictationRecognizerHasStopped = new WaitUntil ( ( ) => dictationRecognizer . Status != SpeechSystemStatus . Running ) ;
69+
6470 /// <inheritdoc />
6571 public override void Enable ( )
6672 {
@@ -135,7 +141,7 @@ public async void StartRecording(GameObject listener, float initialSilenceTimeou
135141 /// <inheritdoc />
136142 public async Task StartRecordingAsync ( GameObject listener = null , float initialSilenceTimeout = 5f , float autoSilenceTimeout = 20f , int recordingTime = 10 , string micDeviceName = "" )
137143 {
138- if ( IsListening || isTransitioning || MixedRealityManager . InputSystem == null )
144+ if ( IsListening || isTransitioning || MixedRealityManager . InputSystem == null || ! Application . isPlaying )
139145 {
140146 Debug . LogWarning ( "Unable to start recording" ) ;
141147 return ;
@@ -156,7 +162,7 @@ public async Task StartRecordingAsync(GameObject listener = null, float initialS
156162 PhraseRecognitionSystem . Shutdown ( ) ;
157163 }
158164
159- await new WaitUntil ( ( ) => PhraseRecognitionSystem . Status != SpeechSystemStatus . Running ) ;
165+ await waitUntilPhraseRecognitionSystemHasStopped ;
160166
161167 // Query the maximum frequency of the default microphone.
162168 int minSamplingRate ; // Not used.
@@ -167,7 +173,7 @@ public async Task StartRecordingAsync(GameObject listener = null, float initialS
167173 dictationRecognizer . AutoSilenceTimeoutSeconds = autoSilenceTimeout ;
168174 dictationRecognizer . Start ( ) ;
169175
170- await new WaitUntil ( ( ) => dictationRecognizer . Status != SpeechSystemStatus . Stopped ) ;
176+ await waitUntilDictationRecognizerHasStarted ;
171177
172178 if ( dictationRecognizer . Status == SpeechSystemStatus . Failed )
173179 {
@@ -190,7 +196,7 @@ public async void StopRecording()
190196 /// <inheritdoc />
191197 public async Task < AudioClip > StopRecordingAsync ( )
192198 {
193- if ( ! IsListening || isTransitioning )
199+ if ( ! IsListening || isTransitioning || ! Application . isPlaying )
194200 {
195201 Debug . LogWarning ( "Unable to stop recording" ) ;
196202 return null ;
@@ -212,11 +218,11 @@ public async Task<AudioClip> StopRecordingAsync()
212218 dictationRecognizer . Stop ( ) ;
213219 }
214220
215- await new WaitUntil ( ( ) => dictationRecognizer . Status != SpeechSystemStatus . Running ) ;
221+ await waitUntilDictationRecognizerHasStopped ;
216222
217223 PhraseRecognitionSystem . Restart ( ) ;
218224
219- await new WaitUntil ( ( ) => PhraseRecognitionSystem . Status == SpeechSystemStatus . Running ) ;
225+ await waitUntilPhraseRecognitionSystemHasStarted ;
220226
221227 isTransitioning = false ;
222228 return dictationAudioClip ;
0 commit comments