TTS API 使用
2024-09-08 09:22:21
#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();
}
}
}
最新文章
- gRPC .NET Core跨平台学习
- linux 最小安装 需要的后续操作
- string.Format格式化
- 有些网站为什么要使用CDN,CDN又是什么呢
- PLSQL_查询已执行SQL的绑定参数(案例)
- 封装SqliteHelper类--Sqlite数据库
- Linux报too many open files的解决方案
- 在Xbox和Hololens 上部署、调试UWP App
- MySQL Sniffer
- 学习MVC之租房网站(三)-编写实体类并创建数据库
- TLS1.0和TLS1.1的区别
- java oop详解
- phone number
- 全志A33 lichee 搭建Qt App开发环境编写helloworld
- Cracking The Coding Interview 9.1
- Piwik学习 -- 插件开发
- 代码:PC 链接列表面板border的一种做法(每行之间有分割线)
- eclipse gradle插件 org.gradle.tooling.GradleConnectionException: Could not install Gradle distribution from &#39;https://services.gradle.org/distributions/gradle-3.4-bin.zip&#39;.
- swiper跳转制定页面
- centos下gitlab私服完整安装部署(nginx+MySQL+redis+gitlab-ce+gitlab-shell+)
热门文章
- 【WPF学习笔记】之如何点击“新建”按钮,在面板中加载一条条的“用户控件”的信息:动画系列之(四)
- cocos2d-x 下使用加密 sqlite3
- php类中const
- webpy使用mysql数据库操作(web.database)
- mongo 介绍
- springcloud微服务实战--笔记--1、基础知识
- Tomcat学习笔记【3】--- Tomcat目录结构
- VirtualBox创建VM结果ProcessorType是空的
- c语言高速推断一个数是偶数还是奇数
- imagick图片压缩。