我正在使用Microsoft的此示例here用于UWP平台。 当应用程序在Hololens中运行时,我需要凝视2D窗口才能正常工作。 如果我不这样做,该应用程序将完全不响应语音命令。
但是这不是我想要的。我希望能够在发出语音命令时环顾周围的环境。类似于如何向Cortana发出命令。在这种情况下,您没有应用程序窗口。 我该如何实现?
初始化:
private async Task InitializeRecognizer(Language recognizerLanguage)
{
if (speechRecognizer != null)
{
// cleanup prior to re-initializing this scenario.
speechRecognizer.StateChanged -= SpeechRecognizer_StateChanged;
speechRecognizer.ContinuousRecognitionSession.Completed -= ContinuousRecognitionSession_Completed;
speechRecognizer.ContinuousRecognitionSession.ResultGenerated -= ContinuousRecognitionSession_ResultGenerated;
this.speechRecognizer.Dispose();
this.speechRecognizer = null;
}
try
{
this.speechRecognizer = new SpeechRecognizer(recognizerLanguage);
speechRecognizer.StateChanged += SpeechRecognizer_StateChanged;
// add list constaints here
SpeechRecognitionCompilationResult result = await speechRecognizer.CompileConstraintsAsync();
if (result.Status != SpeechRecognitionResultStatus.Success)
{
rootPage.NotifyUser( "Unable to compile grammar.",NotifyType.ErrorMessage);
}
else
{
speechRecognizer.ContinuousRecognitionSession.Completed += ContinuousRecognitionSession_Completed;
speechRecognizer.ContinuousRecognitionSession.ResultGenerated += ContinuousRecognitionSession_ResultGenerated;
}
}
catch (Exception ex)
{
if ((uint)ex.HResult == HResultRecognizerNotFound)
{
rootPage.NotifyUser( "Speech Language pack for selected language not installed.",NotifyType.ErrorMessage);
}
else
{
var messageDialog = new Windows.UI.Popups.MessageDialog(ex.Message, "Exception");
await messageDialog.ShowAsync();
}
}
}
收听方法
public async void StartListening()
{
if (isListening == false)
{
// The recognizer can only start listening in a continuous fashion if the recognizer is currently idle.
// This prevents an exception from occurring.
if (speechRecognizer.State == SpeechRecognizerState.Idle)
{
try
{
await speechRecognizer.ContinuousRecognitionSession.StartAsync();
isListening = true;
}
catch (Exception ex)
{
var messageDialog = new Windows.UI.Popups.MessageDialog(ex.Message, "Exception");
await messageDialog.ShowAsync();
}
}
}
else
{
isListening = false;
if (speechRecognizer.State != SpeechRecognizerState.Idle)
{
try
{
// Cancelling recognition prevents any currently recognized speech from
// generating a ResultGenerated event. StopAsync() will allow the final session to
// complete.
await speechRecognizer.ContinuousRecognitionSession.CancelAsync();
}
catch (Exception ex)
{
var messageDialog = new Windows.UI.Popups.MessageDialog(ex.Message, "Exception");
await messageDialog.ShowAsync();
}
}
}
}