Я не понимаю, как я могу установить другой голос? Да! Я прочитал 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;
}
Голоса в SAPI выбираются через ISpObjectToken
. Обычно используется вспомогательная функция SpFindBestToken
чтобы найти лучший токен, а затем используйте ISpVoice :: SetVoice (), чтобы выбрать этот токен:
ISpObjectToken* cpToken(NULL);
SpFindBestToken(SPCAT_VOICES, szRequiredAttribs, L"", &cpToken);
pVoice->SetVoice(cpToken);
cpToken->Release();
Теперь единственная проблема заключается в том, что вам нужно передать szRequiredAttribs
, Это должен быть список атрибутов, разделенных точкой с запятой. Лучшая документация для голосовых атрибутов SAPI находится в Токены объектов и настройки реестра в частности, в разделе «Голоса». Там говорится, что все голоса должны поддерживать следующие атрибуты:
Это не эксклюзивный список атрибутов; другие атрибуты могут быть определены поставщиком.
Итак, если вы хотите предпочитаемый голос от Microsoft, вы бы установили szRequiredAttribs = L"vendor=microsoft;vendorpreferred"
, Если вам нужен мужской голос (от любого поставщика), установите szRequiredAttribs = L"gender=male"
,
Других решений пока нет …