首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何设置语音SAPI5

如何设置语音SAPI5
EN

Stack Overflow用户
提问于 2014-01-19 17:32:54
回答 1查看 3.2K关注 0票数 1

我不知道我怎么能设置不同的声音?是!我读了MSDN,但没什么用

ISpVoice * pVoice = NULL,* pv1 = NULL;

代码语言:javascript
运行
复制
if (FAILED(::CoInitialize(NULL)))
    return FALSE;


HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
if( SUCCEEDED( hr ) )
{
    pVoice->SetVolume(100);
    //pVoice->SetVoice();
    hr = pVoice->Speak(L"Hello papa", SPF_IS_XML, NULL);
    pVoice->Release();
    pVoice = NULL;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-20 23:01:10

SAPI中的声音是通过ISpObjectToken选择的。通常,您使用助手函数SpFindBestToken查找最佳令牌,然后使用ISpVoice::SetVoice()选择该令牌:

代码语言:javascript
运行
复制
ISpObjectToken* cpToken(NULL);
SpFindBestToken(SPCAT_VOICES, szRequiredAttribs, L"", &cpToken);
pVoice->SetVoice(cpToken);
cpToken->Release();

现在,唯一的问题是您需要传递给szRequiredAttribs的是什么。这需要是以分号分隔的属性列表。关于SAPI语音属性的最好文档是在对象令牌和注册表设置白皮书中,特别是声音部分。它说,所有的声音都必须支持以下属性:

  • 供应商(TTS引擎供应商名称)
  • 语言(这个引擎讲的语言的六角形的LCID )
  • 性别(男声为“男性”,女性为“女性”)
  • VendorPreferred (如果这是在供应商中指定的供应商的默认声音)
  • 名称(表示与语言无关的名称的字符串)

这不是属性的独占列表;其他属性可能由供应商定义。

因此,如果您想要微软的首选语音,您可以设置szRequiredAttribs = L"vendor=microsoft;vendorpreferred"。如果你想要一个男性的声音(从任何供应商),设置szRequiredAttribs = L"gender=male"

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21220156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档