@@ -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,8 @@ 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 ;
166+ Debug . Assert ( PhraseRecognitionSystem . Status == SpeechSystemStatus . Stopped ) ;
160167
161168 // Query the maximum frequency of the default microphone.
162169 int minSamplingRate ; // Not used.
@@ -167,7 +174,8 @@ public async Task StartRecordingAsync(GameObject listener = null, float initialS
167174 dictationRecognizer . AutoSilenceTimeoutSeconds = autoSilenceTimeout ;
168175 dictationRecognizer . Start ( ) ;
169176
170- await new WaitUntil ( ( ) => dictationRecognizer . Status != SpeechSystemStatus . Stopped ) ;
177+ await waitUntilDictationRecognizerHasStarted ;
178+ Debug . Assert ( dictationRecognizer . Status == SpeechSystemStatus . Running ) ;
171179
172180 if ( dictationRecognizer . Status == SpeechSystemStatus . Failed )
173181 {
@@ -190,7 +198,7 @@ public async void StopRecording()
190198 /// <inheritdoc />
191199 public async Task < AudioClip > StopRecordingAsync ( )
192200 {
193- if ( ! IsListening || isTransitioning )
201+ if ( ! IsListening || isTransitioning || ! Application . isPlaying )
194202 {
195203 Debug . LogWarning ( "Unable to stop recording" ) ;
196204 return null ;
@@ -212,11 +220,13 @@ public async Task<AudioClip> StopRecordingAsync()
212220 dictationRecognizer . Stop ( ) ;
213221 }
214222
215- await new WaitUntil ( ( ) => dictationRecognizer . Status != SpeechSystemStatus . Running ) ;
223+ await waitUntilDictationRecognizerHasStopped ;
224+ Debug . Assert ( dictationRecognizer . Status == SpeechSystemStatus . Stopped ) ;
216225
217226 PhraseRecognitionSystem . Restart ( ) ;
218227
219- await new WaitUntil ( ( ) => PhraseRecognitionSystem . Status == SpeechSystemStatus . Running ) ;
228+ await waitUntilPhraseRecognitionSystemHasStarted ;
229+ Debug . Assert ( PhraseRecognitionSystem . Status == SpeechSystemStatus . Running ) ;
220230
221231 isTransitioning = false ;
222232 return dictationAudioClip ;
0 commit comments