У меня есть следующий код C++/CX:функция SpeechSynthesizer :: SynthesizeTextToStreamAsync принимает навсегда
Windows::Media::SpeechSynthesis::SpeechSynthesizer^ synth = ref new Windows::Media::SpeechSynthesis::SpeechSynthesizer();
Platform::String^ text = "This is a string of text.";
concurrency::create_task(synth->SynthesizeTextToStreamAsync(text))
.then([&](Windows::Media::SpeechSynthesis::SpeechSynthesisStream^ stream) {
mediaElement->AutoPlay = true;
mediaElement->SetSource(stream, stream->ContentType);
mediaElement->Play();
});
Если я правильно понимаю, предполагается синтезировать строку This is a string of text.
в поток, который затем воспроизводиться через MediaElement
. Однако, после выполнения этого кода, лямбда, указанная в task.then()
, никогда не запускается. Я что-то упускаю?
У меня есть функция «Микрофон», заявленная в моем '.appxmanifest'. Я попытался вручную настроить голос из списка «AllVoices» и поместить весь код в блок try/catch, и никаких исключений не было. Проблема заключается не в самом 'MediaElement', а просто в методе' SynthesizeTextToStreamAsync() '. Как я уже сказал, он работает вечно и никогда не запускает лямбда, указанную в 'task.then()'. – Arielle
Я действительно ударил эту проблему, и мне пришлось перезагрузить устройство/эмулятор, чтобы исправить это. В основном вызов Synthesize работал один раз, но потом больше никогда. Попробуйте перезапустить и убедитесь, что вы закрыли объект SpeechSynthesizer, когда это сделано. –
Спасибо за вашу помощь. – Arielle