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 从未运行。我错过了什么吗?

这对我来说很好用。几种可能性:

  1. 您没有 Microphone 能力,您正在吞下一个 Access Denied 异常(*)
  2. 调用 Play 是抛出异常,您正在吞下异常(**)
  3. 您 运行 使用的设备未安装默认语音语言 (DefaultVoice == nullptr)

(*) 虽然您实际上并未使用麦克风进行语音合成,但语音系统在 Windows Phone 中的工作方式需要此功能

(**) 你不应该在设置 Source 之后立即调用 Play;您必须等待引发 MediaOpened 事件(或者,在这种情况下,依靠 AutoPlay 为您完成工作)。