语法文件:CmdCtrl.xml
<GRAMMAR LANGID="804">
   <DEFINE>
      <ID NAME="CMD" VAL="10"/>
   </DEFINE>
   <RULE NAME="COMMAND" ID="CMD" TOPLEVEL="ACTIVE">
     <L>
      <P>关闭程序</P>
     </L>
   </RULE>
</GRAMMAR>
成员函数:
HRESULT CSREngine::LoadCmdGrammarFromFile(CString XMLFileName)
{
HRESULT hr = S_OK ;
if (!m_cpCmdGrammar)
{
hr = m_cpRecoCtxt->CreateGrammar(GID_SRCMD_CN, &m_cpCmdGrammar);
if( FAILED(hr) ) 
{
MessageBox(NULL,"Error CreateGrammar","Error",MB_OK);
return hr;
}
WCHAR wszXMLFile[20]=L"";
MultiByteToWideChar(CP_ACP, 0, (LPCSTR) XMLFileName , -1, wszXMLFile, 256);
    hr = m_cpCmdGrammar->LoadCmdFromFile(wszXMLFile,SPLO_DYNAMIC);
if (FAILED(hr))
{
MessageBox(NULL,"Error LoadCmdFromFile","Error",MB_OK);
return hr;
}
}
return hr;}
****************************************************************************
调用:
    hr=m_SREngine.LoadCmdGrammarFromFile("CmdCtrl.xml");
为何会出现下面的错误:
                   "Error LoadCmdFromFile"我用的是Microsoft Speech SDK5.1!
如果将LANGID改为409,没有错误,可以识别英文.但不知为什么不能识别中文?

解决方案 »

  1.   

    要识别中文,有2个条件,第一,你的文法文件必须是unicode格式的,或者也可以是ANSI格式的,如果是ANSI格式的话,必须在文法文件的第一行,加一个<?xml version="1.0" encoding="GB2312"?>。第二个条件就是m_SREngine识别的语言必须是中文。可以通过程序来设置,
    CComPtr<ISpObjectToken> m_pToken;
    hr = SpFindBestToken ( SPCAT_RECOGNIZERS, L"language=804", NULL, &m_pToken );
    hr = m_pSREngine->SetRecognizer ( m_pToken ); //设置设别语言
    这样就设置成了中文模式了。你也可以在控制面板里把识别的语言直接设成中文。