关于语音识别的问题
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>
文件放在与程序的其他文件放在一起,不知道有没错?
下一篇: 语音识别技术