使用SAPI创建单独的语音识别系统

时间:2013-02-25 10:24:04

标签: windows visual-c++ shared voice-recognition sapi

我正在使用给定here的C ++代码。但这里使用的共享语音识别运行自己的命令,如移动,最小化,删除。我需要在不调用MS语音识别程序的情况下创建它。

hr = cpEngine.CoCreateInstance(CLSID_SpSharedRecognizer);

上面的这一行创建了共享实例。

我尝试使用 CLSID_SpInprocRecognizer ,但无法正确使用。我是新手。 有没有办法做到这一点?

1 个答案:

答案 0 :(得分:4)

我在这里遇到了同样的问题,花了很多时间试图找到答案。幸运的是,我按照以下步骤获得了解决方案:

  1. 如果您想摆脱MS语音识别程序,请使用进程内识别器
  2. hr = cpRecognizer.CoCreateInstance(CLSID_SpInprocRecognizer);

    2.进程识别器没有设置默认输入源或识别引擎,您需要设置它们以使进程内识别器进行侦听。

    CComPtr<ISpObjectToken>      cpObjectToken;
    CComPtr<ISpAudio>            cpAudio;
    
     // Get the default audio input token.
    hr = SpGetDefaultTokenFromCategoryId(SPCAT_AUDIOIN, &cpObjectToken);
    
    // Set the audio input to our token.
    hr = cpRecognizer->SetInput(cpObjectToken, TRUE);
    // Set up the inproc recognizer audio input with an audio input object.
    
    // Create the default audio input object.
    hr = SpCreateDefaultObjectFromCategoryId(SPCAT_AUDIOIN, &cpAudio);
    
    // Set the audio input to our object.
    hr = cpRecognizer->SetInput(cpAudio, TRUE);
    

    3.指定要使用的特定语音识别引擎。如果未指定,则使用默认值。如果它没有被调用,它仍然使用默认值(我推荐这一行,仍然可以正常工作)。

    hr = cpRecognizer->SetRecognizer(NULL);
    

    就是这样!它会打开一个默认的美国英语识别引擎,并且可以非常快速地获取我的命令。

    参考:

    http://stackoverflow.com/questions/18448394/inproc-speech-recognition-engine-in-python
    http://msdn.microsoft.com/en-us/library/ms718864%28v=vs.85%29.aspx
    http://msdn.microsoft.com/en-us/library/ms718866%28v=vs.85%29.aspx