Skip to content

Commit 25dcdf9

Browse files
Merge branch 'mrtk_development' into vNEXT-Revolution
# Conflicts: # Assets/MixedRealityToolkit/_Core/Devices/VoiceInput/WindowsDictationInputDeviceManager.cs # Assets/MixedRealityToolkit/_Core/Services/MixedRealityToolkit.cs
2 parents 8510a2f + a57b5dc commit 25dcdf9

File tree

10 files changed

+220
-77
lines changed

10 files changed

+220
-77
lines changed

Assets/MixedRealityToolkit-Examples/Demos/Solvers/Scripts/SwapVolume.cs.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/MixedRealityToolkit-SDK/Inspectors/UX/Pointers/MousePointerInspector.cs.meta

Lines changed: 10 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/MixedRealityToolkit/_Core/Definitions/InputSystem/MixedRealityInputActionRulesProfile.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,47 +10,47 @@ namespace Microsoft.MixedReality.Toolkit.Core.Definitions.InputSystem
1010
public class MixedRealityInputActionRulesProfile : BaseMixedRealityProfile
1111
{
1212
[SerializeField]
13-
private InputActionRuleDigital[] inputActionRulesDigital;
13+
private InputActionRuleDigital[] inputActionRulesDigital = null;
1414

1515
/// <summary>
1616
/// All the Input Action Rules for <see cref="bool"/> based <see cref="MixedRealityInputAction"/>s
1717
/// </summary>
1818
public InputActionRuleDigital[] InputActionRulesDigital => inputActionRulesDigital;
1919

2020
[SerializeField]
21-
private InputActionRuleSingleAxis[] inputActionRulesSingleAxis;
21+
private InputActionRuleSingleAxis[] inputActionRulesSingleAxis = null;
2222

2323
/// <summary>
2424
/// All the Input Action Rules for <see cref="float"/> based <see cref="MixedRealityInputAction"/>s
2525
/// </summary>
2626
public InputActionRuleSingleAxis[] InputActionRulesSingleAxis => inputActionRulesSingleAxis;
2727

2828
[SerializeField]
29-
private InputActionRuleDualAxis[] inputActionRulesDualAxis;
29+
private InputActionRuleDualAxis[] inputActionRulesDualAxis = null;
3030

3131
/// <summary>
3232
/// All the Input Action Rules for <see cref="Vector2"/> based <see cref="MixedRealityInputAction"/>s
3333
/// </summary>
3434
public InputActionRuleDualAxis[] InputActionRulesDualAxis => inputActionRulesDualAxis;
3535

3636
[SerializeField]
37-
private InputActionRuleVectorAxis[] inputActionRulesVectorAxis;
37+
private InputActionRuleVectorAxis[] inputActionRulesVectorAxis = null;
3838

3939
/// <summary>
4040
/// All the Input Action Rules for <see cref="Vector3"/> based <see cref="MixedRealityInputAction"/>s
4141
/// </summary>
4242
public InputActionRuleVectorAxis[] InputActionRulesVectorAxis => inputActionRulesVectorAxis;
4343

4444
[SerializeField]
45-
private InputActionRuleQuaternionAxis[] inputActionRulesQuaternionAxis;
45+
private InputActionRuleQuaternionAxis[] inputActionRulesQuaternionAxis = null;
4646

4747
/// <summary>
4848
/// All the Input Action Rules for <see cref="Quaternion"/> based <see cref="MixedRealityInputAction"/>s
4949
/// </summary>
5050
public InputActionRuleQuaternionAxis[] InputActionRulesQuaternionAxis => inputActionRulesQuaternionAxis;
5151

5252
[SerializeField]
53-
private InputActionRulePoseAxis[] inputActionRulesPoseAxis;
53+
private InputActionRulePoseAxis[] inputActionRulesPoseAxis = null;
5454

5555
/// <summary>
5656
/// All the Input Action Rules for <see cref="MixedRealityPose"/> based <see cref="MixedRealityInputAction"/>s

Assets/MixedRealityToolkit/_Core/Definitions/InputSystem/WindowsGestureSettings.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
namespace Microsoft.MixedReality.Toolkit.Core.Definitions.InputSystem
77
{
88
/// <summary>
9-
/// Copy of Unity's XR.WSA.GestureSettings.
9+
/// Copy of Unity's <see cref="UnityEngine.XR.WSA.Input.GestureSettings"/>
1010
/// </summary>
1111
[Flags]
1212
public enum WindowsGestureSettings

Assets/MixedRealityToolkit/_Core/Definitions/Utilities/SolverOrientationType.cs.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/MixedRealityToolkit/_Core/Definitions/Utilities/SystemType.cs

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -59,19 +59,7 @@ public SystemType(Type type)
5959

6060
void ISerializationCallbackReceiver.OnAfterDeserialize()
6161
{
62-
if (!string.IsNullOrEmpty(reference))
63-
{
64-
type = Type.GetType(reference);
65-
66-
if (type == null)
67-
{
68-
Debug.LogWarning($"'{reference}' was referenced but class or struct type was not found.");
69-
}
70-
}
71-
else
72-
{
73-
type = null;
74-
}
62+
type = !string.IsNullOrEmpty(reference) ? Type.GetType(reference) : null;
7563
}
7664

7765
void ISerializationCallbackReceiver.OnBeforeSerialize() { }

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

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
using Microsoft.MixedReality.Toolkit.Core.Interfaces.Devices;
55
using Microsoft.MixedReality.Toolkit.Core.Interfaces.InputSystem;
6-
using Microsoft.MixedReality.Toolkit.Core.Services;
6+
using Microsoft.MixedReality.Toolkit.Core.Managers;
77
using Microsoft.MixedReality.Toolkit.Core.Utilities.Async;
88
using System.Text;
99
using System.Threading.Tasks;
@@ -16,7 +16,7 @@
1616
namespace Microsoft.MixedReality.Toolkit.Core.Devices.VoiceInput
1717
{
1818
#if UNITY_STANDALONE_WIN || UNITY_WSA || UNITY_EDITOR_WIN
19-
public class WindowsDictationInputDeviceManager : BaseDeviceManager, IMixedRealityDictationSystem
19+
public class WindowsDictationInputDeviceManager : BaseDeviceManager, IMixedRealityDictationManager
2020
{
2121
/// <summary>
2222
/// Constructor.
@@ -59,20 +59,26 @@ 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
{
6773
if (!Application.isPlaying) { return; }
6874

69-
if (MixedRealityToolkit.InputSystem == null)
75+
if (MixedRealityManager.InputSystem == null)
7076
{
7177
Debug.LogWarning("Unable to start Windows Dictation Device Manager. An Input System is required for this feature.");
7278
return;
7379
}
7480

75-
inputSource = MixedRealityToolkit.InputSystem.RequestNewGenericInputSource("Dictation Recognizer");
81+
inputSource = MixedRealityManager.InputSystem.RequestNewGenericInputSource("Dictation Recognizer");
7682
dictationResult = string.Empty;
7783

7884
if (dictationRecognizer == null)
@@ -89,7 +95,7 @@ public override void Enable()
8995
/// <inheritdoc />
9096
public override void Update()
9197
{
92-
if (!Application.isPlaying || MixedRealityToolkit.InputSystem == null) { return; }
98+
if (!Application.isPlaying || MixedRealityManager.InputSystem == null) { return; }
9399

94100
if (!isTransitioning && IsListening && !Microphone.IsRecording(deviceName) && dictationRecognizer.Status == SpeechSystemStatus.Running)
95101
{
@@ -100,7 +106,7 @@ public override void Update()
100106
if (!hasFailed && dictationRecognizer.Status == SpeechSystemStatus.Failed)
101107
{
102108
hasFailed = true;
103-
MixedRealityToolkit.InputSystem.RaiseDictationError(inputSource, "Dictation recognizer has failed!");
109+
MixedRealityManager.InputSystem.RaiseDictationError(inputSource, "Dictation recognizer has failed!");
104110
}
105111
}
106112

@@ -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 || MixedRealityToolkit.InputSystem == null)
144+
if (IsListening || isTransitioning || MixedRealityManager.InputSystem == null || !Application.isPlaying)
139145
{
140146
Debug.LogWarning("Unable to start recording");
141147
return;
@@ -148,15 +154,16 @@ public async Task StartRecordingAsync(GameObject listener = null, float initialS
148154
if (listener != null)
149155
{
150156
hasListener = true;
151-
MixedRealityToolkit.InputSystem.PushModalInputHandler(listener);
157+
MixedRealityManager.InputSystem.PushModalInputHandler(listener);
152158
}
153159

154160
if (PhraseRecognitionSystem.Status == SpeechSystemStatus.Running)
155161
{
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,11 +174,12 @@ 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
{
174-
MixedRealityToolkit.InputSystem.RaiseDictationError(inputSource, "Dictation recognizer failed to start!");
182+
MixedRealityManager.InputSystem.RaiseDictationError(inputSource, "Dictation recognizer failed to start!");
175183
return;
176184
}
177185

@@ -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;
@@ -201,7 +209,7 @@ public async Task<AudioClip> StopRecordingAsync()
201209

202210
if (hasListener)
203211
{
204-
MixedRealityToolkit.InputSystem.PopModalInputHandler();
212+
MixedRealityManager.InputSystem.PopModalInputHandler();
205213
hasListener = false;
206214
}
207215

@@ -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;
@@ -231,7 +241,7 @@ private void DictationRecognizer_DictationHypothesis(string text)
231241
// We don't want to append to textSoFar yet, because the hypothesis may have changed on the next event.
232242
dictationResult = $"{textSoFar} {text}...";
233243

234-
MixedRealityToolkit.InputSystem.RaiseDictationHypothesis(inputSource, dictationResult);
244+
MixedRealityManager.InputSystem.RaiseDictationHypothesis(inputSource, dictationResult);
235245
}
236246

237247
/// <summary>
@@ -245,7 +255,7 @@ private void DictationRecognizer_DictationResult(string text, ConfidenceLevel co
245255

246256
dictationResult = textSoFar.ToString();
247257

248-
MixedRealityToolkit.InputSystem.RaiseDictationResult(inputSource, dictationResult);
258+
MixedRealityManager.InputSystem.RaiseDictationResult(inputSource, dictationResult);
249259
}
250260

251261
/// <summary>
@@ -263,7 +273,7 @@ private void DictationRecognizer_DictationComplete(DictationCompletionCause caus
263273
dictationResult = "Dictation has timed out. Please try again.";
264274
}
265275

266-
MixedRealityToolkit.InputSystem.RaiseDictationComplete(inputSource, dictationResult, dictationAudioClip);
276+
MixedRealityManager.InputSystem.RaiseDictationComplete(inputSource, dictationResult, dictationAudioClip);
267277
textSoFar = null;
268278
dictationResult = string.Empty;
269279
}
@@ -277,7 +287,7 @@ private void DictationRecognizer_DictationError(string error, int hresult)
277287
{
278288
dictationResult = $"{error}\nHRESULT: {hresult}";
279289

280-
MixedRealityToolkit.InputSystem.RaiseDictationError(inputSource, dictationResult);
290+
MixedRealityManager.InputSystem.RaiseDictationError(inputSource, dictationResult);
281291
textSoFar = null;
282292
dictationResult = string.Empty;
283293
}

Assets/MixedRealityToolkit/_Core/Inspectors/Profiles/BaseMixedRealityInspector.cs.meta

Lines changed: 10 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)