#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. 四、Silverlight中使用MVVM(四)——演练

    本来打算用MVVM实现CRUD操作的,这方面例子网上资源还挺多的,毕竟CRUD算是基本功了,因为最近已经开始学习Cailburn框架了,感觉时间 挺紧的,这篇就实现其中的更新操作吧. 功能很明确,当我 ...

  2. 真正入坑git

    之前使用git一直用sourceTree可视化操作,直到今天刚好装不了sourceTree,所有只能苦逼的用git命令行了,真的一片空白,要做下笔记才行. 创建sshKey 创建ssh: ssh-ke ...

  3. Windows系统下正确安装MongoDB

    1.下载.安装 官网下载: http://www.mongodb.org/downloads 下载好之后,接下来进行安装了: 2.创建数据文件夹 MongoDB将数据文件夹存储在 db 文件夹下. 可 ...

  4. python 基础 1.5 python数据类型(三)--元组常用方法示例

    #/usr/bin/python#coding=utf-8#@Time :2017/10/13 15:02#@Auther :liuzhenchuan#@File :元组.py #tuple() 字符 ...

  5. 观察OnPaint与OnIdle与OnSize事件

    import wx class SketchWindow(wx.Window): def __init__(self, parent, ID): wx.Window.__init__(self, pa ...

  6. ProgressBar+WebView实现自定义浏览器

    当我们使用浏览器浏览网页时,总会看到下图页面的样子,上面是一个地址栏,地址栏下面显示加载进度,加载完成后进入页面内容,带颜色的进度条总是少不了的,那样子看起来也舒服,如何实现自定义手机浏览器功能呢? ...

  7. Linux搭建FTP服务器实战

    首先准备一台Linux系统机器(虚拟机也可), 检测出是否安装了vsftpd软件: rpm -qa |grep vsftpd 如果没有输出结果,就是没有安装. 使用命令安装,安装过程中会有提示,直接输 ...

  8. long_query_time 设置不生效问题

    由于原来的慢查询日志太大了,有1G多,并且其中包含上一次查询优化前的慢sql,所以想收集最近两天的慢查询语句,故 mysql> show global variables like 'slow% ...

  9. 9patch图片

    9patch图片可直接缩放,放在drawable文件夹下就可以 右边和下边指定内容区域

  10. Wannafly挑战赛12 A 银行存款 【DP】【DFS】

    链接:https://www.nowcoder.com/acm/contest/79/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...