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

      }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值