下面一段实现发音,请问如何更换发音人(Mary,Mike,Sam...)? ISpVoice * pVoice = NULL;
if (FAILED(CoInitialize(NULL)))
{
AfxMessageBox("Error to intiliaze COM");
return;
}
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
if( SUCCEEDED( hr ) )
{
hr = pVoice->Speak(L"You have ask for help.", 0, NULL);
pVoice->Release();
pVoice = NULL;
}
::CoUninitialize();
if (FAILED(CoInitialize(NULL)))
{
AfxMessageBox("Error to intiliaze COM");
return;
}
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
if( SUCCEEDED( hr ) )
{
hr = pVoice->Speak(L"You have ask for help.", 0, NULL);
pVoice->Release();
pVoice = NULL;
}
::CoUninitialize();
解决方案 »
- 在视图类,要改变窗口listview的大小////listview的ID怎么得到啊
- VC2008中如何创建MFC应用程序
- VC另存Excel只有到U盘是出错,到其它的路径都正常
- 新建一个进程失败,急求解决方法
- vc中怎样打开一个网页?谢谢!!!
- RtlZeroMemory这个API函数是实现填0功能的,请问Rtl是什么单词的缩写?
- 左边用了一个controlbar,然后放了一个tabbar,在其中一页放了一个dialog(急!!!!!!!!!!!!!!!!!!)
- 各位大虾在ADO中如何读取一个SQL语句的结果呀
- !视图更改后如何通知文档更新!
- 请教大侠怎么动态改变ScrollView视图的大小?
- 有懂ACIS编程?高手指教
- 关于两个不同list控件数据的拖拽操作,怎么做?
CComPtr<ISpObjectToken> cpVoiceToken;
CComPtr<IEnumSpObjectTokens> cpEnum;
CComPtr<ISpVoice> cpVoice;
ULONG ulCount = 0;
// Create the SAPI voice
if(SUCCEEDED(hr))
hr = cpVoice.CoCreateInstance( CLSID_SpVoice );
//Enumerate the available voices
if(SUCCEEDED(hr))
hr = SpEnumTokens(SPCAT_VOICES, NULL, NULL, &cpEnum);
//Get the number of voices
if(SUCCEEDED(hr))
hr = cpEnum->GetCount(&ulCount);
// Obtain a list of available voice tokens, set the voice to the token, and call Speak
while (SUCCEEDED(hr) && ulCount -- )
{
cpVoiceToken.Release();
if(SUCCEEDED(hr))
hr = cpEnum->Next( 1, &cpVoiceToken, NULL );
if(SUCCEEDED(hr))
hr = cpVoice->SetVoice(cpVoiceToken);
if(SUCCEEDED(hr))
hr = cpVoice->Speak( L"How are you?", SPF_DEFAULT, NULL);
}
hr = cpVoice->Speak( L"How are you?", SPF_DEFAULT, NULL);
这一句不能出声.能不能在我的代码中改一下?
你的问题是不是出现在嵌入式下,我现在也遇到了这样的问题,但不是台式机上。
我的程序初始化能成功,但在发音的时候就不行了。
我的问题如下:
http://www.csdn.net/expert/topic/997/997810.xml?temp=.3285486
BOOL CTts::SetMan(UINT uMan)
{
ISpObjectToken *pToken = NULL; // Token interface pointer
CComPtr<IEnumSpObjectTokens> cpEnum; // Pointer to token enumerator
ULONG ulIndex = 0;
ULONG ulNumTokens;
UINT i=0;
HRESULT hr = SpEnumTokens(SPCAT_VOICES, NULL, NULL, &cpEnum);
if ( S_OK == hr )
{
hr = cpEnum->GetCount( &ulNumTokens ); if ( SUCCEEDED( hr ) && 0 != ulNumTokens && ulNumTokens>=uMan )
{
while(cpEnum->Next(1, &pToken, NULL) == S_OK)
{
i++;
if(i==uMan)
{
hr = m_cpVoice->Speak( NULL, SPF_PURGEBEFORESPEAK, 0);
// 设置新的引擎
if (SUCCEEDED (hr) )
{
hr = m_cpVoice->SetVoice( pToken );
}
break;
}
pToken->Release();
pToken = NULL;
}
}
}
if (SUCCEEDED (hr) )
return TRUE;
else
return FALSE;
}
m_cpVoice->Speak( L"china is a great country !", SPF_PURGEBEFORESPEAK, 0);
cpVoice->Speak( L"How are you?", SPF_DEFAULT, NULL);
改成
cpVoice->Speak( L"How are you?", SPF_ASYNC, NULL);
就可以了,我已经实现了有没有人用过SAPI4
[email protected]