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

TTS API 使用的更多相关文章

  1. csharp:Google TTS API text to speech

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  2. android用讯飞实现TTS语音合成 实现中文版

    Android系统从1.6版本开始就支持TTS(Text-To-Speech),即语音合成.但是android系统默认的TTS引擎:Pic TTS不支持中文.所以我们得安装自己的TTS引擎和语音包. ...

  3. C# 百度TTS,文本转语音,RestAPI之Get请求

    因为用得到,所以作个记录: 代码如下: public class BaiduTTSService : IBaiduTTSService { public string tok = GetBaiduTo ...

  4. 百度语音合成api/sdk及demo

    1.流程 1)换取token 用Api Key 和 SecretKey.访问https://openapi.baidu.com/oauth/2.0/token 换取 token // appKey = ...

  5. Android文字转语音

    虽然视觉上的反馈通常是给用户提供信息最快的方式,但这要求用户把注意力设备上.当用户不能查看设备时,则需要一些其他通信的方法.Android提供了强大的文字转语音Text-to-Speech,TTS A ...

  6. Chrome扩展及应用开发

    Chrome扩展及应用开发(电子书) http://www.ituring.com.cn/minibook/950 文档 官方 https://developer.chrome.com/extensi ...

  7. c#一些操作

    C# FileStream 按大小分段读取文本内容 using System.IO; namespace FileStreamRead { class Program { static void Ma ...

  8. 【TTS】文本转语音?如何不调用第三方api来实现,使用pyttsx3

    @ 目录 前言 安装pyttsx3 实现TTS接口 后言 前言 本次的实现需求有点困难,所以也就记录下来,别到时候都忘了. 首先先不说正题,有兴趣的可以看一看: 1.目标是实现一个可以传一个文本就返回 ...

  9. C#语音朗读文本 — TTS的实现

    TTS, Text To Speech的缩写,是使用语音朗读文本的技术.目前,在国内应用较多的是排队叫号系统 Windows 平台的TTS,通常使用的是微软自带的 Speech API. Window ...

随机推荐

  1. wifi认证Portal开发系列(一):Radius与FreeRadius简介

    RADIUS 维基百科上的介绍: Remote Authentication Dial-In User Service (RADIUS) is a networking protocol that p ...

  2. cocos2d-x AssetsManager libcurl使用心得

    libcurl使用心得 最新正在写cocosclient更新的逻辑.研究了一下cocos2d-x自带的Libcurl,下面是自己在使用过程中的心得和遇到的未解问题.希望大家一起讨论一下,欢迎大家指导. ...

  3. jqPaginator-master | kkpager-master 这两个分页插件的使用方法

    首先:百度"分页插件" 就会 找到这条链接: url=X8P3UpOM-6ceSfjdngX0oh9cNmVwSDy94CxKqWIazhyZ7If4S8wgpPqyEGUhk2t ...

  4. H2 database 应用

    以前对内存表的引用一直采用sqllite,由于sqllite对字段的局限性无法满足需要.后来对h2 有了一定青睐做了下应用.下面对h2进行介绍. 1. H2数据库引擎 H2数据库由Java编写的,它可 ...

  5. springcloud与docker微服务架构实战--笔记

    看了<微服务那些事>之后,Spring boot和Spring Cloud的关系理清楚了,Spring cloud各个模块的作用也了解了. 但是,Spring cloud 与Docker的 ...

  6. 使用OpenSessionInViewFilter的注意事项

    假设在你的应用中Hibernate是通过spring 来管理它的session.如果在你的应用中没有使用OpenSessionInViewFilter或者OpenSessionInViewInterc ...

  7. 箭头函数 this arrow function 无this

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions import w ...

  8. PECL的安装和使用

    下载并安装pear脚本 cd /usr/local/php/bin/ curl -o go-pear.php http://pear.php.net/go-pear.phar ./php go-pea ...

  9. .net 开源框架--转载

    Json.NET http://json.codeplex.com/ Json.Net 是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单.通过Li ...

  10. 使用 Nginx 提升网站访问速度(转)

    Nginx 简介 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Ig ...