我不知道我怎么能设置不同的声音?是!我读了MSDN,但没什么用
ISpVoice * pVoice = NULL,* pv1 = NULL;
if (FAILED(::CoInitialize(NULL)))
return FALSE;
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
if( SUCCEEDED( hr ) )
{
pVoice->SetVolume(100);
//pVoice->SetVoice();
hr = pVoice->Speak(L"Hello papa", SPF_IS_XML, NULL);
pVoice->Release();
pVoice = NULL;
}
发布于 2014-01-20 23:01:10
SAPI中的声音是通过ISpObjectToken
选择的。通常,您使用助手函数SpFindBestToken
查找最佳令牌,然后使用ISpVoice::SetVoice()选择该令牌:
ISpObjectToken* cpToken(NULL);
SpFindBestToken(SPCAT_VOICES, szRequiredAttribs, L"", &cpToken);
pVoice->SetVoice(cpToken);
cpToken->Release();
现在,唯一的问题是您需要传递给szRequiredAttribs
的是什么。这需要是以分号分隔的属性列表。关于SAPI语音属性的最好文档是在对象令牌和注册表设置白皮书中,特别是声音部分。它说,所有的声音都必须支持以下属性:
这不是属性的独占列表;其他属性可能由供应商定义。
因此,如果您想要微软的首选语音,您可以设置szRequiredAttribs = L"vendor=microsoft;vendorpreferred"
。如果你想要一个男性的声音(从任何供应商),设置szRequiredAttribs = L"gender=male"
。
https://stackoverflow.com/questions/21220156
复制相似问题