0

I'm working on a TTS (Text to Speech) application and I need to present the duration of each speech. The problem is that it always returns zero. Any help is most welcome. Thanks.

    SpeechSynthesizer synthesizer = new SpeechSynthesizer();
    MediaPlayerElement mediaPlayerElement = new MediaPlayerElement();
    SpeechSynthesisStream stream = await synthesizer.SynthesizeTextToStreamAsync("Some text...");
    mediaPlayerElement.Source = MediaSource.CreateFromStream(stream, stream.ContentType);
    mediaPlayerElement.MediaPlayer.Play();
    string strDuration = mediaPlayerElement.MediaPlayer.PlaybackSession.NaturalDuration.Milliseconds.ToString();
    MessageDialog msgDlg = new MessageDialog(strDuration);
    await msgDlg.ShowAsync();
Jose Afonso
  • 117
  • 8

1 Answers1

1

MediaPlayerElement.MediaPlayer.PlaybackSession.NaturalDuration always returns zero

I saw that, it looks that we can't MediaPlayer.PlaybackSession.NaturalDuration.Milliseconds get method. I will report that, currently we have a workaround that get the NaturalDuration in NaturalDurationChanged event.

private async void Button_Click(object sender, RoutedEventArgs e)
{
    SpeechSynthesizer synthesizer = new SpeechSynthesizer();
    MediaPlayerElement mediaPlayerElement = new MediaPlayerElement();
    SpeechSynthesisStream stream = await synthesizer.SynthesizeTextToStreamAsync("say hello ");
    mediaPlayerElement.Source = MediaSource.CreateFromStream(stream, stream.ContentType);
    mediaPlayerElement.MediaPlayer.Play();
    mediaPlayerElement.MediaPlayer.PlaybackSession.NaturalDurationChanged += PlaybackSession_NaturalDurationChanged; ;

}

private async void PlaybackSession_NaturalDurationChanged(Windows.Media.Playback.MediaPlaybackSession sender, object args)
{
    var duration = sender.NaturalDuration;
    MessageDialog msgDlg = new MessageDialog(duration.TotalSeconds.ToString()+"s");
    await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
     {
         await msgDlg.ShowAsync();

     });

}
Nico Zhu
  • 32,367
  • 2
  • 15
  • 36