是否可以在使用共享识别器时加载听写主题,而不是在sapi中加载Inproc重新加载器?

时间:2014-06-25 09:09:28

标签: windows speech-recognition sapi

当我使用共享识别器来处理先前注册的医学听写主题时,听写语法加载时没有错误,但是当我将识别器更改为Inproc识别器时,它无法加载听写主题。有没有办法在仍然使用proc识别器时加载听写主题?

我的加载语法代码如

      CComPtr<ISpObjectToken>      cpObjectToken;
      CComPtr<ISpAudio>            cpAudio;
      CComPtr<ISpRecognizer> cpEngine;
      CComPtr<ISpRecoContext> cpRecoCtx;
      CComPtr<ISpRecoGrammar> cpGram;
      hr = cpEngine.CoCreateInstance(CLSID_SpInprocRecognizer);
      hr = SpGetDefaultTokenFromCategoryId(SPCAT_AUDIOIN, &cpObjectToken);
      hr = cpEngine->SetInput(cpObjectToken, TRUE);
      hr = SpCreateDefaultObjectFromCategoryId(SPCAT_AUDIOIN, &cpAudio);
      hr = cpEngine->SetInput(cpAudio, TRUE);
      hr = cpEngine->CreateRecoContext(&cpRecoCtx);
      hr = cpEngine->SetRecognizer(NULL);
      hr = cpRecoCtx->CreateGrammar(1, &cpGram);
      hr = cpGram->LoadDictation(L"Medical", SPLO_STATIC);

1 个答案:

答案 0 :(得分:1)

Inproc识别器没有默认的SR引擎,所以调用

hr = cpEngine->SetRecognizer(NULL);

实际上没有加载引擎。我写了一个简单的函数来加载默认的识别器;代码很长,所以我不会把它内联,但你可以找到here

此外,在您的other question,中,您的主题名为&#34; Medical&#34;,此处您将其命名为&#34; Medicine&#34 ;;他们确实需要是一样的。