SpeechSynthesizer::SynthesizeTextToStreamAsync 功能需要永远
SpeechSynthesizer::SynthesizeTextToStreamAsync function takes forever
我有以下 C++/CX 代码:
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()
中指定的 lambda 从未运行。我错过了什么吗?
这对我来说很好用。几种可能性:
- 您没有
Microphone
能力,您正在吞下一个 Access Denied
异常(*)
- 调用
Play
是抛出异常,您正在吞下异常(**)
- 您 运行 使用的设备未安装默认语音语言 (
DefaultVoice == nullptr
)
(*) 虽然您实际上并未使用麦克风进行语音合成,但语音系统在 Windows Phone 中的工作方式需要此功能
(**) 你不应该在设置 Source
之后立即调用 Play
;您必须等待引发 MediaOpened
事件(或者,在这种情况下,依靠 AutoPlay
为您完成工作)。
我有以下 C++/CX 代码:
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()
中指定的 lambda 从未运行。我错过了什么吗?
这对我来说很好用。几种可能性:
- 您没有
Microphone
能力,您正在吞下一个Access Denied
异常(*) - 调用
Play
是抛出异常,您正在吞下异常(**) - 您 运行 使用的设备未安装默认语音语言 (
DefaultVoice == nullptr
)
(*) 虽然您实际上并未使用麦克风进行语音合成,但语音系统在 Windows Phone 中的工作方式需要此功能
(**) 你不应该在设置 Source
之后立即调用 Play
;您必须等待引发 MediaOpened
事件(或者,在这种情况下,依靠 AutoPlay
为您完成工作)。