如何获取语音合成器流的持续时间

How to get duration of speech synthesizer stream

请问如何在播放之前测量 SpeechSynthesierStream 的持续时间?

     SpeechSynthesizer ss = new SpeechSynthesizer();
     SpeechSynthesisStream sss;
     ss.Voice = SpeechSynthesizer.AllVoices[3];
     sss = await ss.SynthesizeTextToStreamAsync("Hello world.");
     MediaElement mediaElement = new MediaElement();
     mediaElement.SetSource(sss, sss.ContentType);

     //here I want to get the duration

     mediaElement.Play();

此代码工作正常并且可以说话 "Hello world."。一段时间后 mediaElement.NaturalDuration 也有正确的值。但是我需要在播放演讲之前尽快知道演讲的持续时间。我为 mediaElement.MediaOpen 添加了处理程序,但是这个 "SetSource" 可能不会触发此事件。谢谢。

为了触发 MediaOpen,您需要将 MediaElement 附加到可视化树。将 MediaElement 附加到可视化树后,NaturalDuration 应该在 MediaOpen 事件中可用。