#define SPCAT_VOICES           L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices"
#define SPKEY_ATTRIBUTES         L"Attributes"
#define SPVALUE_LANGUAGE         L"Language"
BOOL CActionCenter::InitializeSAPI()
{
      ReleaseSAPI();

      HRESULT hr;

      hr = m_cpVoice.CoCreateInstance( CLSID_SpVoice );
      if(hr == S_OK)
      {
            ISpObjectToken * pToken;        // NOTE:  Not a CComPtr!  Be Careful.
            CComPtr<IEnumSpObjectTokens> cpEnum;
            hr = SpEnumTokens(SPCAT_VOICES, L"", L"", &cpEnum);
            if (hr == S_OK)
            {
                  bool fSetDefault = false;
                  while (cpEnum->Next(1, &pToken, NULL) == S_OK)
                  {
                        //CSpDynamicString dstrDesc;
                        //hr = SpGetDescription(pToken, &dstrDesc);
                        //if (SUCCEEDED(hr))
                        {
                              m_vecISpToken.push_back(pToken);
                        }

                  }

                  return (m_vecISpToken.size() > 0);
            }
      }

      return FALSE;
}

void CActionCenter::ReleaseSAPI()
{
      vector<ISpObjectToken*>::iterator it;

      for(it=m_vecISpToken.begin(); it!=m_vecISpToken.end(); ++it)
      {
            (*it)->Release();
      }

      m_vecISpToken.clear();
}

void CActionCenter::SetVoice(LANGID lid)
{
      vector<ISpObjectToken*>::iterator it;

      WCHAR wstrLangID[32] = {0};
      swprintf(wstrLangID, L"%X", lid);

      for(it=m_vecISpToken.begin(); it!=m_vecISpToken.end(); ++it)
      {
            ISpObjectToken *pToken = (*it);

            ISpDataKey *pSpDataKeyAttributes = NULL;
            HRESULT hr = pToken->OpenKey(SPKEY_ATTRIBUTES, &pSpDataKeyAttributes);
            if(SUCCEEDED(hr))
            {
                  WCHAR *wstrLanguageID = NULL;
                  hr = pSpDataKeyAttributes->GetStringValue(SPVALUE_LANGUAGE, (WCHAR**)&wstrLanguageID);
                  if(SUCCEEDED(hr))
                  {
                        if(wcsstr((BSTR)wstrLanguageID, (BSTR)wstrLangID))
                        {
                              m_cpVoice->SetVoice(pToken);
                              break;
                        }

                  }

                  pSpDataKeyAttributes->Release();
            }

      }
}

相关文章:

  • 2021-12-09
  • 2022-12-23
  • 2021-09-24
  • 2021-12-19
  • 2021-05-12
  • 2022-01-23
  • 2022-12-23
  • 2021-06-14
猜你喜欢
  • 2021-11-30
  • 2021-05-13
  • 2022-12-23
  • 2021-05-23
  • 2022-12-23
  • 2021-11-15
相关资源
相似解决方案