欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

关于语音识别的问题

程序员文章站 2022-03-15 11:30:04
m_bGotReco=FALSE;    m_bInSound=FALSE;    HRESULT hr = S_OK;    ...

m_bGotReco=FALSE; 
  m_bInSound=FALSE; 
  HRESULT hr = S_OK;  
  hr = cpRecoEngine.CoCreateInstance(CLSID_SpInprocRecognizer); 
//创建识别引擎COM实例  
  if( SUCCEEDED( hr ) ) 
  { 
  hr = cpRecoEngine->CreateRecoContext( &m_cpRecoCtxt );  
//创建识别上下文对象 
  } 
  else 
  MessageBox("error1"); 
  // Set recognition notification for dictation 
  if (SUCCEEDED(hr)) 
  { 
  hr = m_cpRecoCtxt->SetNotifyWindowMessage( m_hWnd, WM_RECOEVENT, 0, 0 );//设置消息机制 
  } 
  else 
  MessageBox("error2"); 
  if (SUCCEEDED(hr)) 
  { 
  const ULONGLONG ullInterest = SPFEI(SPEI_RECOGNITION); //我们关心的事件 
  hr = m_cpRecoCtxt->SetInterest(ullInterest, ullInterest); 
  } 
  else 
  MessageBox("error3"); 
  // create default audio object 
  CComPtr <ISpAudio> cpAudio; 
  hr = SpCreateDefaultObjectFromCategoryId(SPCAT_AUDIOIN, &cpAudio);//建立默认的音频输入对象 
  //设置识别引擎输入源 
  hr = cpRecoEngine->SetInput(cpAudio, TRUE); 
  b_initSR = TRUE; 
  //创建听写模式的语法对象 
  hr = m_cpRecoCtxt->CreateGrammar( GID_DICTATION, &m_cpDictationGrammar ); 
  if (SUCCEEDED(hr)) 
  { 
  //加载词典 
  hr = m_cpDictationGrammar->LoadDictation(NULL, SPLO_STATIC); 
  } 
  else 
  MessageBox("error4"); 
  if (FAILED(hr)) 
  { 
  m_cpDictationGrammar.Release(); 
  MessageBox("start SR error"); 
  } 
  //创建命令模式的语法对象 
  hr = m_cpRecoCtxt->CreateGrammar( GID_CMD_GR, &m_cpCmdGrammar); 
  if( FAILED(hr) ) 
  { 
  MessageBox("Error CreateGrammar","Error",MB_OK);  
  }  
//***************************** 
  WCHAR wszXMLFile[20]=L""; 
  //ANSI转UNINCODE 
  MultiByteToWideChar(CP_ACP, 0, (LPCSTR)"Cmd.xml" , -1, wszXMLFile, 256); 
  //从文件中读取语法词典 
  hr = m_cpCmdGrammar->LoadCmdFromFile(wszXMLFile,SPLO_DYNAMIC); 
  if (FAILED(hr)) 
  { 
  MessageBox("Error LoadCmdFromFile","Error",MB_OK); 
  } 
//******************************* 
以上是我在网上看到得一段代码,可我编的时候总是出现Error LoadCmdFromFile;郁闷的不行,还望指点指点
我的语法文件为 
<GRAMMAR LANGID="804">  
  <DEFINE>  
  <ID NAME="CMD" VAL="10"/>  
  </DEFINE>  
  <RULE NAME="COMMAND" ID="CMD" TOPLEVEL="ACTIVE">  
  <L> 
  <p>你 </p> 
  <p>我 </p> 
  <P>关闭程序 </P>  
  </L>  
  </RULE>  
  </GRAMMAR> 
文件放在与程序的其他文件放在一起,不知道有没错?