TTS API (一)

language = 409 ,说明我们要创建的是一个 English TTS engine

 

指定TTS的language的多种方法:

 

(一)

CComPtr<ISpVoice> cpVoice;

CComPtr<ISpObjectToken> cpVoiceToken;

//--like last step

SpFindBestToken(SPCAT_VOICES, L"Language=409", NULL, &cpVoiceToken);

//--now create object

//SpCreateObjectFromToken(cpVoiceToken, &cpVoice);

 
hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&
cpVoice );

 

cpVoice ->SetVoice(cpVoiceToken); // 设置 english TTS Voic


 

(二)

CcomPtr<IEnubjectTokens>  cpIEnum;

hr = SpEnumTokens(SPCAT_VOICES, L"Language=409", NULL

, &pEnum);

 

CComPtr<ISpObjectToken>             cpVoiceToken;

hr = cpEnum->Next( 1, &cpVoiceToken, NULL );

 

ISpVoice * pVoice = NULL;
hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);

 

pVoice->SetVoice(cpVoiceToken); // 设置 english TTS Voic

 

(三)

  ISpVoice * pVoice = NULL;
 hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);

 hr = pVoice->Speak(L"< voice required='Language=409'/ >Hi, <voice required='Language=804'/> 欢迎来到中国。 ", SPF_IS_XML, NULL);

 ( )

 ISpVoice * pVoice = NULL;
 HRESULT                             hr = S_OK;
 CComPtr<ISpDataKey>                    cpTokenKey;
 CComPtr<ISpObjectToken>             cpVoiceToken;
 CComPtr<IEnumSpObjectTokens>        cpEnum;
 ULONG                               ulCount = 0;

 if (FAILED(::CoInitialize(NULL)))
    return FALSE;

 hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);

 //Enumerate the available voices
 if(SUCCEEDED(hr))
     hr = SpEnumTokens(SPCAT_VOICES, NULL, NULL, &cpEnum);
 //Get the number of voices
 if(SUCCEEDED(hr))
     hr = cpEnum->GetCount(&ulCount);

 BOOL bFind = FALSE;
 LANGID lid = 0x409; //
指定 voice English

 // Obtain a list of available voice tokens, set the voice to the token, and call Speak
 while (SUCCEEDED(hr) && ulCount -- )
 {
     cpVoiceToken.Release();
     if(SUCCEEDED(hr))
          hr = cpEnum->Next( 1, &cpVoiceToken, NULL );
           
           
     WCHAR *strTemp = NULL;
     int iIndex = 0;
     cpTokenKey.Release();

     HRESULT hr2 = cpVoiceToken->OpenKey(_T("Attributes"), &cpTokenKey);
     if (SUCCEEDED(hr2))
     {
          cpTokenKey->GetStringValue(_T("Language"), &strTemp);
          ::CoTaskMemFree(strTemp);

          LANGID lTempID = (LANGID)wcstol(strTemp, NULL, 16);
          if (lTempID == lid)
          {
              pVoice->SetVoice(cpVoiceToken);
              break;
           }
      }
 }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值