В настоящее время я разрабатываю приложение UWP DLL с использованием пространства имен Windows::Media::SpeechSynthesis
. Я создал функцию, которая позволяет мне произносить введенный текст, который выглядит следующим образом:
int TextToSpeechUwpDll::ttsSpeak( const char* text )
{
SpeechSynthesizer ^speak = ref new SpeechSynthesizer();
MediaPlayer ^player = ref new MediaPlayer;
int wchars_num = MultiByteToWideChar( CP_ACP, 0, text, -1, NULL, 0 );
wchar_t* texts = new wchar_t[wchars_num];
MultiByteToWideChar( CP_ACP, 0, text, -1, texts, wchars_num );
String ^sentence = ref new String( texts );
task<SpeechSynthesisStream ^> speakTask = create_task( speak->SynthesizeTextToStreamAsync( sentence ) );
speakTask.then( [player, sentence]( SpeechSynthesisStream ^speechStream )
{
player->Source = MediaSource::CreateFromStream( speechStream, speechStream->ContentType );
player->AutoPlay = true;
player->Play();
Sleep( 3000 );
} );
return true;
}
Тем не менее, Sleep( 3000 );
необходимо удалить, потому что когда я ввожу предложение, оно произносится только в течение 3 секунд, что означает, что если оно длиннее, то остальные не будут произноситься.
Я пытался удалить эту строку, но когда я делаю это, ничего не говорится вообще. Звук не выходит. Увеличение продолжительности не решает мою проблему.
Что мне нужно, так это умение произносить предложение без ограничения по времени. У кого-то была эта проблема раньше?