现在语音技术应用十分广泛,本人也一直在从事这方面的工作,利用MS TTS开发产品,针对中文发音设置的问题,在这里阐述一下自己的实现方法。
void CIMEInfoAcquisitionDlg::SpeakVoice(LPCTSTR csVoice)
{
//com初期化
if (FAILED(CoInitialize(NULL)))
{
AfxMessageBox("Error to intiliaze COM");
return;
}
//文字変換
LPOLESTR lpw = new WCHAR [256];
MultiByteToWideChar(CP_ACP,0,csVoice,-1,lpw,256);
HRESULT hr = S_OK;
if( SUCCEEDED( hr ) )
{
CComPtr<ISpObjectToken> cpVoiceToken;
CComPtr<IEnumSpObjectTokens> cpEnum;
CComPtr<ISpVoice> cpVoice;
ULONG ulCount = 0;
// 建立
hr = cpVoice.CoCreateInstance(CLSID_SpVoice);
LPCSTR name;
name = "Microsoft Simplified Chinese";
CString s; s.Format("Name=%s", name);
WCHAR wName[1024];
MultiByteToWideChar(CP_ACP, 0, s, -1, wName, sizeof(wName));
ISpObjectToken* pToken = NULL;
if(SUCCEEDED(SpFindBestToken(SPCAT_VOICES, NULL, wName, &pToken))){
cpVoice->SetVoice(pToken);
}
//文读
if (SUCCEEDED (hr))
{
hr = cpVoice->Speak( lpw, SPF_DEFAULT, NULL );
}
}
//com的结束
delete [] lpw;
CoUninitialize();
return;
}
以上利用ISpObjectToken接口实现了对中文的阅读,是不是很简单明了:)