zoukankan      html  css  js  c++  java
  • TTS API 使用


    #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();
                }

          }
    }
    https://muzizongheng.blog.csdn.net/
  • 相关阅读:
    b_51_回文串划分(预处理+dp)
    b_lg_最长前缀(kmp+dfs / 优化dp)
    b_51_字符串中的最大值(next数组+倒序递推)
    b_51_凑数字(小思维+贪心)
    多测师讲解selenium(11)--定位练习题归纳_高级讲师肖sir
    多测师讲解 _ Unittest框架_高级讲师肖sir(unittest002)
    多测师讲解课堂(012) _ Unittest框架(006)_高级讲师肖sir(unittest)
    多测师讲解___测试点____高级讲师肖sir
    多测师课堂020_第一个月综合考试题 _高级讲师肖sir
    第二个月课堂011讲解selenium(001)
  • 原文地址:https://www.cnblogs.com/muzizongheng/p/3166582.html
Copyright © 2011-2022 走看看