Windows语音识别Hello World无法正常工作

时间:2017-07-11 14:39:54

标签: speech-recognition c++-cx

我想让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上的默认麦克风,并且功能正常。

1 个答案:

答案 0 :(得分:1)

我发现我的申请出了什么问题。如果有人遇到同样的问题,我会在这里发布答案。

事实证明,这种类型的UWP应用程序嵌入了一个名为Package.appxmanifest的文件,该文件包含应用程序的一些设置。

此清单文件具有&#34;功能&#34;部分,我必须打开&#34;互联网(客户端)&#34;和#34;麦克风&#34;能力。

重新编译后,一切正常。