Microsoft Speech Platform: SPF_NLP_SPEAK_PUNC не работает

Я использую Speech Platform для TTS (преобразование текста в речь).

Я хочу получить речевые выходы с произношением символов (знаков препинания).

MSDN говорит:

 ISpVoice::Speak speaks the contents of a text string or file.

  HRESULT Speak(
    LPCWSTR       *pwcs,
    DWORD          dwFlags,
    ULONG         *pulStreamNumber
  );
  ...
  dwFlags
     [in] Flags used to control the rendering process for this call. The flag values are contained in the SPEAKFLAGS enumeration.
  ... 

http://msdn.microsoft.com/en-us/library/speechplatform_ispvoice_speak.aspx

SPEAKFLAGS
  ...
  SPF_NLP_SPEAK_PUNC
     Punctuation characters should be expanded into words (for example, "This is a sentence." would become "This is a sentence period").
  ...

http://msdn.microsoft.com/en-us/library/speechplatform_speakflags.aspx

поэтому я написал код ниже:

#define TOKEN_ID L"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech Server\\v11.0\\Voices\\Tokens\\TTS_MS_en-US_Helen_11.0"

int main(void) {
    CoInitialize(NULL);
    ISpVoice* spVoice = NULL;
    CoCreateInstance(CLSID_SpVoice, NULL,
        CLSCTX_INPROC_SERVER, IID_ISpVoice, (void**)&spVoice);

    ISpObjectToken* token = NULL;
    SpGetTokenFromId(TOKEN_ID, &token, FALSE);
    spVoice->SetVoice(token);

    spVoice->Speak(L"This is a sentence.",
        SPF_DEFAULT | SPF_NLP_SPEAK_PUNC, NULL);
    CoUninitialize();
    return 0;   
}

Но это не работает, как ожидалось. Это выводит речь «это предложение», а не «точка».

Пожалуйста помогите.


person higuri    schedule 06.03.2014    source источник
comment
Какой голос вы используете?   -  person Eric Brown    schedule 06.03.2014


Ответы (1)


Судя по вашему коду, вы используете голоса сервера. Эти голоса (насколько я могу судить) не поддерживают SPF_NLP_SPEAK_PUNC.

person Eric Brown    schedule 06.03.2014
comment
Спасибо за ваш ответ, и я прошу прощения за мой поздний ответ. Вы имеете в виду, что «голос сервера» - это «механизм преобразования текста в речь Microsoft»? Я использую его, загруженный с сайта Microsoft. Существуют ли другие варианты использования голоса en-US на платформе Microsoft Speech Platform? - person higuri; 11.03.2014
comment
У Microsoft есть два разных набора механизмов TTS, оптимизированных для разных целей. У них точно такой же API пользовательского уровня; вы выбираете механизм TTS через токен. Если вы используете настольный движок (например, используете токен "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_DAVID_11.0", то у вас будет голос, поддерживающий SPF_NLP_SPEAK_PUNC. Если вы подробно расскажете о том, зачем вам нужны голоса Speech Server, это поможет , слишком. - person Eric Brown; 11.03.2014
comment
Спасибо за подробное объяснение. Я получил голос, поддерживающий SPF_NLP_SPEAK_PUNC, с помощью голосового движка desktop (в моем случае MS-Anna). Не было особой причины, по которой я использовал голос сервера. Я не знал разницы между настольной версией и серверной версией. Так что ваш другой ответ также был полезен для меня. Спасибо! - person higuri; 12.03.2014