TTS API 使用

2016-08-20 10:36:53来源:http://muzizongheng.blog.51cto.com/856912/1333112作者:muzizongheng人点击


<?xml version="1.0" encoding="UTF-8"?>
#define SPCAT_VOICES L"HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Speech//Voices"#define SPKEY_ATTRIBUTES L"Attributes"#define SPVALUE_LANGUAGE L"Language"BOOL CActionCenter::InitializeSAPI(){ReleaseSAPI();
HRESULT hr;
hr = m_cpVoice.CoCreateInstance( CLSID_SpVoice );if(hr == S_OK){ISpObjectToken * pToken; // NOTE: Not a CComPtr! Be Careful.CComPtr<IEnumSpObjectTokens> cpEnum;hr = SpEnumTokens(SPCAT_VOICES, L"", L"", &cpEnum);if (hr == S_OK){bool fSetDefault = false;while (cpEnum->Next(1, &pToken, NULL) == S_OK){//CSpDynamicString dstrDesc;//hr = SpGetDescription(pToken, &dstrDesc);//if (SUCCEEDED(hr)){m_vecISpToken.push_back(pToken);}
}
return (m_vecISpToken.size() > 0);}}
return FALSE;}
void CActionCenter::ReleaseSAPI(){vector<ISpObjectToken*>::iterator it;
for(it=m_vecISpToken.begin(); it!=m_vecISpToken.end(); ++it){(*it)->Release();}
m_vecISpToken.clear();}
void CActionCenter::SetVoice(LANGID lid){vector<ISpObjectToken*>::iterator it;
WCHAR wstrLangID[32] = {0};swprintf(wstrLangID, L"%X", lid);
for(it=m_vecISpToken.begin(); it!=m_vecISpToken.end(); ++it){ISpObjectToken *pToken = (*it);
ISpDataKey *pSpDataKeyAttributes = NULL;HRESULT hr = pToken->OpenKey(SPKEY_ATTRIBUTES, &pSpDataKeyAttributes);if(SUCCEEDED(hr)){WCHAR *wstrLanguageID = NULL;hr = pSpDataKeyAttributes->GetStringValue(SPVALUE_LANGUAGE, (WCHAR**)&wstrLanguageID);if(SUCCEEDED(hr)){if(wcsstr((BSTR)wstrLanguageID, (BSTR)wstrLangID)){m_cpVoice->SetVoice(pToken);break;}
}
pSpDataKeyAttributes->Release();}
}}

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台