Я понимаю, что SAPI может использовать SSML с SPF_PARSE_SSML
, однако я не смог заставить это работать, всегда получая ошибку SPERR_UNSUPPORTED_FORMAT
.Нужно ли что-то еще, чтобы включить это?Особые голоса, какой-то дополнительный флаг?
Я попытался установить разные голоса явно (на моем компьютере с Win 10, похоже, есть «Microsoft Hazel Desktop» и «Microsoft Zira Desktop»), разные теги с объявлением XML или без него.
#include <Windows.h>
#include <sapi.h>
#include <stdexcept>
int main()
{
HRESULT hr;
if (FAILED(hr = CoInitialize(NULL)))
return 1;
ISpVoice *voice;
if (FAILED(hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)& voice)))
return 1;
// Works
const wchar_t *text = L"Testing SAPI support for S S M L";
if (FAILED(hr = voice->Speak(text, SPF_IS_NOT_XML, NULL)))
return 1;
// Fails 0x80045003 SPERR_UNSUPPORTED_FORMAT
const wchar_t *ssml =
L"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
L"<speak xmlns=\"http://www.w3.org/2001/10/synthesis\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" version=\"1.0\">\n"
L"Testing SAPI support for <break time=\"500ms\"/>S<break time=\"500ms\"/>S<break time=\"500ms\"/>M<break time=\"500ms\"/>L.\n"
L"</speak>";
if (FAILED(hr = voice->Speak(ssml, SPF_IS_XML | SPF_PARSE_SSML, NULL)))
return 1;
return 0;
}