ISpObjectTokenCategory :: SetId返回失败的hr

时间:2015-03-05 05:19:39

标签: c++ com sapi

我正在将Visual Studio Express 2013用于桌面,并面临女性语音中文本到语音转换的问题。为此,我使用了ISpObjectTokenCategory :: EnumTokens。

我使用hr = pObjectTokenCategory-> SetId(SPCAT_VOICES,false)来执行此操作。但hr失败,值为0x8004503a。 如果我使用其他令牌类别ID,例如SPCAT_RECOGNIZERS,则hr为S_OK。它仅对SPCAT_VOICES类别失败。

以下是我的C ++代码 -

hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_INPROC_SERVER, __uuidof(ISpVoice), (void**)&pSpVoice);
if (FAILED(hr))
{
    cout << "Failed to get pSpVoice interface by CoCreateInstance" << endl;
    return hr;
}

hr = CoCreateInstance(CLSID_SpObjectTokenCategory, NULL, CLSCTX_INPROC_SERVER, __uuidof(ISpObjectTokenCategory), (void**)&pObjectTokenCategory);
if (FAILED(hr))
{
    cout << "Failed to get ObjectTokenCategory by cocreateInstance" << endl;
    return hr;
}

hr = pObjectTokenCategory->SetId(SPCAT_VOICES, false);
if (FAILED(hr))
{
    cout << "Failed to set Voice Category" << endl;
    return hr;
}

hr = pObjectTokenCategory->EnumTokens(L"Language=409,Gender=Female;", NULL, &pSpEnumTokens);
if (FAILED(hr))
{
    cout << "Failed to get EnumTokens" << endl;
    return hr;
}

如何解决SP_VOICES类别?

1 个答案:

答案 0 :(得分:0)

0x8004503aSPERR_NOT_FOUND(您可以在sperror.h中找到SAPI错误定义)。

这表示找不到SPCAT_VOICES注册表项;你确定你安装了TTS声音(任何类型)吗?