SpeechSynthesizer :: SynthesizeTextToStreamAsync函数需要永远

时间:2015-10-30 21:11:36

标签: windows-phone-8.1 text-to-speech c++-cx speech-synthesis

我有以下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 个答案:

答案 0 :(得分:2)

这对我来说很好。一些可能性:

  1. 您没有Microphone功能而且您正在吞下Access Denied例外(*)
  2. 调用Play正在投掷并且您正在吞下例外(**)
  3. 您正在未安装默认语音语言的设备上运行(DefaultVoice == nullptr
  4. (*)虽然您实际上没有使用麦克风进行语音合成,但语音系统在Windows Phone中的工作方式需要此功能

    (**)设置Play后,不应立即致电Source;您必须等待MediaOpened事件被提出(或者,在这种情况下,依靠AutoPlay为您完成工作)。