Реализация языков платформы речи Microsoft в SAPI 5 - PullRequest
0 голосов
/ 13 февраля 2019

Я создал небольшую программу на C ++, где я использую библиотеку SAPI.В моем коде я перечисляю количество голосов, установленных в моей системе.Когда я компилирую, я получаю 11, но там установлено только 8, и единственный голос говорит - Microsoft Anna.Я проверил это в реестре (HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Speech \ Voices).У меня установлено несколько языков, особенно языки из Microsoft Speech Platform, но ни один из них не может быть использован.

Installed languages

Кроме того, когда я меняю идентификатор голоса, яполучаю необработанное исключение ошибки, и я думаю, что это потому, что выбранный идентификатор не существует.

Вот мой код

#include "stdafx.h"

int main( int argc, char* argv[] )
{

CComPtr<ISpObjectToken>         cpVoiceToken;
CComPtr<IEnumSpObjectTokens>    cpEnum;
ISpVoice *                      pVoice = NULL;
ULONG                           count = 0;
string                          str;

if( FAILED( ::CoInitialize( NULL ) ) )
return FALSE;

HRESULT hr = CoCreateInstance( CLSID_SpVoice, NULL, CLSCTX_ALL, 
IID_ISpVoice, ( void ** )&pVoice );

if( SUCCEEDED( hr ) )
{
   //Enumerate Voices
   hr = SpEnumTokens( SPCAT_VOICES, NULL /*L"Gender=Female"*/, NULL, &cpEnum);
   printf( "Success\n" );
}
else
{
   printf( "Failed to initialize SAPI" );
}

if( SUCCEEDED( hr ) )
{
  //Get number of voices
  hr = cpEnum->GetCount( &count );
  printf( "TTS voices found: %i\n", count );
}
else
{
   printf( "Failed to enumerate voices" );
   hr = S_OK;
}

if( SUCCEEDED( hr ) )
{
   cpVoiceToken.Release();

   cpEnum->Item( 3, &cpVoiceToken ); //3 represents the ID of the voice

   pVoice->SetVoice( cpVoiceToken );
   hr = pVoice->Speak( L"You have selected Microsoft Server Speech Text to Speech Voice (en-GB, Hazel) as the computer's default voice.", 0, NULL ); //speak sentence
   pVoice->Release();
   pVoice = NULL;
}

::CoUninitialize();
system( "PAUSE" );

}

Единственный голос работает, Microsoft Microsoft, и я непонимаю почему.Если другие языки были недоступны, программа не покажет мне, что их так много (11).Интересно, совместимы ли языки платформы Microsoft Speech Platform с SAPI?

1 Ответ

0 голосов
/ 13 февраля 2019

После многих попыток и неудач мне удалось найти ответ на мою проблему.Я скомпилировал свою программу в Win32.Поэтому я решил изменить его на x64 и перекомпилировал решение.Я изменил голосовой идентификатор в моей программе, и голоса из платформы речи Microsoft сработали.Это означает, что языки MS Speech Platform - это 64-битные голоса, а Microsoft Anna - 32-битный.

enter image description here

Следующая запись вдохновил меня.

...