Skip to content

Commit a57b5dc

Browse files
Merge pull request #2921 from StephenHodgson/vNEXT-DictationUpdate
Windows Dictation Input Device Update
2 parents 3c5fb0f + 7ce9925 commit a57b5dc

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

Assets/MixedRealityToolkit/_Core/Devices/VoiceInput/WindowsDictationInputDeviceManager.cs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)