我有以下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将永远不会运行。我错过了什么吗?
答案 0 :(得分:2)
这对我来说很好。一些可能性:
Microphone
功能而且您正在吞下Access Denied
例外(*)Play
正在投掷并且您正在吞下例外(**)DefaultVoice == nullptr
)(*)虽然您实际上没有使用麦克风进行语音合成,但语音系统在Windows Phone中的工作方式需要此功能
(**)设置Play
后,不应立即致电Source
;您必须等待MediaOpened
事件被提出(或者,在这种情况下,依靠AutoPlay
为您完成工作)。