我想让Windows::Media::SpeechRecognition
在Windows10上工作,但我无法让我的Hello World应用程序正常工作。
这是我做的:
我在VS2017中创建了一个新的UWP空白应用程序
在OnLaunched()
方法中,我调用Init()
方法初始化语音识别:
void App::Init()
{
speechRecognizer = ref new Windows::Media::SpeechRecognition::SpeechRecognizer(Windows::Media::SpeechRecognition::SpeechRecognizer::SystemSpeechLanguage);
Platform::Collections::Vector<String^>^ speech_command_list = ref new Platform::Collections::Vector<String^>();
speech_command_list->Append(StringReference(L"pause"));
speech_command_list->Append(StringReference(L"play"));
speech_command_list->Append(StringReference(L"download"));
speech_command_list->Append(StringReference(L"test"));
SpeechRecognitionListConstraint^ speech_constraint = ref new SpeechRecognitionListConstraint(speech_command_list);
speechRecognizer->Constraints->Append(speech_constraint);
create_task(speechRecognizer->CompileConstraintsAsync()).then([this](SpeechRecognitionCompilationResult^ compilationResult)
{
if (compilationResult->Status == SpeechRecognitionResultStatus::Success)
{
speechRecognizer->ContinuousRecognitionSession->ResultGenerated += ref new TypedEventHandler<SpeechContinuousRecognitionSession^, SpeechContinuousRecognitionResultGeneratedEventArgs^>(this, &App::OnSpeechRecognized);
speechRecognizer->HypothesisGenerated += ref new TypedEventHandler<Windows::Media::SpeechRecognition::SpeechRecognizer^, SpeechRecognitionHypothesisGeneratedEventArgs^>(this, &App::OnHypothesisGenerated);
speechRecognizer->StateChanged += ref new TypedEventHandler<Windows::Media::SpeechRecognition::SpeechRecognizer^, SpeechRecognizerStateChangedEventArgs^>(this, &App::OnStateChanged);
speechRecognizer->RecognitionQualityDegrading += ref new TypedEventHandler<Windows::Media::SpeechRecognition::SpeechRecognizer^, SpeechRecognitionQualityDegradingEventArgs^>(this, &App::OnQualityIssue);
TimeSpan endSilenceTime;
endSilenceTime.Duration = 12000000L;
speechRecognizer->Timeouts->EndSilenceTimeout = endSilenceTime; // (1.2 seconds in nanoseconds)
speechRecognizer->ContinuousRecognitionSession->StartAsync();
}
else
{
// Handle errors here.
}
});
}
代码编译并启动,语音约束的编译成功,我在回调OnStateChanged
中断了一次,新的状态值为Idle
就是这样。在我的麦克风讲话时,我没有收到任何回调。
为了记录,我的麦克风已正确插入,它是Windows上的默认麦克风,并且功能正常。
答案 0 :(得分:1)
我发现我的申请出了什么问题。如果有人遇到同样的问题,我会在这里发布答案。
事实证明,这种类型的UWP应用程序嵌入了一个名为Package.appxmanifest的文件,该文件包含应用程序的一些设置。
此清单文件具有&#34;功能&#34;部分,我必须打开&#34;互联网(客户端)&#34;和#34;麦克风&#34;能力。
重新编译后,一切正常。