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/
  • 相关阅读:
    Why Visual Studio Team System Isn't A LoadRunner Killer[转载]
    从键盘判断电脑主人
    LoadRunner中添加weblogic监视器(JMX)
    winrunner事务概念的代码应用(毫秒级)
    Delphi中的线程类
    换工作时如何提高自身的待遇(转贴)
    牛人是怎样用函数实现本地化测试的
    肯德基的见闻
    由 12306.cn 谈谈网站性能技术
    20个优秀的 CSS 网格系统(CSS Grid Systems)推荐
  • 原文地址:https://www.cnblogs.com/muzizongheng/p/3166582.html
Copyright © 2011-2022 走看看