我没有意识到我怎么能设置一些不同的声音?是!我读过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;
}
答案 0 :(得分:2)
通过ISpObjectToken
选择SAPI中的语音。通常使用辅助函数SpFindBestToken
来查找最佳标记,然后使用ISpVoice :: SetVoice()来选择该标记:
ISpObjectToken* cpToken(NULL);
SpFindBestToken(SPCAT_VOICES, szRequiredAttribs, L"", &cpToken);
pVoice->SetVoice(cpToken);
cpToken->Release();
现在,唯一的问题是您需要为szRequiredAttribs
传递的内容。这需要是以分号分隔的属性列表。有关SAPI语音属性的最佳文档,请参见Object Tokens and Registry Settings白皮书,特别是“语音”部分。在那里,它说所有声音都必须支持以下属性:
这不是属性的独家列表;其他属性可以由供应商定义。
因此,如果您想要Microsoft的首选语音,您可以设置szRequiredAttribs = L"vendor=microsoft;vendorpreferred"
。如果您想要男声(来自任何供应商),请设置szRequiredAttribs = L"gender=male"
。