Skip to content

Commit 197da06

Browse files
Cleaned up the dictation input device manager, and removed allocations when starting/stopping recording.
Also added some safely checks to ensure we're in play mode when recording.
1 parent 9fc2955 commit 197da06

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

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

Lines changed: 14 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,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

Comments
 (0)