沃尔沃台湾试驾:MicrophoneSetup函数调用

来源:百度文库 编辑:中科新闻网 时间:2024/05/09 19:54:32
用VB怎样调用MicrophoneSetup函数

释放函数Destroy被类的析构函数调用,释放了类所引用的所有接口:

void CSpeechRecognition::Destroy()

{

if (m_cpDictationGrammar)

m_cpDictationGrammar.Release();

if (m_cpRecoCtxt)

m_cpRecoCtxt.Release();

if (m_cpRecoEngine)

m_cpRecoEngine.Release();

CoUninitialize();

}

函数Start和Stop用来控制开始和停止接受及识别语音,它们通过调用引擎接口的SetRecoState方法来实现:

BOOL CSpeechRecognition::Start()

{

if (m_bOnDictation)

return TRUE;

HRESULT hr = m_cpRecoEngine->SetRecoState( SPRST_ACTIVE );

if (FAILED(hr))

return FALSE;

m_bOnDictation = TRUE;

return TRUE;

}

BOOL CSpeechRecognition::Stop()

{

if (! m_bOnDictation)

return TRUE;

HRESULT hr = m_cpRecoEngine->SetRecoState( SPRST_INACTIVE );

if (FAILED(hr))

return FALSE;

m_bOnDictation = FALSE;

return TRUE;

}

函数GetText是获取从语音中已识别出的文字的关键,应该在响应识别事件/消息的响应函数中调用,其代码如下所示。

void CSpeechRecognition::GetText(WCHAR **ppszCoMemText, ULONG ulStart, ULONG nlCount)

{

USES_CONVERSION;

CSpEvent event;

// Process all of the recognition events

while (event.GetFrom(m_cpRecoCtxt) == S_OK)

{

switch (event.eEventId)

{

case SPEI_RECOGNITION:

// There may be multiple recognition results, so get all of them

{

HRESULT hr = S_OK;

if (nlCount == -1)

event.RecoResult()->GetText(SP_GETWHOLEPHRASE,

SP_GETWHOLEPHRASE, TRUE, ppszCoMemText, NULL);

else

{

ASSERT(nlCount > 0);

event.RecoResult()->GetText(ulStart, nlCount, FALSE,

ppszCoMemText, NULL);

}

}

break;

}

}

}

函数InitTokenList调用SpInitTokenComboBox和SpInitTokenListBox函数来实现语音语言在列表或组合列表中的列表显示和选择:

HRESULT CSpeechRecognition::InitTokenList(HWND hWnd, BOOL bIsComboBox)

{

if (bIsComboBox)

return SpInitTokenComboBox(hWnd, SPCAT_RECOGNIZERS);

else

return SpInitTokenListBox(hWnd, SPCAT_RECOGNIZERS);

}

语音识别涉及语音的输入,通常用话筒来输入语音。进行语音识别前,需要判断话筒的位置和设置是否合理,以保证语音识别引擎能获得有效的语音输入。函数MicrophoneSetup调用语音识别引擎接口的DisplayUI方法来显示一个设置话筒的向导,如图11-4所示。示例代码如下所示:

HRESULT CSpeechRecognition::MicrophoneSetup(HWND hWndParent)

{

return m_cpRecoEngine->DisplayUI(hWndParent, NULL, SPDUI_MicTraining,

NULL, 0);

}

语音训练是语音识别的重要基础,为了获得期望的识别效果,必须进行语音训练,以让语音识别引擎熟悉说话者的口音。函数VoiceTraining调用语音识别引擎接口的DisplayUI方法来显示一个语音训练向导,如图11-5所示。示例代码如下所示:

HRESULT CSpeechRecognition::VoiceTraining(HWND hWndParent)

{

return m_cpRecoEngine->DisplayUI(hWndParent, NULL, SPDUI_UserTraining,

NULL, 0);

}

与CText2Speech类似,CSpeechRecognition类也提供错误处理机制,由GetErrorString函数可以获得错误信息。